@@ -74,3 +74,37 @@ def test_get_campaign_configs_uses_cache_within_ttl(
7474 assert second [0 ].version == 1
7575 assert mock_s3_client .list_objects .call_count == 1
7676 assert mock_s3_client .get_object .call_count == 1
77+
78+ def test_get_campaign_configs_refreshes_after_ttl_expiry (
79+ self ,
80+ repo ,
81+ mock_s3_client ,
82+ monkeypatch ,
83+ ):
84+ repo ._cache_ttl_seconds = 60
85+
86+ first_config = CampaignConfigFactory .build (version = 1 )
87+ second_config = CampaignConfigFactory .build (version = 2 )
88+
89+ mock_s3_client .list_objects .return_value = {
90+ "Contents" : [{"Key" : "rsv.json" }]
91+ }
92+ mock_s3_client .get_object .side_effect = [
93+ make_s3_body ({"campaign_config" : first_config .model_dump (mode = "json" )}),
94+ make_s3_body ({"campaign_config" : second_config .model_dump (mode = "json" )}),
95+ ]
96+
97+ current_time = {"value" : 1000.0 }
98+ monkeypatch .setattr ("time.time" , lambda : current_time ["value" ])
99+
100+ first = list (repo .get_campaign_configs ())
101+ current_time ["value" ] = 1030.0
102+ second = list (repo .get_campaign_configs ())
103+ current_time ["value" ] = 1061.0
104+ third = list (repo .get_campaign_configs ())
105+
106+ assert first [0 ].version == 1
107+ assert second [0 ].version == 1
108+ assert third [0 ].version == 2
109+ assert mock_s3_client .list_objects .call_count == 2
110+ assert mock_s3_client .get_object .call_count == 2
0 commit comments