1313from django .urls import reverse as urlreverse
1414
1515from ietf .utils .test_utils import login_testing_unauthorized , TestCase , reload_db_objects
16- from ietf .doc .models import TelechatDocEvent
16+ from ietf .doc .models import TelechatDocEvent , LastCallDocEvent , State
1717from ietf .group .models import Role
1818from ietf .iesg .models import TelechatDate
1919from ietf .person .models import Person
2626 reviewer_rotation_list ,
2727 send_unavaibility_period_ending_reminder , send_reminder_all_open_reviews ,
2828 send_review_reminder_overdue_assignment , send_reminder_unconfirmed_assignments )
29- from ietf .name .models import ReviewResultName , ReviewRequestStateName , ReviewAssignmentStateName
29+ from ietf .name .models import ReviewResultName , ReviewRequestStateName , ReviewAssignmentStateName , \
30+ ReviewTypeName
3031import ietf .group .views
3132from ietf .utils .mail import outbox , empty_outbox
3233from ietf .dbtemplate .factories import DBTemplateFactory
@@ -91,6 +92,7 @@ def test_suggested_review_requests(self):
9192 self .assertEqual (len (suggestions ), 1 )
9293 self .assertEqual (suggestions [0 ].doc , doc )
9394 self .assertEqual (suggestions [0 ].team , team )
95+ self .assertFalse (getattr (suggestions [0 ], 'in_lc_and_telechat' , None ))
9496
9597 # blocked by non-versioned refusal
9698 review_req .requested_rev = ""
@@ -120,6 +122,35 @@ def test_suggested_review_requests(self):
120122
121123 self .assertEqual (len (suggested_review_requests_for_team (team )), 1 )
122124
125+ def test_suggested_review_requests_on_lc_and_telechat (self ):
126+ review_req = ReviewRequestFactory (state_id = 'assigned' )
127+ doc = review_req .doc
128+ team = review_req .team
129+
130+ # put on telechat
131+ TelechatDocEvent .objects .create (
132+ type = "scheduled_for_telechat" ,
133+ by = Person .objects .get (name = "(System)" ),
134+ doc = doc ,
135+ rev = doc .rev ,
136+ telechat_date = TelechatDate .objects .all ().first ().date ,
137+ )
138+
139+ # Put on last call as well
140+ doc .states .add (State .objects .get (type = "draft-iesg" , slug = "lc" , used = True ))
141+ LastCallDocEvent .objects .create (
142+ doc = doc ,
143+ expires = datetime .datetime .now () + datetime .timedelta (days = 365 ),
144+ by = Person .objects .get (name = "(System)" ),
145+ rev = doc .rev
146+ )
147+
148+ suggestions = suggested_review_requests_for_team (team )
149+ self .assertEqual (len (suggestions ), 1 )
150+ self .assertEqual (suggestions [0 ].doc , doc )
151+ self .assertEqual (suggestions [0 ].team , team )
152+ self .assertTrue (suggestions [0 ].in_lc_and_telechat )
153+
123154 def test_reviewer_overview (self ):
124155 team = ReviewTeamFactory ()
125156 reviewer = RoleFactory (name_id = 'reviewer' ,group = team ,person__user__username = 'reviewer' ).person
@@ -228,7 +259,9 @@ def test_manage_review_requests(self):
228259 "r{}-action" .format (review_req3 .pk ): "assign" ,
229260 "r{}-reviewer" .format (review_req3 .pk ): another_reviewer .email_set .first ().pk ,
230261 "r{}-add_skip" .format (review_req3 .pk ): 1 ,
231-
262+ # Should be ignored, setting review_type only applies to suggested reviews
263+ "r{}-review_type" .format (review_req3 .pk ): ReviewTypeName .objects .get (slug = 'telechat' ).pk ,
264+
232265 "action" : "save" ,
233266 })
234267 self .assertEqual (r .status_code , 302 )
@@ -237,7 +270,67 @@ def test_manage_review_requests(self):
237270 settings = ReviewerSettings .objects .filter (team = review_req3 .team , person = another_reviewer ).first ()
238271 self .assertEqual (settings .skip_next ,1 )
239272 self .assertEqual (review_req3 .state_id , "assigned" )
273+ self .assertEqual (review_req3 .type_id , "lc" )
274+
275+ def test_manage_review_requests_assign_suggested_reviews (self ):
276+ doc = DocumentFactory ()
277+ team = ReviewTeamFactory ()
240278
279+ # put on telechat
280+ TelechatDocEvent .objects .create (
281+ type = "scheduled_for_telechat" ,
282+ by = Person .objects .get (name = "(System)" ),
283+ doc = doc ,
284+ rev = doc .rev ,
285+ telechat_date = TelechatDate .objects .all ().first ().date ,
286+ )
287+
288+ # Put on last call as well
289+ doc .states .add (State .objects .get (type = "draft-iesg" , slug = "lc" , used = True ))
290+ LastCallDocEvent .objects .create (
291+ doc = doc ,
292+ expires = datetime .datetime .now () + datetime .timedelta (days = 365 ),
293+ by = Person .objects .get (name = "(System)" ),
294+ rev = doc .rev
295+ )
296+
297+ reviewer = RoleFactory (name_id = 'reviewer' , group = team , person__user__username = 'reviewer' )
298+ unassigned_url = urlreverse (ietf .group .views .manage_review_requests , kwargs = { 'acronym' : team .acronym , 'group_type' : team .type_id , "assignment_status" : "unassigned" })
299+
300+ login_testing_unauthorized (self , "secretary" , unassigned_url )
301+
302+ # get
303+ r = self .client .get (unassigned_url )
304+ self .assertEqual (r .status_code , 200 )
305+ self .assertContains (r , doc .name )
306+
307+ # Submit as lc review
308+ r = self .client .post (unassigned_url , {
309+ "rlc-{}-action" .format (doc .name ): "assign" ,
310+ "rlc-{}-review_type" .format (doc .name ): ReviewTypeName .objects .get (slug = 'lc' ).pk ,
311+ "rlc-{}-reviewer" .format (doc .name ): reviewer .person .email_set .first ().pk ,
312+
313+ "action" : "save" ,
314+ })
315+ self .assertEqual (r .status_code , 302 )
316+ review_request = doc .reviewrequest_set .get ()
317+ self .assertEqual (review_request .type_id , 'lc' )
318+
319+ # Clean up and try again as telechat
320+ review_request .reviewassignment_set .all ().delete ()
321+ review_request .delete ()
322+
323+ r = self .client .post (unassigned_url , {
324+ "rlc-{}-action" .format (doc .name ): "assign" ,
325+ "rlc-{}-review_type" .format (doc .name ): ReviewTypeName .objects .get (slug = 'telechat' ).pk ,
326+ "rlc-{}-reviewer" .format (doc .name ): reviewer .person .email_set .first ().pk ,
327+
328+ "action" : "save" ,
329+ })
330+ self .assertEqual (r .status_code , 302 )
331+ review_request = doc .reviewrequest_set .get ()
332+ self .assertEqual (review_request .type_id , 'telechat' )
333+
241334 def test_email_open_review_assignments (self ):
242335 review_req1 = ReviewRequestFactory ()
243336 review_assignment_completed = ReviewAssignmentFactory (review_request = review_req1 ,reviewer = EmailFactory (person__user__username = 'marschairman' ), state_id = 'completed' , reviewed_rev = 0 )
0 commit comments