Тесты с 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
Вернуться на верх