@@ -3109,6 +3109,19 @@ def test_edit_meeting_schedule(self):
31093109 for s in [s1 , s2 ]:
31103110 e = q ("#session{}" .format (s .pk ))
31113111
3112+ # should be link to edit/cancel session
3113+ self .assertTrue (
3114+ e .find ('a[href="{}"]' .format (
3115+ urlreverse ('ietf.meeting.views.edit_session' , kwargs = {'session_id' : s .pk }),
3116+ ))
3117+ )
3118+ self .assertTrue (
3119+ e .find ('a[href="{}?sched={}"]' .format (
3120+ urlreverse ('ietf.meeting.views.cancel_session' , kwargs = {'session_id' : s .pk }),
3121+ meeting .schedule .pk ,
3122+ ))
3123+ )
3124+
31123125 # info in the item representing the session that can be moved around
31133126 self .assertIn (s .group .acronym , e .find (".session-label" ).text ())
31143127 if s .comments :
@@ -3697,6 +3710,54 @@ def test_edit_session(self):
36973710 self .assertEqual (session .attendees , 103 )
36983711 self .assertEqual (session .comments , 'So much to say' )
36993712
3713+ def test_cancel_session (self ):
3714+ # session for testing with official schedule
3715+ session = SessionFactory (meeting__type_id = 'ietf' )
3716+ url = urlreverse ('ietf.meeting.views.cancel_session' , kwargs = {'session_id' : session .pk })
3717+ return_url = urlreverse ('ietf.meeting.views.edit_meeting_schedule' , kwargs = {'num' : session .meeting .number })
3718+ # session for testing with unofficial schedule
3719+ other_session = SessionFactory (meeting = session .meeting )
3720+ unofficial_schedule = ScheduleFactory (meeting = other_session .meeting )
3721+ url_unofficial = urlreverse (
3722+ 'ietf.meeting.views.cancel_session' ,
3723+ kwargs = {'session_id' : other_session .pk },
3724+ ) + f'?sched={ unofficial_schedule .pk } '
3725+ return_url_unofficial = urlreverse (
3726+ 'ietf.meeting.views.edit_meeting_schedule' ,
3727+ kwargs = {
3728+ 'num' : other_session .meeting .number ,
3729+ 'name' : unofficial_schedule .name ,
3730+ 'owner' : unofficial_schedule .owner_email (),
3731+ },
3732+ )
3733+
3734+ login_testing_unauthorized (self , 'secretary' , url )
3735+ r = self .client .get (url )
3736+ self .assertContains (r , 'Cancel session' , status_code = 200 )
3737+ self .assertIn (return_url , r .content .decode ())
3738+ r = self .client .get (url_unofficial )
3739+ self .assertContains (r , 'Cancel session' , status_code = 200 )
3740+ self .assertIn (return_url_unofficial , r .content .decode ())
3741+
3742+ r = self .client .post (url , {})
3743+ self .assertFormError (r , 'form' , 'confirmed' , 'This field is required.' )
3744+ r = self .client .post (url_unofficial , {})
3745+ self .assertFormError (r , 'form' , 'confirmed' , 'This field is required.' )
3746+
3747+ r = self .client .post (url , {'confirmed' : 'on' })
3748+ self .assertRedirects (r , return_url )
3749+ session = Session .objects .with_current_status ().get (pk = session .pk )
3750+ self .assertEqual (session .current_status , 'canceled' )
3751+ r = self .client .get (url )
3752+ self .assertRedirects (r , return_url ) # should redirect immediately when session is already canceled
3753+
3754+ r = self .client .post (url_unofficial , {'confirmed' : 'on' })
3755+ self .assertRedirects (r , return_url_unofficial )
3756+ other_session = Session .objects .with_current_status ().get (pk = other_session .pk )
3757+ self .assertEqual (other_session .current_status , 'canceled' )
3758+ r = self .client .get (url_unofficial )
3759+ self .assertRedirects (r , return_url_unofficial ) # should redirect immediately when session is already canceled
3760+
37003761 def test_edit_timeslots (self ):
37013762 meeting = make_meeting_test_data ()
37023763
0 commit comments