@@ -294,6 +294,8 @@ def test_meeting_agenda(self):
294294 (slot .time + slot .duration ).astimezone (meeting .tz ()).strftime ("%H%M" ),
295295 ))
296296 self .assertContains (r , f"shown in the { meeting .tz ()} time zone" )
297+ updated = meeting .updated ().astimezone (meeting .tz ()).strftime ("%Y-%m-%d %H:%M:%S %Z" )
298+ self .assertContains (r , f"Updated { updated } " )
297299
298300 # text, UTC
299301 r = self .client .get (urlreverse (
@@ -309,6 +311,16 @@ def test_meeting_agenda(self):
309311 (slot .time + slot .duration ).astimezone (datetime .timezone .utc ).strftime ("%H%M" ),
310312 ))
311313 self .assertContains (r , "shown in UTC" )
314+ updated = meeting .updated ().astimezone (datetime .timezone .utc ).strftime ("%Y-%m-%d %H:%M:%S %Z" )
315+ self .assertContains (r , f"Updated { updated } " )
316+
317+ # text, invalid updated (none)
318+ with patch ("ietf.meeting.models.Meeting.updated" , return_value = None ):
319+ r = self .client .get (urlreverse (
320+ "ietf.meeting.views.agenda_plain" ,
321+ kwargs = dict (num = meeting .number , ext = ".txt" , utc = "-utc" ),
322+ ))
323+ self .assertNotContains (r , "Updated " )
312324
313325 # future meeting, no agenda
314326 r = self .client .get (urlreverse ("ietf.meeting.views.agenda_plain" , kwargs = dict (num = future_meeting .number , ext = ".txt" )))
@@ -859,6 +871,24 @@ def test_important_dates_ical(self):
859871 for d in meeting .importantdate_set .all ():
860872 self .assertContains (r , d .date .isoformat ())
861873
874+ updated = meeting .updated ()
875+ self .assertIsNotNone (updated )
876+ expected_updated = updated .astimezone (datetime .timezone .utc ).strftime ("%Y%m%dT%H%M%SZ" )
877+ self .assertContains (r , f"DTSTAMP:{ expected_updated } " )
878+ dtstamps_count = r .content .decode ("utf-8" ).count (f"DTSTAMP:{ expected_updated } " )
879+ self .assertEqual (dtstamps_count , meeting .importantdate_set .count ())
880+
881+ # With default cached_updated, 1970-01-01
882+ with patch ("ietf.meeting.models.Meeting.updated" , return_value = None ):
883+ r = self .client .get (url )
884+ for d in meeting .importantdate_set .all ():
885+ self .assertContains (r , d .date .isoformat ())
886+
887+ expected_updated = "19700101T000000Z"
888+ self .assertContains (r , f"DTSTAMP:{ expected_updated } " )
889+ dtstamps_count = r .content .decode ("utf-8" ).count (f"DTSTAMP:{ expected_updated } " )
890+ self .assertEqual (dtstamps_count , meeting .importantdate_set .count ())
891+
862892 def test_group_ical (self ):
863893 meeting = make_meeting_test_data ()
864894 s1 = Session .objects .filter (meeting = meeting , group__acronym = "mars" ).first ()
@@ -4952,7 +4982,23 @@ def test_upcoming_ical(self):
49524982 expected_event_count = len (expected_event_summaries ))
49534983 self .assertNotContains (r , 'Remote instructions:' )
49544984
4955- def test_upcoming_ical_filter (self ):
4985+ updated = meeting .updated ()
4986+ self .assertIsNotNone (updated )
4987+ expected_updated = updated .astimezone (datetime .timezone .utc ).strftime ("%Y%m%dT%H%M%SZ" )
4988+ self .assertContains (r , f"DTSTAMP:{ expected_updated } " )
4989+
4990+ # With default cached_updated, 1970-01-01
4991+ with patch ("ietf.meeting.models.Meeting.updated" , return_value = None ):
4992+ r = self .client .get (url )
4993+ self .assertEqual (r .status_code , 200 )
4994+
4995+ self .assertEqual (meeting .type_id , "ietf" )
4996+
4997+ expected_updated = "19700101T000000Z"
4998+ self .assertEqual (1 , r .content .decode ("utf-8" ).count (f"DTSTAMP:{ expected_updated } " ))
4999+
5000+ @patch ("ietf.meeting.utils.preprocess_meeting_important_dates" )
5001+ def test_upcoming_ical_filter (self , mock_preprocess_meeting_important_dates ):
49565002 # Just a quick check of functionality - details tested by test_js.InterimTests
49575003 make_meeting_test_data (create_interims = True )
49585004 url = urlreverse ("ietf.meeting.views.upcoming_ical" )
@@ -4974,6 +5020,8 @@ def test_upcoming_ical_filter(self):
49745020 ],
49755021 expected_event_count = 2 )
49765022
5023+ # Verify preprocess_meeting_important_dates isn't being called
5024+ mock_preprocess_meeting_important_dates .assert_not_called ()
49775025
49785026 def test_upcoming_json (self ):
49795027 make_meeting_test_data (create_interims = True )
0 commit comments