88from pyquery import PyQuery
99from unittest import skipIf
1010
11+ import django
1112from django .urls import reverse as urlreverse
1213#from django.test.utils import override_settings
1314
@@ -205,6 +206,7 @@ def test_edit_meeting_schedule(self):
205206 self .assertTrue (not s1_element .is_displayed ())
206207
207208@skipIf (skip_selenium , skip_message )
209+ @skipIf (django .VERSION [0 ]== 2 , "Skipping test with race conditions under Django 2" )
208210class ScheduleEditTests (IetfLiveServerTestCase ):
209211 def setUp (self ):
210212 self .driver = start_web_driver ()
@@ -228,6 +230,7 @@ def login(self):
228230 self .driver .find_element_by_xpath ('//button[@type="submit"]' ).click ()
229231
230232 def testUnschedule (self ):
233+
231234 meeting = make_meeting_test_data ()
232235 colors .fg_group_colors ['FARFUT' ] = 'blue'
233236 colors .bg_group_colors ['FARFUT' ] = 'white'
@@ -236,21 +239,19 @@ def testUnschedule(self):
236239
237240
238241 ss = list (SchedTimeSessAssignment .objects .filter (session__meeting__number = 72 ,session__group__acronym = 'mars' ,schedule__name = 'test-schedule' )) # pyflakes:ignore
239- debug .pprint ('ss[0].json_dict("http:")' )
240-
241242
242243 self .login ()
243244 url = self .absreverse ('ietf.meeting.views.edit_schedule' ,kwargs = dict (num = '72' ,name = 'test-schedule' ,owner = 'plain@example.com' ))
244- js = self .absreverse ('ietf.meeting.ajax.sessions_json' , kwargs = dict (num = '72' ))
245- debug .show ('js' )
246- r = self .client .get (js ) # pyflakes:ignore
247- from ietf .utils .test_utils import unicontent # pyflakes:ignore
248- debug .pprint ('r.json()' )
249245 self .driver .get (url )
250246
251- s1 = Session .objects .filter (group__acronym = 'mars' , meeting = meeting ).first ()
247+ # driver.get() will wait for scripts to finish, but not ajax
248+ # requests. Wait for completion of the permissions check:
249+ read_only_note = self .driver .find_element_by_id ('read_only' )
250+ WebDriverWait (self .driver , 10 ).until (expected_conditions .invisibility_of_element (read_only_note ), "Read-only schedule" )
252251
253- time .sleep (0.1 )
252+ s1 = Session .objects .filter (group__acronym = 'mars' , meeting = meeting ).first ()
253+ selector = "#session_{}" .format (s1 .pk )
254+ WebDriverWait (self .driver , 30 ).until (expected_conditions .presence_of_element_located ((By .CSS_SELECTOR , selector )), "Did not find %s" % selector )
254255
255256 self .assertEqual (self .driver .find_elements_by_css_selector ("#sortable-list #session_{}" .format (s1 .pk )), [])
256257
@@ -261,6 +262,7 @@ def testUnschedule(self):
261262 self .assertTrue (self .driver .find_elements_by_css_selector ("#sortable-list #session_{}" .format (s1 .pk )))
262263
263264 time .sleep (0.1 ) # The API that modifies the database runs async
265+
264266 self .assertEqual (SchedTimeSessAssignment .objects .filter (session__meeting__number = 72 ,session__group__acronym = 'mars' ,schedule__name = 'test-schedule' ).count (),0 )
265267
266268@skipIf (skip_selenium , skip_message )
0 commit comments