-
-
Notifications
You must be signed in to change notification settings - Fork 7k
Add documentation about how to transform factory request to DRF request #9380
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add documentation about how to transform factory request to DRF request #9380
Conversation
Hi @carltongibson! Is something like that the documentation you had in mind? |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hi @mgaligniana, it's similar!
I think people do this when they're testing individual view methods, without going via dispatch.
So, I'd be inclined to say, and show, that. I.e. what you have plus initial()
and calling a (fictional) view method, which would be the point of the test.
Make sense?
But, yes, great.
This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions. |
docs/api-guide/testing.md
Outdated
@@ -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: |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think we can rewrite the text
This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions. |
I think this is still relevant and shouldn't be marked as stale. |
Hi ulgens! Yes, auvipy fixed the text I added but let me know if there is other change required! |
@mgaligniana No change requests & recommendations on my end. I just saw the notification from the stale bot and thought that this is better merged than lost. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for the clarifications
docs/api-guide/testing.md
Outdated
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' |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It seems to work by using the APIView
directly, let's not get distracted with a subclass, shall we? Also, let's try to follow pep8 (lowercase snake case for variables):
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' | |
factory = APIRequestFactory() | |
django_request = factory.get('/', {'demo': 'test'}) | |
request = APIView().initialize_request(django_request) | |
assert request.query_params == {'demo': ['test']} | |
django_request = factory.post('/', {'example': 'test'}) | |
request = APIView().initialize_request(django_request) | |
assert request.data.get('example') == 'test' |
Same simplification for the test
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thank you @browniebroke! I've applied the new variable name.
As we use to extend from APIView I wanted to do a "real world example" for that was the DummyView. I've added a comment to mean that, but if the team is not agree I can delete it for sure!
7f0f475
to
09399e9
Compare
@@ -294,6 +295,28 @@ 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): | |||
""" | |||
ref: GH-3608, GH-4440 & GH-6488. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I've added references here. Not sure if we should add them to the new section of the documentation?
Ready for review! Thanks for all yours comments and the pacience team! |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM! 👍🏻
09399e9
to
3b6e995
Compare
Description
Hi there!
As there were many issues opened around this topic: "
APIRequestFactory
does not return aRequest
object" I think it would be worth to have a place in the documentation where explains it.Following the Tom's comment in the last issue #6488 (comment):
*Past issues related: #4440 and #3608
This is what my proposal looks like:
I've also added a test to follow the Carlton's comment #6488 (comment)
Thank you!