Skip to content

Commit

Permalink
Use the Django TestCase's Client (#1084)
Browse files Browse the repository at this point in the history
* Use the Django Client test utility instance that Django provides with its TestCase class. This allows GraphQL tests to make use of the stateful client methods like login()

* Add missing test case initializer call

* Don't break backward compability

* Add test for pending deprecation warning on GraphQLTestCase._client

Co-authored-by: Tom Nightingale <tom@tnightingale.com>
  • Loading branch information
ulgens and tnightingale authored Dec 31, 2020
1 parent 8c48516 commit 40e5252
Show file tree
Hide file tree
Showing 3 changed files with 38 additions and 8 deletions.
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()

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):
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

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

0 comments on commit 40e5252

Please sign in to comment.