|
26 | 26 | from django.urls import reverse as urlreverse |
27 | 27 | from django.conf import settings |
28 | 28 | from django.contrib.auth.models import User |
| 29 | +from django.core.serializers.json import DjangoJSONEncoder |
29 | 30 | from django.test import Client, override_settings |
30 | 31 | from django.db.models import F, Max |
31 | 32 | from django.http import QueryDict, FileResponse |
|
49 | 50 | from ietf.meeting.utils import add_event_info_to_session_qs, participants_for_meeting |
50 | 51 | from ietf.meeting.utils import create_recording, get_next_sequence, bluesheet_data |
51 | 52 | from ietf.meeting.views import session_draft_list, parse_agenda_filter_params, sessions_post_save, agenda_extract_schedule |
52 | | -from ietf.meeting.views import get_summary_by_area, get_summary_by_type, get_summary_by_purpose |
| 53 | +from ietf.meeting.views import get_summary_by_area, get_summary_by_type, get_summary_by_purpose, generate_agenda_data |
53 | 54 | from ietf.name.models import SessionStatusName, ImportantDateName, RoleName, ProceedingsMaterialTypeName |
54 | 55 | from ietf.utils.decorators import skip_coverage |
55 | 56 | from ietf.utils.mail import outbox, empty_outbox, get_payload_text |
@@ -245,30 +246,34 @@ def test_meeting_agenda(self): |
245 | 246 |
|
246 | 247 | # Agenda API tests |
247 | 248 | # -> Meeting data |
248 | | - r = self.client.get(urlreverse("ietf.meeting.views.api_get_agenda_data", kwargs=dict(num=meeting.number))) |
249 | | - self.assertEqual(r.status_code, 200) |
250 | | - rjson = json.loads(r.content.decode("utf8")) |
251 | | - self.assertJSONEqual( |
252 | | - r.content.decode("utf8"), |
| 249 | + # First, check that the generation function does the right thing |
| 250 | + generated_data = generate_agenda_data(meeting.number) |
| 251 | + self.assertEqual( |
| 252 | + generated_data, |
253 | 253 | { |
254 | 254 | "meeting": { |
255 | 255 | "number": meeting.number, |
256 | 256 | "city": meeting.city, |
257 | 257 | "startDate": meeting.date.isoformat(), |
258 | 258 | "endDate": meeting.end_date().isoformat(), |
259 | | - "updated": rjson.get("meeting").get("updated"), # Just expect the value to exist |
| 259 | + "updated": generated_data.get("meeting").get("updated"), # Just expect the value to exist |
260 | 260 | "timezone": meeting.time_zone, |
261 | 261 | "infoNote": meeting.agenda_info_note, |
262 | 262 | "warningNote": meeting.agenda_warning_note |
263 | 263 | }, |
264 | | - "categories": rjson.get("categories"), # Just expect the value to exist |
| 264 | + "categories": generated_data.get("categories"), # Just expect the value to exist |
265 | 265 | "isCurrentMeeting": True, |
266 | | - "usesNotes": False, # make_meeting_test_data sets number=72 |
267 | | - "schedule": rjson.get("schedule"), # Just expect the value to exist |
| 266 | + "usesNotes": False, # make_meeting_test_data sets number=72 |
| 267 | + "schedule": generated_data.get("schedule"), # Just expect the value to exist |
268 | 268 | "floors": [] |
269 | 269 | } |
270 | 270 | ) |
271 | | - # -> Session Materials |
| 271 | + with patch("ietf.meeting.views.generate_agenda_data", return_value=generated_data): |
| 272 | + r = self.client.get(urlreverse("ietf.meeting.views.api_get_agenda_data", kwargs=dict(num=meeting.number))) |
| 273 | + self.assertEqual(r.status_code, 200) |
| 274 | + # json.dumps using the DjangoJSONEncoder to handle timestamps consistently |
| 275 | + self.assertJSONEqual(r.content.decode("utf8"), json.dumps(generated_data, cls=DjangoJSONEncoder)) |
| 276 | + # -> Session MaterialM |
272 | 277 | r = self.client.get(urlreverse("ietf.meeting.views.api_get_session_materials", kwargs=dict(session_id=session.id))) |
273 | 278 | self.assertEqual(r.status_code, 200) |
274 | 279 | rjson = json.loads(r.content.decode("utf8")) |
|
0 commit comments