Skip to content
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

Use the Django TestCase's Client #1084

Merged
merged 4 commits into from
Dec 31, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
2 changes: 2 additions & 0 deletions graphene_django/tests/test_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,9 @@ def runTest(self):
pass

tc = TestClass()
tc._pre_setup()
tc.setUpClass()
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not sure why .setUpClass had to be called manually here but for same reason, ._pre_setup() should be called to. Otherwise, Django's TestCase doesn't populate TestCase.client.


tc.query("query { }", op_name="QueryName")
body = json.loads(post_mock.call_args.args[1])
# `operationName` field from https://graphql.org/learn/serving-over-http/#post-request
Expand Down
20 changes: 12 additions & 8 deletions graphene_django/utils/testing.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import json
import warnings

from django.test import TestCase, Client
from django.test import Client, TestCase

DEFAULT_GRAPHQL_URL = "/graphql/"

Expand Down Expand Up @@ -68,12 +69,6 @@ class GraphQLTestCase(TestCase):
# URL to graphql endpoint
GRAPHQL_URL = DEFAULT_GRAPHQL_URL

@classmethod
def setUpClass(cls):
super(GraphQLTestCase, cls).setUpClass()

cls._client = Client()

def query(self, query, op_name=None, input_data=None, variables=None, headers=None):
"""
Args:
Expand All @@ -99,10 +94,19 @@ def query(self, query, op_name=None, input_data=None, variables=None, headers=No
input_data=input_data,
variables=variables,
headers=headers,
client=self._client,
client=self.client,
graphql_url=self.GRAPHQL_URL,
)

@property
def _client(self):
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Assuming people calling (get attribute) the client with _client in their tests, including myself, i didn't want to break all at once. But i'm not sure how to handle set attribute case, or does it even necessary.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sensible.

warnings.warn(
"Using `_client` is deprecated in favour of `client`.",
PendingDeprecationWarning,
stacklevel=2,
)
return self.client

def assertResponseNoErrors(self, resp, msg=None):
"""
Assert that the call went through correctly. 200 means the syntax is ok, if there are no `errors`,
Expand Down
24 changes: 24 additions & 0 deletions graphene_django/utils/tests/test_testing.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
import pytest
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not the best file name obviously 🙃 I'm open for recommendations.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Best I came up with is test_harness, which I didn't think is any better.


from .. import GraphQLTestCase
from ...tests.test_types import with_local_registry


@with_local_registry
def test_graphql_test_case_deprecated_client():
"""
Test that `GraphQLTestCase._client`'s should raise pending deprecation warning.
"""

class TestClass(GraphQLTestCase):
GRAPHQL_SCHEMA = True

def runTest(self):
pass

tc = TestClass()
tc._pre_setup()
tc.setUpClass()

with pytest.warns(PendingDeprecationWarning):
tc._client