@@ -1171,6 +1171,161 @@ def test_edit_meeting_schedule(self):
11711171 self .assertEqual (list (SchedTimeSessAssignment .objects .filter (schedule = schedule , timeslot = timeslots [1 ])), [])
11721172 self .assertEqual (list (SchedTimeSessAssignment .objects .filter (schedule = schedule , timeslot = timeslots [2 ])), [])
11731173
1174+ def test_edit_meeting_timeslots_and_misc_sessions (self ):
1175+ meeting = make_meeting_test_data ()
1176+
1177+ self .client .login (username = "secretary" , password = "secretary+password" )
1178+
1179+ # check we have the grid and everything set up as a baseline -
1180+ # the Javascript tests check that the Javascript can work with
1181+ # it
1182+ url = urlreverse ("ietf.meeting.views.edit_meeting_timeslots_and_misc_sessions" , kwargs = dict (num = meeting .number , owner = meeting .schedule .base .owner_email (), name = meeting .schedule .base .name ))
1183+ r = self .client .get (url )
1184+ q = PyQuery (r .content )
1185+
1186+ breakfast_room = Room .objects .get (meeting = meeting , name = "Breakfast Room" )
1187+ break_room = Room .objects .get (meeting = meeting , name = "Break Area" )
1188+ reg_room = Room .objects .get (meeting = meeting , name = "Registration Area" )
1189+
1190+ for i in range (meeting .days ):
1191+ self .assertTrue (q ("[data-day=\" {}\" ]" .format ((meeting .date + datetime .timedelta (days = i )).isoformat ())))
1192+
1193+ self .assertTrue (q (".room-label:contains(\" {}\" )" .format (breakfast_room .name )))
1194+ self .assertTrue (q (".room-label:contains(\" {}\" )" .format (break_room .name )))
1195+ self .assertTrue (q (".room-label:contains(\" {}\" )" .format (reg_room .name )))
1196+
1197+ break_slot = TimeSlot .objects .get (location = break_room , type = 'break' )
1198+
1199+ room_row = q (".room-row[data-day=\" {}\" ][data-room=\" {}\" ]" .format (break_slot .time .date ().isoformat (), break_slot .location_id ))
1200+ self .assertTrue (room_row )
1201+ self .assertTrue (room_row .find ("#timeslot{}" .format (break_slot .pk )))
1202+
1203+ self .assertTrue (q (".timeslot-form" ))
1204+
1205+ # add timeslot
1206+ ietf_group = Group .objects .get (acronym = 'ietf' )
1207+
1208+ r = self .client .post (url , {
1209+ 'day' : meeting .date ,
1210+ 'time' : '08:30' ,
1211+ 'duration' : '1:30' ,
1212+ 'location' : break_room .pk ,
1213+ 'show_location' : 'on' ,
1214+ 'type' : 'other' ,
1215+ 'group' : ietf_group .pk ,
1216+ 'name' : "IETF Testing" ,
1217+ 'short' : "ietf-testing" ,
1218+ 'scroll' : 1234 ,
1219+ 'action' : 'add-timeslot' ,
1220+ })
1221+ self .assertNoFormPostErrors (r )
1222+ self .assertIn ("#scroll=1234" , r ['Location' ])
1223+
1224+ test_timeslot = TimeSlot .objects .get (meeting = meeting , name = "IETF Testing" )
1225+ self .assertEqual (test_timeslot .time , datetime .datetime .combine (meeting .date , datetime .time (8 , 30 )))
1226+ self .assertEqual (test_timeslot .duration , datetime .timedelta (hours = 1 , minutes = 30 ))
1227+ self .assertEqual (test_timeslot .location_id , break_room .pk )
1228+ self .assertEqual (test_timeslot .show_location , True )
1229+ self .assertEqual (test_timeslot .type_id , 'other' )
1230+
1231+ test_session = Session .objects .get (meeting = meeting , timeslotassignments__timeslot = test_timeslot )
1232+ self .assertEqual (test_session .short , 'ietf-testing' )
1233+ self .assertEqual (test_session .group , ietf_group )
1234+
1235+ self .assertTrue (SchedulingEvent .objects .filter (session = test_session , status = 'sched' ))
1236+
1237+ # edit timeslot
1238+ r = self .client .get (url , {
1239+ 'timeslot' : test_timeslot .pk ,
1240+ 'action' : 'edit-timeslot' ,
1241+ })
1242+ self .assertEqual (r .status_code , 200 )
1243+ edit_form_html = json .loads (r .content )['form' ]
1244+ q = PyQuery (edit_form_html )
1245+ self .assertEqual (q ("[name=name]" ).val (), test_timeslot .name )
1246+ self .assertEqual (q ("[name=location]" ).val (), str (test_timeslot .location_id ))
1247+ self .assertEqual (q ("[name=timeslot]" ).val (), str (test_timeslot .pk ))
1248+ self .assertEqual (q ("[name=type]" ).val (), str (test_timeslot .type_id ))
1249+ self .assertEqual (q ("[name=group]" ).val (), str (ietf_group .pk ))
1250+
1251+ iab_group = Group .objects .get (acronym = 'iab' )
1252+
1253+ r = self .client .post (url , {
1254+ 'timeslot' : test_timeslot .pk ,
1255+ 'day' : meeting .date ,
1256+ 'time' : '09:30' ,
1257+ 'duration' : '1:00' ,
1258+ 'location' : breakfast_room .pk ,
1259+ 'type' : 'other' ,
1260+ 'group' : iab_group .pk ,
1261+ 'name' : "IETF Testing 2" ,
1262+ 'short' : "ietf-testing2" ,
1263+ 'action' : 'edit-timeslot' ,
1264+ })
1265+ self .assertNoFormPostErrors (r )
1266+ test_timeslot .refresh_from_db ()
1267+ self .assertEqual (test_timeslot .time , datetime .datetime .combine (meeting .date , datetime .time (9 , 30 )))
1268+ self .assertEqual (test_timeslot .duration , datetime .timedelta (hours = 1 ))
1269+ self .assertEqual (test_timeslot .location_id , breakfast_room .pk )
1270+ self .assertEqual (test_timeslot .show_location , False )
1271+ self .assertEqual (test_timeslot .type_id , 'other' )
1272+
1273+ test_session .refresh_from_db ()
1274+ self .assertEqual (test_session .short , 'ietf-testing2' )
1275+ self .assertEqual (test_session .group , iab_group )
1276+
1277+ # cancel timeslot
1278+ r = self .client .post (url , {
1279+ 'timeslot' : test_timeslot .pk ,
1280+ 'action' : 'cancel-timeslot' ,
1281+ })
1282+ self .assertNoFormPostErrors (r )
1283+
1284+ event = SchedulingEvent .objects .filter (
1285+ session__timeslotassignments__timeslot = test_timeslot
1286+ ).order_by ('-id' ).first ()
1287+ self .assertEqual (event .status_id , 'canceled' )
1288+
1289+ # delete timeslot
1290+ test_presentation = Document .objects .create (name = 'slides-test' , type_id = 'slides' )
1291+ SessionPresentation .objects .create (
1292+ document = test_presentation ,
1293+ rev = '1' ,
1294+ session = test_session
1295+ )
1296+
1297+ r = self .client .post (url , {
1298+ 'timeslot' : test_timeslot .pk ,
1299+ 'action' : 'delete-timeslot' ,
1300+ })
1301+ self .assertNoFormPostErrors (r )
1302+
1303+ self .assertEqual (list (TimeSlot .objects .filter (pk = test_timeslot .pk )), [])
1304+ self .assertEqual (list (Session .objects .filter (pk = test_session .pk )), [])
1305+ self .assertEqual (test_presentation .get_state_slug (), 'deleted' )
1306+
1307+ # set agenda note
1308+ assignment = SchedTimeSessAssignment .objects .filter (session__group__acronym = 'mars' , schedule = meeting .schedule ).first ()
1309+
1310+ url = urlreverse ("ietf.meeting.views.edit_meeting_timeslots_and_misc_sessions" , kwargs = dict (num = meeting .number , owner = meeting .schedule .owner_email (), name = meeting .schedule .name ))
1311+
1312+ r = self .client .post (url , {
1313+ 'timeslot' : assignment .timeslot_id ,
1314+ 'day' : assignment .timeslot .time .date ().isoformat (),
1315+ 'time' : assignment .timeslot .time .time ().isoformat (),
1316+ 'duration' : assignment .timeslot .duration ,
1317+ 'location' : assignment .timeslot .location_id ,
1318+ 'type' : assignment .timeslot .type_id ,
1319+ 'name' : assignment .timeslot .name ,
1320+ 'agenda_note' : "New Test Note" ,
1321+ 'action' : 'edit-timeslot' ,
1322+ })
1323+ self .assertNoFormPostErrors (r )
1324+
1325+ assignment .session .refresh_from_db ()
1326+ self .assertEqual (assignment .session .agenda_note , "New Test Note" )
1327+
1328+
11741329 def test_new_meeting_schedule (self ):
11751330 meeting = make_meeting_test_data ()
11761331
0 commit comments