@@ -595,6 +595,63 @@ def test_filter_by_wealth_characteristic(self):
595595 self .assertEqual (response .status_code , 200 )
596596 self .assertEqual (len (response .json ()), 1 )
597597
598+ def test_as_of_date_filter_returns_valid_baselines (self ):
599+ # Test that the as_of_date filter returns valid baselines as of the specified date.
600+ today = datetime .date .today ()
601+ expired_baseline = LivelihoodZoneBaselineFactory (
602+ valid_from_date = today - datetime .timedelta (days = 365 ),
603+ valid_to_date = today - datetime .timedelta (days = 30 ),
604+ )
605+ current_baseline = LivelihoodZoneBaselineFactory (
606+ valid_from_date = today - datetime .timedelta (days = 30 ),
607+ valid_to_date = today + datetime .timedelta (days = 365 ),
608+ )
609+ # Test default behavior (as of today) - should exclude expired_baseline
610+ response = self .client .get (self .url )
611+ self .assertEqual (response .status_code , 200 )
612+ baseline_ids = [b ["id" ] for b in response .json ()]
613+ self .assertIn (current_baseline .id , baseline_ids )
614+ self .assertNotIn (expired_baseline .id , baseline_ids )
615+
616+ # Test with a past date before the expired_baseline's valid_to_date
617+ past_date = today - datetime .timedelta (days = 180 )
618+ response = self .client .get (self .url , {"as_of_date" : past_date .isoformat ()})
619+ self .assertEqual (response .status_code , 200 )
620+ baseline_ids = [b ["id" ] for b in response .json ()]
621+ self .assertIn (expired_baseline .id , baseline_ids )
622+ self .assertIn (current_baseline .id , baseline_ids )
623+
624+ # Test with a future date - expired_baseline should still be excluded
625+ future_date = today + datetime .timedelta (days = 60 )
626+ response = self .client .get (self .url , {"as_of_date" : future_date .isoformat ()})
627+ self .assertEqual (response .status_code , 200 )
628+ baseline_ids = [b ["id" ] for b in response .json ()]
629+ self .assertNotIn (expired_baseline .id , baseline_ids )
630+ self .assertIn (current_baseline .id , baseline_ids )
631+
632+ # test as of date filter handles null dates
633+ baseline_no_from = LivelihoodZoneBaselineFactory (
634+ valid_from_date = None ,
635+ valid_to_date = today + datetime .timedelta (days = 365 ),
636+ )
637+ # Create a baseline with null valid_to_date (valid indefinitely)
638+ baseline_no_to = LivelihoodZoneBaselineFactory (
639+ valid_from_date = today - datetime .timedelta (days = 365 ),
640+ valid_to_date = None ,
641+ )
642+ # Create a baseline with both dates null (always valid)
643+ baseline_no_dates = LivelihoodZoneBaselineFactory (
644+ valid_from_date = None ,
645+ valid_to_date = None ,
646+ )
647+ # Test default behavior - all three should be returned
648+ response = self .client .get (self .url )
649+ self .assertEqual (response .status_code , 200 )
650+ baseline_ids = [b ["id" ] for b in response .json ()]
651+ self .assertIn (baseline_no_from .id , baseline_ids )
652+ self .assertIn (baseline_no_to .id , baseline_ids )
653+ self .assertIn (baseline_no_dates .id , baseline_ids )
654+
598655
599656class LivelihoodZoneBaselineFacetedSearchViewTestCase (APITestCase ):
600657 def setUp (self ):
@@ -641,7 +698,8 @@ def test_search_with_product(self):
641698 # Apply the filters to the baseline
642699 baseline_url = reverse ("livelihoodzonebaseline-list" )
643700 response = self .client .get (
644- baseline_url , {search_data ["products" ][0 ]["filter" ]: search_data ["products" ][0 ]["value" ]}
701+ baseline_url ,
702+ {search_data ["products" ][0 ]["filter" ]: search_data ["products" ][0 ]["value" ]},
645703 )
646704 self .assertEqual (response .status_code , 200 )
647705 self .assertEqual (len (json .loads (response .content )), 2 )
@@ -650,7 +708,10 @@ def test_search_with_product(self):
650708 self .assertTrue (any (d ["name" ] == self .baseline3 .name for d in data ))
651709 self .assertFalse (any (d ["name" ] == self .baseline2 .name for d in data ))
652710
653- response = self .client .get (baseline_url , {search_data ["items" ][0 ]["filter" ]: search_data ["items" ][0 ]["value" ]})
711+ response = self .client .get (
712+ baseline_url ,
713+ {search_data ["items" ][0 ]["filter" ]: search_data ["items" ][0 ]["value" ]},
714+ )
654715 self .assertEqual (response .status_code , 200 )
655716 self .assertEqual (len (json .loads (response .content )), 1 )
656717 data = json .loads (response .content )
0 commit comments