@@ -385,3 +385,63 @@ def test_get_refresh_params():
385385 assert session .get_refresh_params ('test' ) == {'refresh' : True , 'v' : 2 }
386386 sleep (2 )
387387 assert session .get_refresh_params ('test' ) == {'refresh' : True }
388+
389+
390+ def test_session_close ():
391+ from unittest .mock import MagicMock , patch
392+
393+ from requests_cache import CacheMixin
394+
395+ session = ClientSession ()
396+ mock_bucket_1 = MagicMock ()
397+ mock_bucket_2 = MagicMock ()
398+
399+ # Patch CacheMixin.close to stop the super() chain and isolate ClientSession.close() logic
400+ with (
401+ patch .object (CacheMixin , 'close' ),
402+ patch .object (session .cache , 'close' ) as mock_cache_close ,
403+ patch .object (session .limiter , 'close' ) as mock_limiter_close ,
404+ patch .object (
405+ session .limiter .bucket_factory ,
406+ 'get_buckets' ,
407+ return_value = [mock_bucket_1 , mock_bucket_2 ],
408+ ),
409+ ):
410+ session .close ()
411+
412+ mock_cache_close .assert_called_once ()
413+ mock_limiter_close .assert_called_once ()
414+ mock_bucket_1 .close .assert_called_once ()
415+ mock_bucket_2 .close .assert_called_once ()
416+
417+
418+ def test_session_close__no_buckets ():
419+ from unittest .mock import patch
420+
421+ from requests_cache import CacheMixin
422+
423+ session = ClientSession ()
424+ # Patch CacheMixin.close to stop the super() chain; patch get_buckets() to return None
425+ with (
426+ patch .object (CacheMixin , 'close' ),
427+ patch .object (session .limiter .bucket_factory , 'get_buckets' , return_value = None ),
428+ patch .object (session .limiter , 'close' ),
429+ ):
430+ session .close () # should not raise
431+
432+
433+ def test_session_del__suppresses_exceptions ():
434+ from unittest .mock import patch
435+
436+ session = ClientSession ()
437+ with patch .object (session , 'close' , side_effect = Exception ('boom' )):
438+ session .__del__ () # should not raise
439+
440+
441+ def test_session_del__calls_close ():
442+ from unittest .mock import MagicMock , patch
443+
444+ session = ClientSession ()
445+ with patch .object (session , 'close' , MagicMock ()) as mock_close :
446+ session .__del__ ()
447+ mock_close .assert_called_once ()
0 commit comments