1010from ietf .meeting .models import Schedule , TimeSlot , Session , ScheduledSession , Meeting , Constraint
1111from ietf .meeting .helpers import get_meeting
1212from ietf .meeting .test_data import make_meeting_test_data
13+ from ietf .utils .mail import outbox
1314
1415
1516class ApiTests (TestCase ):
@@ -173,16 +174,34 @@ def test_person_json(self):
173174
174175 url = urlreverse ("ietf.person.ajax.person_json" , kwargs = dict (personid = person .pk ))
175176 r = self .client .get (url )
177+ self .assertEqual (r .status_code , 200 )
176178 info = json .loads (r .content )
177179 self .assertEqual (info ["name" ], person .name )
178180
181+ def test_sessions_json (self ):
182+ meeting = make_meeting_test_data ()
183+
184+ url = urlreverse ("ietf.meeting.ajax.sessions_json" ,kwargs = dict (num = meeting .number ))
185+ r = self .client .get (url )
186+ self .assertEqual (r .status_code , 200 )
187+ info = json .loads (r .content )
188+ self .assertEqual (set ([x ['short_name' ] for x in info ]),set (['mars' ,'ames' ]))
189+
190+ schedule = Schedule .objects .filter (meeting = meeting ).first ()
191+ url = urlreverse ("ietf.meeting.ajax.scheduledsessions_json" ,kwargs = dict (num = meeting .number ,name = schedule .name ))
192+ self .assertEqual (r .status_code , 200 )
193+ info = json .loads (r .content )
194+ self .assertEqual (set ([x ['short_name' ] for x in info ]),set (['mars' ,'ames' ]))
195+
196+
179197 def test_slot_json (self ):
180198 meeting = make_meeting_test_data ()
181199 slot = meeting .timeslot_set .all ()[0 ]
182200
183201 url = urlreverse ("ietf.meeting.ajax.timeslot_sloturl" ,
184202 kwargs = dict (num = meeting .number , slotid = slot .pk ))
185203 r = self .client .get (url )
204+ self .assertEqual (r .status_code , 200 )
186205 info = json .loads (r .content )
187206 self .assertEqual (info ["timeslot_id" ], slot .pk )
188207
@@ -200,15 +219,18 @@ def test_create_new_slot(self):
200219 }
201220
202221 # unauthorized post
222+ prior_slotcount = meeting .timeslot_set .count ()
203223 self .client .login (remote_user = "ad" )
204224 r = self .client .post (url , post_data )
205225 self .assertEqual (r .status_code , 403 )
226+ self .assertEqual (meeting .timeslot_set .count (),prior_slotcount )
206227
207- # create room
228+ # create slot
208229 self .client .login (remote_user = "secretary" )
209230 r = self .client .post (url , post_data )
210231 self .assertEqual (r .status_code , 302 )
211232 self .assertTrue (meeting .timeslot_set .filter (time = slot_time ))
233+ self .assertEqual (meeting .timeslot_set .count (),prior_slotcount + 1 )
212234
213235 def test_delete_slot (self ):
214236 meeting = make_meeting_test_data ()
@@ -343,9 +365,19 @@ def test_set_meeting_agenda(self):
343365 schedule .public = True
344366 schedule .save ()
345367
368+ prior_length = len (outbox )
369+ r = self .client .post (url , post_data )
370+ self .assertEqual (r .status_code , 200 )
371+ self .assertEqual (Meeting .objects .get (pk = meeting .pk ).agenda , schedule )
372+ self .assertEqual (len (outbox ),prior_length + 2 )
373+
374+ # Post it again, and make sure mail isn't resent
375+
376+ prior_length = len (outbox )
346377 r = self .client .post (url , post_data )
347378 self .assertEqual (r .status_code , 200 )
348379 self .assertEqual (Meeting .objects .get (pk = meeting .pk ).agenda , schedule )
380+ self .assertEqual (len (outbox ),prior_length )
349381
350382 def test_read_only (self ):
351383 meeting = make_meeting_test_data ()
@@ -404,3 +436,60 @@ def test_update_timeslot_pinned(self):
404436 r = self .client .post (url , post_data )
405437 self .assertEqual (r .status_code , 200 )
406438 self .assertTrue (ScheduledSession .objects .get (pk = scheduled .pk ).pinned )
439+
440+ class UnusedButExposedApiTests (TestCase ):
441+
442+ def test_manipulate_timeslot_via_dajaxice (self ):
443+ meeting = make_meeting_test_data ()
444+ slot_time = datetime .date .today ()
445+
446+ url = '/dajaxice/ietf.meeting.update_timeslot_purpose/'
447+
448+ create_post_data = {
449+ 'argv' : json .dumps ({
450+ "meeting_num" : meeting .number ,
451+ "timeslot_id" : 0 ,
452+ "purpose" : "plenary" ,
453+ "room_id" : meeting .room_set .first ().id ,
454+ "time" : slot_time .strftime ("%Y-%m-%d %H:%M:%S" ),
455+ "duration" : 3600
456+ })}
457+
458+ prior_timeslot_count = meeting .timeslot_set .count ()
459+ # Create as nobody should fail
460+ r = self .client .post (url , create_post_data )
461+ self .assertEqual (r .status_code , 200 )
462+ info = json .loads (r .content )
463+ self .assertTrue ('error' in info and info ['error' ]== 'no permission' )
464+ self .assertEqual (meeting .timeslot_set .count (),prior_timeslot_count )
465+
466+ # Successful create
467+ self .client .login (remote_user = "secretary" )
468+ r = self .client .post (url , create_post_data )
469+ self .assertEqual (r .status_code , 200 )
470+ info = json .loads (r .content )
471+ self .assertFalse ('error' in info )
472+ self .assertTrue ('roomtype' in info )
473+ self .assertEqual (info ['roomtype' ],'plenary' )
474+ self .assertEqual (meeting .timeslot_set .count (),prior_timeslot_count + 1 )
475+
476+ modify_post_data = {
477+ 'argv' : json .dumps ({
478+ "meeting_num" : meeting .number ,
479+ "timeslot_id" : meeting .timeslot_set .get (time = slot_time ).id ,
480+ "purpose" : "session"
481+ })}
482+
483+ # Fail as non-secretariat
484+ self .client .login (remote_user = "plain" )
485+ r = self .client .post (url , modify_post_data )
486+ self .assertEqual (r .status_code , 200 )
487+ info = json .loads (r .content )
488+ self .assertTrue ('error' in info and info ['error' ]== 'no permission' )
489+ self .assertEqual (meeting .timeslot_set .get (time = slot_time ).type .name ,'Plenary' )
490+
491+ # Successful change of purpose
492+ self .client .login (remote_user = "secretary" )
493+ r = self .client .post (url , modify_post_data )
494+ self .assertEqual (r .status_code , 200 )
495+ self .assertEqual (meeting .timeslot_set .get (time = slot_time ).type .name ,'Session' )
0 commit comments