summaryrefslogtreecommitdiff
path: root/tests/unit
diff options
context:
space:
mode:
authorJordan Cook <jordan.cook@pioneer.com>2022-05-03 15:11:54 -0500
committerJordan Cook <jordan.cook@pioneer.com>2022-05-03 19:58:28 -0500
commit375e611e50b7d2780e8d7007455b48453c9ba4b3 (patch)
treed05ca25bfd5a633170812ecd5282b7a0f690cd27 /tests/unit
parent7f4c20525770d463c5526fa601e8e3b5472cf2e6 (diff)
downloadrequests-cache-375e611e50b7d2780e8d7007455b48453c9ba4b3.tar.gz
Add 'older_than' argument to remove_expired_responses()
Diffstat (limited to 'tests/unit')
-rw-r--r--tests/unit/test_session.py35
1 files changed, 34 insertions, 1 deletions
diff --git a/tests/unit/test_session.py b/tests/unit/test_session.py
index 6e37ded..7d22631 100644
--- a/tests/unit/test_session.py
+++ b/tests/unit/test_session.py
@@ -18,6 +18,7 @@ from requests_cache import ALL_METHODS, CachedSession
from requests_cache._utils import get_placeholder_class
from requests_cache.backends import BACKEND_CLASSES, BaseCache, SQLiteDict
from requests_cache.backends.base import DESERIALIZE_ERRORS
+from requests_cache.models import CachedRequest, CachedResponse
from requests_cache.policy.expiration import DO_NOT_CACHE, EXPIRE_IMMEDIATELY, NEVER_EXPIRE
from tests.conftest import (
MOCKED_URL,
@@ -646,10 +647,12 @@ def test_remove_expired_responses__error(mock_session):
def error_on_key(key):
if key == response_2.cache_key:
raise PickleError
- return response_1
+ return CachedResponse.from_response(response_1)
+ # Test the generic BaseCache implementation, not the SQLite-specific one
with patch.object(SQLiteDict, '__getitem__', side_effect=error_on_key):
BaseCache.remove_expired_responses(mock_session.cache)
+
assert len(mock_session.cache.responses) == 1
assert mock_session.get(MOCKED_URL).from_cache is True
assert mock_session.get(MOCKED_URL_JSON).from_cache is False
@@ -706,6 +709,36 @@ def test_remove_expired_responses__per_request(mock_session):
assert len(mock_session.cache.responses) == 1
+# @patch_normalize_url
+def test_remove_expired_responses__older_than(mock_session):
+ # Cache 4 responses with different creation times
+ response_0 = CachedResponse(request=CachedRequest(method='GET', url='https://test.com/test_0'))
+ mock_session.cache.save_response(response_0)
+ response_1 = CachedResponse(request=CachedRequest(method='GET', url='https://test.com/test_1'))
+ response_1.created_at -= timedelta(seconds=1)
+ mock_session.cache.save_response(response_1)
+ response_2 = CachedResponse(request=CachedRequest(method='GET', url='https://test.com/test_2'))
+ response_2.created_at -= timedelta(seconds=2)
+ mock_session.cache.save_response(response_2)
+ response_3 = CachedResponse(request=CachedRequest(method='GET', url='https://test.com/test_3'))
+ response_3.created_at -= timedelta(seconds=3)
+ mock_session.cache.save_response(response_3)
+
+ # Incrementally remove responses older than 3, 2, and 1 seconds
+ assert len(mock_session.cache.responses) == 4
+ mock_session.remove_expired_responses(older_than=timedelta(seconds=3))
+ assert len(mock_session.cache.responses) == 3
+ mock_session.remove_expired_responses(older_than=timedelta(seconds=2))
+ assert len(mock_session.cache.responses) == 2
+ mock_session.remove_expired_responses(older_than=timedelta(seconds=1))
+ assert len(mock_session.cache.responses) == 1
+
+ # Remove the last response after it's 1 second old
+ time.sleep(1)
+ mock_session.remove_expired_responses(older_than=timedelta(seconds=1))
+ assert len(mock_session.cache.responses) == 0
+
+
# Additional request() and send() options
# -----------------------------------------------------