@@ -482,3 +482,99 @@ def test_get_last_updated_versions(self):
482482 self .assertEqual (
483483 result , [latest_edge ["channel" ], latest_stable ["channel" ]]
484484 )
485+
486+ def test_is_snap_old_empty_date (self ):
487+ """Test that empty or None date returns not old"""
488+ result = logic .is_snap_old (None )
489+ self .assertFalse (result ["is_old" ])
490+ self .assertEqual (result ["years_since_update" ], 0 )
491+
492+ result = logic .is_snap_old ("" )
493+ self .assertFalse (result ["is_old" ])
494+ self .assertEqual (result ["years_since_update" ], 0 )
495+
496+ def test_is_snap_old_invalid_date (self ):
497+ """Test that invalid date returns not old"""
498+ result = logic .is_snap_old ("invalid-date" )
499+ self .assertFalse (result ["is_old" ])
500+ self .assertEqual (result ["years_since_update" ], 0 )
501+
502+ @freeze_time ("2024-01-01" )
503+ def test_is_snap_old_recent_snap (self ):
504+ """Test that a recently updated snap is not considered old"""
505+ recent_date = "2023-06-01T10:00:00Z"
506+ result = logic .is_snap_old (recent_date )
507+ self .assertFalse (result ["is_old" ])
508+ self .assertEqual (result ["years_since_update" ], 0 )
509+ self .assertIn ("last_updated_formatted" , result )
510+
511+ @freeze_time ("2024-01-02" )
512+ def test_is_snap_old_exactly_two_years (self ):
513+ """Test that a snap updated over 2 years ago is considered old"""
514+ old_date = "2021-12-01T10:00:00Z" # Over 2 years ago
515+ result = logic .is_snap_old (old_date )
516+ self .assertTrue (result ["is_old" ])
517+ self .assertEqual (result ["years_since_update" ], 2 )
518+ self .assertIn ("last_updated_formatted" , result )
519+
520+ @freeze_time ("2024-01-02" )
521+ def test_is_snap_old_very_old_snap (self ):
522+ """Test that a very old snap is considered old"""
523+ very_old_date = "2020-01-01T10:00:00Z"
524+ result = logic .is_snap_old (very_old_date )
525+ self .assertTrue (result ["is_old" ])
526+ self .assertEqual (result ["years_since_update" ], 4 )
527+ self .assertIn ("last_updated_formatted" , result )
528+
529+ @freeze_time ("2024-01-01" )
530+ def test_is_snap_old_just_under_two_years (self ):
531+ """Test that a snap updated just under 2 years ago is not old"""
532+ almost_old_date = "2022-02-01T10:00:00Z"
533+ result = logic .is_snap_old (almost_old_date )
534+ self .assertFalse (result ["is_old" ])
535+ self .assertEqual (result ["years_since_update" ], 1 )
536+ self .assertIn ("last_updated_formatted" , result )
537+
538+ @freeze_time ("2024-01-02" )
539+ def test_is_snap_old_custom_threshold (self ):
540+ """Test that custom threshold works correctly"""
541+ date_one_year_ago = "2022-12-01T10:00:00Z" # Over 1 year ago
542+
543+ # With default threshold (2 years), should not be old
544+ result = logic .is_snap_old (date_one_year_ago )
545+ self .assertFalse (result ["is_old" ])
546+
547+ # With custom threshold (1 year), should be old
548+ result = logic .is_snap_old (date_one_year_ago , old_threshold_years = 1 )
549+ self .assertTrue (result ["is_old" ])
550+ self .assertEqual (result ["years_since_update" ], 1 )
551+
552+ def test_is_snap_old_different_date_formats (self ):
553+ """Test that different ISO date formats are handled correctly"""
554+ # Test with different timezone formats
555+ dates_to_test = [
556+ "2020-01-01T10:00:00Z" ,
557+ "2020-01-01T10:00:00+00:00" ,
558+ "2020-01-01T10:00:00.000Z" ,
559+ "2020-01-01T10:00:00.123456+00:00" ,
560+ ]
561+
562+ for date_str in dates_to_test :
563+ with freeze_time ("2024-01-02" ):
564+ result = logic .is_snap_old (date_str )
565+ self .assertTrue (
566+ result ["is_old" ], f"Failed for date format: { date_str } "
567+ )
568+ self .assertEqual (result ["years_since_update" ], 4 )
569+
570+ def test_convert_date_month_year (self ):
571+ """Test the month-year date formatting function"""
572+ test_cases = [
573+ ("2022-01-14T10:00:00Z" , "January 2022" ),
574+ ("2020-12-25T15:30:00Z" , "December 2020" ),
575+ ("2019-06-01T00:00:00Z" , "June 2019" ),
576+ ]
577+
578+ for date_str , expected in test_cases :
579+ result = logic .convert_date_month_year (date_str )
580+ self .assertEqual (result , expected , f"Failed for date: { date_str } " )
0 commit comments