|
35 | 35 | from ietf.meeting.helpers import send_interim_approval_request |
36 | 36 | from ietf.meeting.helpers import send_interim_meeting_cancellation_notice, send_interim_session_cancellation_notice |
37 | 37 | from ietf.meeting.helpers import send_interim_minutes_reminder, populate_important_dates, update_important_dates |
| 38 | +from ietf.meeting.helpers import filter_keyword_for_specific_session |
38 | 39 | from ietf.meeting.models import Session, TimeSlot, Meeting, SchedTimeSessAssignment, Schedule, SessionPresentation, SlideSubmission, SchedulingEvent, Room, Constraint, ConstraintName |
39 | 40 | from ietf.meeting.test_data import make_meeting_test_data, make_interim_meeting, make_interim_test_data |
40 | 41 | from ietf.meeting.utils import finalize, condition_slide_order |
@@ -375,6 +376,63 @@ def test_agenda_week_view(self): |
375 | 376 | self.assertEqual(r_with_tz.status_code,200) |
376 | 377 | self.assertEqual(r.content, r_with_tz.content) |
377 | 378 |
|
| 379 | + def test_agenda_personalize(self): |
| 380 | + """Session selection page should have a checkbox for each session with appropriate keywords""" |
| 381 | + meeting = make_meeting_test_data() |
| 382 | + url = urlreverse("ietf.meeting.views.agenda_personalize",kwargs=dict(num=meeting.number)) |
| 383 | + r = self.client.get(url) |
| 384 | + self.assertEqual(r.status_code,200) |
| 385 | + q = PyQuery(r.content) |
| 386 | + for assignment in SchedTimeSessAssignment.objects.filter( |
| 387 | + schedule__in=[meeting.schedule, meeting.schedule.base], |
| 388 | + timeslot__type__private=False, |
| 389 | + ): |
| 390 | + row = q('#row-{}'.format(assignment.slug())) |
| 391 | + self.assertIsNotNone(row, 'No row for assignment {}'.format(assignment)) |
| 392 | + checkboxes = row('input[type="checkbox"][name="selected-sessions"]') |
| 393 | + self.assertEqual(len(checkboxes), 1, |
| 394 | + 'Row for assignment {} does not have a checkbox input'.format(assignment)) |
| 395 | + checkbox = checkboxes.eq(0) |
| 396 | + self.assertEqual( |
| 397 | + checkbox.attr('data-filter-item'), |
| 398 | + filter_keyword_for_specific_session(assignment.session), |
| 399 | + ) |
| 400 | + |
| 401 | + def test_agenda_personalize_updates_urls(self): |
| 402 | + """The correct URLs should be updated when filter settings change on the personalize agenda view |
| 403 | +
|
| 404 | + Tests that the expected elements have the necessary classes. The actual update of these fields |
| 405 | + is tested in the JS tests |
| 406 | + """ |
| 407 | + meeting = make_meeting_test_data() |
| 408 | + url = urlreverse("ietf.meeting.views.agenda_personalize",kwargs=dict(num=meeting.number)) |
| 409 | + r = self.client.get(url) |
| 410 | + self.assertEqual(r.status_code,200) |
| 411 | + q = PyQuery(r.content) |
| 412 | + |
| 413 | + # Find all the elements expected to be updated |
| 414 | + expected_elements = [] |
| 415 | + nav_tab_anchors = q('ul.nav.nav-tabs > li > a') |
| 416 | + for anchor in nav_tab_anchors.items(): |
| 417 | + text = anchor.text().strip() |
| 418 | + if text in ['Agenda', 'UTC Agenda', 'Select Sessions']: |
| 419 | + expected_elements.append(anchor) |
| 420 | + for btn in q('.buttonlist a.btn').items(): |
| 421 | + text = btn.text().strip() |
| 422 | + if text in ['View customized agenda', 'Download as .ics', 'Subscribe with webcal']: |
| 423 | + expected_elements.append(btn) |
| 424 | + |
| 425 | + # Check that all the expected elements have the correct classes |
| 426 | + for elt in expected_elements: |
| 427 | + self.assertTrue(elt.has_class('agenda-link')) |
| 428 | + self.assertTrue(elt.has_class('filterable')) |
| 429 | + |
| 430 | + # Finally, check that there are no unexpected elements marked to be updated. |
| 431 | + # If there are, they should be added to the test above. |
| 432 | + self.assertEqual(len(expected_elements), |
| 433 | + len(q('.agenda-link.filterable')), |
| 434 | + 'Unexpected elements updated') |
| 435 | + |
378 | 436 | @override_settings(MEETING_MATERIALS_SERVE_LOCALLY=False, MEETING_DOC_HREFS = settings.MEETING_DOC_CDN_HREFS) |
379 | 437 | def test_materials_through_cdn(self): |
380 | 438 | meeting = make_meeting_test_data(create_interims=True) |
|
0 commit comments