From 5691838ac65bf7a3d80a66b4ae3b1fafb40b68a2 Mon Sep 17 00:00:00 2001 From: Jordan Cook Date: Sun, 14 Aug 2022 19:02:18 -0500 Subject: Add method to recreate cache keys --- tests/unit/test_base_cache.py | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) (limited to 'tests') diff --git a/tests/unit/test_base_cache.py b/tests/unit/test_base_cache.py index f720cb8..033a673 100644 --- a/tests/unit/test_base_cache.py +++ b/tests/unit/test_base_cache.py @@ -9,9 +9,11 @@ import pytest from requests import Request from requests_cache.backends import BaseCache, SQLiteDict +from requests_cache.cache_keys import create_key from requests_cache.models import CachedRequest, CachedResponse from tests.conftest import ( MOCKED_URL, + MOCKED_URL_ETAG, MOCKED_URL_HTTPS, MOCKED_URL_JSON, MOCKED_URL_REDIRECT, @@ -159,6 +161,44 @@ def test_delete__requests(mock_session): assert not mock_session.cache.contains(request=request) +def test_recreate_keys(mock_session): + # Cache some initial responses with default key function + urls = [MOCKED_URL, MOCKED_URL_JSON, MOCKED_URL_ETAG] + for url in urls: + mock_session.get(url) + old_cache_keys = set(mock_session.cache.responses.keys()) + + # Switch to a new key function and recreate keys + def new_key_fn(*args, **kwargs): + return create_key(*args, **kwargs) + '_suffix' + + # Check that responses are saved with new keys + mock_session.settings.key_fn = new_key_fn + mock_session.cache.recreate_keys() + new_cache_keys = set(mock_session.cache.responses.keys()) + assert len(old_cache_keys) == len(new_cache_keys) == len(urls) + assert old_cache_keys != new_cache_keys + + # Check that responses are returned from the cache correctly using the new key function + for url in urls: + assert mock_session.get(url).from_cache is True + + +def test_recreate_keys__same_key_fn(mock_session): + urls = [MOCKED_URL, MOCKED_URL_JSON, MOCKED_URL_ETAG] + for url in urls: + mock_session.get(url) + old_cache_keys = set(mock_session.cache.responses.keys()) + + mock_session.cache.recreate_keys() + new_cache_keys = set(mock_session.cache.responses.keys()) + assert old_cache_keys == new_cache_keys + + # Check that responses are returned from the cache correctly using the new key function + for url in urls: + assert mock_session.get(url).from_cache is True + + def test_reset_expiration__extend_expiration(mock_session): # Start with an expired response mock_session.settings.expire_after = datetime.utcnow() - timedelta(seconds=0.01) -- cgit v1.2.1