Тесты с DRF ApiClient и бэкендом DummyCache завершаются с ошибкой UpdateError при попытке сохранить сессию
Я тестирую свое представление, которое возвращает данные о предыдущей сессии.
Тест с фабрикой запросов работает хорошо.
def test_session_view(self, rf):
"""Retrieve user token.
path: /auth/session/
request: None
respond: {token: str}
"""
url = reverse('get_session')
view = SessionView.as_view()
user_id = '589d1bac-d935-4160-92ce-b18170f35188'
token: str = 'cl5aml1wh0000bh022o5em2re'
request = rf.get(url)
session_key = None
engine = import_module(settings.SESSION_ENGINE)
request.session = engine.SessionStore(session_key)
request.session.update({
'token': token,
'user_id': user_id,
'tenant_id': None
})
request.session.save()
response = view(request).render()
assert response.status_code == 200
assert UserSessionFetchResponse(**response.data)
Но если я использую DRF ApiClient, тест не проходит с UpdateError:
...django/contrib/sessions/backends/cache.py:62: in save
raise UpdateError
E django.contrib.sessions.backends.base.UpdateError
Это неудачный тест:
def test_retrieve_saved_session(self, api_client):
"""Fetches token from db."""
endpoint = reverse('get_session')
# настройка условий
user_id = '589d1bac-d935-4160-92ce-b18170f35188'
token: str = 'cl5aml1wh0000bh022o5em2re'
tenant_id: str = 'a1bd988a-9c52-4f97-bfac-9478d58cb0c3'
client = api_client()
client = set_api_client_defaults(
client=client,
)
session = client.session
session.update({
'token': token,
'user_id': user_id,
'tenant_id': tenant_id
})
session.save()
response: 'Response' = client.get(
path=endpoint,
)
assert response.status_code == 200
assert response.data['token'] == token
assert UserSessionFetchResponse(**response.data)
"api_client" является приспособлением:
@pytest.fixture()
def api_client() -> Type[APIClient]:
return APIClient
Соответствующие настройки:
SESSION_ENGINE = 'django.contrib.sessions.backends.cache'
SESSION_CACHE_ALIAS = 'default'
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.dummy.DummyCache',
}
}
Ручные тесты и тесты с фабрикой запросов работают отлично. Я делаю что-то не так с ApiClient.
Django - 4.0.6
DRF - 3.13.1.
Pytest - 6.2.5
pytest-django - 4.5.2