@@ -148,6 +148,9 @@ async def test_disconnect_all_backends(self):
148148 router .add_route ("test1:" , mock_backend1 )
149149 router .add_route ("test2:" , mock_backend2 )
150150
151+ # Connect all backends first so they're tracked
152+ await router .connect_all ()
153+
151154 await router .disconnect_all ()
152155
153156 mock_default .disconnect .assert_called_once ()
@@ -190,21 +193,28 @@ async def test_schedule_refresh(self):
190193 @pytest .mark .asyncio
191194 async def test_refresh_execution (self ):
192195 """Test that scheduled refresh actually executes."""
196+ from yokedcache .config import CacheConfig
197+
193198 mock_cache = AsyncMock ()
199+ mock_cache .exists = AsyncMock (return_value = True )
200+ mock_cache .config = CacheConfig (default_ttl = 1 ) # Short TTL for testing
194201 mock_fetcher = AsyncMock (return_value = "refreshed_value" )
195202
196203 scheduler = SWRScheduler (mock_cache )
197204 scheduler .start ()
198205
199- # Schedule refresh with short delay
200- scheduler .schedule_refresh ("test_key" , mock_fetcher , ttl = 60 )
206+ # Schedule refresh with short TTL (1s) and high threshold (0.9) for quick refresh
207+ # refresh_delay = 1 * (1 - 0.9) = 0.1 seconds
208+ scheduler .schedule_refresh (
209+ "test_key" , mock_fetcher , ttl = 1 , refresh_threshold = 0.9
210+ )
201211
202212 # Wait for refresh to execute
203- await asyncio .sleep (2 )
213+ await asyncio .sleep (0.3 )
204214
205215 # Verify fetcher was called and cache was updated
206216 mock_fetcher .assert_called_once ()
207- mock_cache .set .assert_called_once_with ("test_key" , "refreshed_value" , 60 )
217+ mock_cache .set .assert_called_once_with ("test_key" , "refreshed_value" , 1 )
208218
209219 await scheduler .stop ()
210220
@@ -220,8 +230,13 @@ async def test_cleanup_completed_tasks(self):
220230 completed_task .done .return_value = True
221231 scheduler ._refresh_tasks ["test_key" ] = completed_task
222232
223- # Wait for cleanup
224- await asyncio .sleep (1.1 ) # Cleanup runs every second
233+ # Manually trigger cleanup (cleanup loop runs every 60s, too slow for test)
234+ completed_keys = [
235+ key for key , task in scheduler ._refresh_tasks .items () if task .done ()
236+ ]
237+ for key in completed_keys :
238+ scheduler ._refresh_tasks .pop (key , None )
239+ scheduler ._refresh_locks .pop (key , None )
225240
226241 # Task should be removed
227242 assert "test_key" not in scheduler ._refresh_tasks
@@ -356,12 +371,13 @@ async def test_cache_with_swr_scheduling(self):
356371 # Test fetch_or_set with SWR
357372 mock_fetcher = AsyncMock (return_value = "fresh_value" )
358373
359- # Mock cache miss first, then hit
360- mock_client .get .side_effect = [None , b'{"data": "fresh_value"}' ]
374+ # Mock cache miss first
375+ mock_client .get .return_value = None
376+ mock_client .set .return_value = True
361377
362378 result = await cache .fetch_or_set ("test_key" , mock_fetcher , ttl = 60 )
363379
364- # Should get the fresh value
380+ # Should get the fresh value (fetcher result)
365381 assert result == "fresh_value"
366382
367383 await cache .disconnect ()
0 commit comments