From fab9b807382066bbab210ac923f6086f726c091d Mon Sep 17 00:00:00 2001 From: Marcelo Galigniana Date: Thu, 11 Apr 2024 23:11:40 -0300 Subject: [PATCH] Add documentation about how to transform factory request to DRF request --- docs/api-guide/testing.md | 14 ++++++++++++++ tests/test_testing.py | 20 ++++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/docs/api-guide/testing.md b/docs/api-guide/testing.md index 261df80f27..d01b23ce69 100644 --- a/docs/api-guide/testing.md +++ b/docs/api-guide/testing.md @@ -102,6 +102,20 @@ This means that setting attributes directly on the request object may not always request.user = user response = view(request) +In case you want to test the request having a REST famework's `Request` you have to transform it by-hand before: + + class DummyView(APIView): + ... + + factory = APIRequestFactory() + request = factory.get('/', {'demo': 'test'}) + DRF_request = DummyView().initialize_request(request) + assert DRF_request.query_params == {'demo': ['test']} + + request = factory.post('/', {'example': 'test'}) + DRF_request = DummyView().initialize_request(request) + assert DRF_request.data.get('example') == 'test' + --- ## Forcing CSRF validation diff --git a/tests/test_testing.py b/tests/test_testing.py index 196319a29e..f56d189065 100644 --- a/tests/test_testing.py +++ b/tests/test_testing.py @@ -263,6 +263,26 @@ def test_explicitly_enforce_csrf_checks(self): assert response.status_code == 403 assert response.data == expected + def test_transform_factory_django_request_to_drf_request(self): + from rest_framework.views import APIView + + factory = APIRequestFactory() + + class DummyView(APIView): + ... + + request = factory.get('/', {'demo': 'test'}) + DRF_request = DummyView().initialize_request(request) + assert DRF_request.query_params == {'demo': ['test']} + assert not hasattr(DRF_request, 'accepted_media_type') + + DummyView().initial(DRF_request) + assert DRF_request.accepted_media_type == 'application/json' + + request = factory.post('/', {'example': 'test'}) + DRF_request = DummyView().initialize_request(request) + assert DRF_request.data.get('example') == 'test' + def test_invalid_format(self): """ Attempting to use a format that is not configured will raise an