From 254e59c36fa289ddf86b32b528afeae54dfa1bb1 Mon Sep 17 00:00:00 2001 From: Talley Lambert Date: Sat, 7 Sep 2019 14:49:29 -0400 Subject: [PATCH] Adds variables arg to GraphQLTestCase.query (#699) * add variables arg in GraphQLTestCase.query * update GraphQLTestCase.query docstring and remove type check --- docs/testing.rst | 22 ++++++++++++++++++++++ graphene_django/utils/testing.py | 15 ++++++++++++--- 2 files changed, 34 insertions(+), 3 deletions(-) diff --git a/docs/testing.rst b/docs/testing.rst index b111642..031cf6b 100644 --- a/docs/testing.rst +++ b/docs/testing.rst @@ -37,6 +37,28 @@ Usage: # Add some more asserts if you like ... + def test_query_with_variables(self): + response = self.query( + ''' + query myModel($id: Int!){ + myModel(id: $id) { + id + name + } + } + ''', + op_name='myModel', + variables={'id': 1} + ) + + content = json.loads(response.content) + + # This validates the status code and if you get errors + self.assertResponseNoErrors(response) + + # Add some more asserts if you like + ... + def test_some_mutation(self): response = self.query( ''' diff --git a/graphene_django/utils/testing.py b/graphene_django/utils/testing.py index 0fdac7e..5b694b2 100644 --- a/graphene_django/utils/testing.py +++ b/graphene_django/utils/testing.py @@ -24,7 +24,7 @@ class GraphQLTestCase(TestCase): cls._client = Client() - def query(self, query, op_name=None, input_data=None): + def query(self, query, op_name=None, input_data=None, variables=None): """ Args: query (string) - GraphQL query to run @@ -32,7 +32,11 @@ class GraphQLTestCase(TestCase): supply the op_name. For annon queries ("{ ... }"), should be None (default). input_data (dict) - If provided, the $input variable in GraphQL will be set - to this value + to this value. If both ``input_data`` and ``variables``, + are provided, the ``input`` field in the ``variables`` + dict will be overwritten with this value. + variables (dict) - If provided, the "variables" field in GraphQL will be + set to this value. Returns: Response object from client @@ -40,8 +44,13 @@ class GraphQLTestCase(TestCase): body = {"query": query} if op_name: body["operation_name"] = op_name + if variables: + body["variables"] = variables if input_data: - body["variables"] = {"input": input_data} + if variables in body: + body["variables"]["input"] = input_data + else: + body["variables"] = {"input": input_data} resp = self._client.post( self.GRAPHQL_URL, json.dumps(body), content_type="application/json"