From 23b6419b428a0f1b4bd3a8124e49d899b86800a7 Mon Sep 17 00:00:00 2001 From: Sam Millar Date: Sun, 19 Apr 2020 20:42:00 +0100 Subject: [PATCH 1/3] Disable system checks for graphql_schema management command (#939) --- graphene_django/management/commands/graphql_schema.py | 1 + 1 file changed, 1 insertion(+) diff --git a/graphene_django/management/commands/graphql_schema.py b/graphene_django/management/commands/graphql_schema.py index 751a385..dcef73c 100644 --- a/graphene_django/management/commands/graphql_schema.py +++ b/graphene_django/management/commands/graphql_schema.py @@ -48,6 +48,7 @@ class CommandArguments(BaseCommand): class Command(CommandArguments): help = "Dump Graphene schema as a JSON or GraphQL file" can_import_settings = True + requires_system_checks = False def save_json_file(self, out, schema_dict, indent): with open(out, "w") as outfile: From dc5c97149899a272d95aee98b66e072314cd5a5b Mon Sep 17 00:00:00 2001 From: Noelle Leigh Date: Sun, 19 Apr 2020 16:11:33 -0400 Subject: [PATCH 2/3] Switch `operation_name` to `operationName` in GraphQLTestCase (#936) * Add op_name test * Replace "operation_name" with "operationName" * Improve test comments * Add method for Python 2.7 --- graphene_django/tests/test_utils.py | 32 +++++++++++++++++++++++++++-- graphene_django/utils/testing.py | 6 +++--- 2 files changed, 33 insertions(+), 5 deletions(-) diff --git a/graphene_django/tests/test_utils.py b/graphene_django/tests/test_utils.py index 55cfd4f..c0d376b 100644 --- a/graphene_django/tests/test_utils.py +++ b/graphene_django/tests/test_utils.py @@ -1,6 +1,10 @@ -from django.utils.translation import gettext_lazy +import json -from ..utils import camelize, get_model_fields +import pytest +from django.utils.translation import gettext_lazy +from mock import patch + +from ..utils import camelize, get_model_fields, GraphQLTestCase from .models import Film, Reporter @@ -30,3 +34,27 @@ def test_camelize(): "valueA": "value_b" } assert camelize({0: {"field_a": ["errors"]}}) == {0: {"fieldA": ["errors"]}} + + +@pytest.mark.django_db +@patch("graphene_django.utils.testing.Client.post") +def test_graphql_test_case_op_name(post_mock): + """ + Test that `GraphQLTestCase.query()`'s `op_name` argument produces an `operationName` field. + """ + + class TestClass(GraphQLTestCase): + GRAPHQL_SCHEMA = True + + def runTest(self): + pass + + tc = TestClass() + 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 + assert ( + "operationName", + "QueryName", + ) in body.items(), "Field 'operationName' is not present in the final request." diff --git a/graphene_django/utils/testing.py b/graphene_django/utils/testing.py index 8a9b994..0f68a51 100644 --- a/graphene_django/utils/testing.py +++ b/graphene_django/utils/testing.py @@ -32,20 +32,20 @@ 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. If both ``input_data`` and ``variables``, + 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. headers (dict) - If provided, the headers in POST request to GRAPHQL_URL - will be set to this value. + will be set to this value. Returns: Response object from client """ body = {"query": query} if op_name: - body["operation_name"] = op_name + body["operationName"] = op_name if variables: body["variables"] = variables if input_data: From b9f0e4f9aef32bbc238a880012c86aa0b6b32134 Mon Sep 17 00:00:00 2001 From: Jean-Louis Fuchs Date: Mon, 20 Apr 2020 14:23:20 +0200 Subject: [PATCH 3/3] Make tests order independent (#932) * Reset the global registry after each test (teardown) * Create a settings fixtures that returns graphene_settings and resets the graphene_settings after use (teardown) * Convert test_mutation tests from unittests.TestCase to pytest * Convert test_mutation PetType to a pet_type fixtures that reregisters the type --- graphene_django/conftest.py | 18 + graphene_django/debug/tests/test_query.py | 7 - graphene_django/filter/tests/test_fields.py | 3 - graphene_django/forms/tests/test_mutation.py | 430 +++++++++--------- .../tests/test_multiple_model_serializers.py | 7 +- .../rest_framework/tests/test_mutation.py | 16 +- graphene_django/tests/test_command.py | 2 +- graphene_django/tests/test_converter.py | 15 +- graphene_django/tests/test_fields.py | 1 - graphene_django/tests/test_query.py | 28 +- graphene_django/tests/test_types.py | 16 +- 11 files changed, 259 insertions(+), 284 deletions(-) create mode 100644 graphene_django/conftest.py diff --git a/graphene_django/conftest.py b/graphene_django/conftest.py new file mode 100644 index 0000000..509a84c --- /dev/null +++ b/graphene_django/conftest.py @@ -0,0 +1,18 @@ +import pytest + +from graphene_django.settings import graphene_settings as gsettings + +from .registry import reset_global_registry + + +@pytest.fixture(autouse=True) +def reset_registry_fixture(db): + yield None + reset_global_registry() + + +@pytest.fixture() +def graphene_settings(): + settings = dict(gsettings.__dict__) + yield gsettings + gsettings.__dict__ = settings diff --git a/graphene_django/debug/tests/test_query.py b/graphene_django/debug/tests/test_query.py index db8f275..7226f9b 100644 --- a/graphene_django/debug/tests/test_query.py +++ b/graphene_django/debug/tests/test_query.py @@ -1,5 +1,3 @@ -import pytest - import graphene from graphene.relay import Node from graphene_django import DjangoConnectionField, DjangoObjectType @@ -13,11 +11,6 @@ class context(object): pass -# from examples.starwars_django.models import Character - -pytestmark = pytest.mark.django_db - - def test_should_query_field(): r1 = Reporter(last_name="ABA") r1.save() diff --git a/graphene_django/filter/tests/test_fields.py b/graphene_django/filter/tests/test_fields.py index a0f7d96..166d806 100644 --- a/graphene_django/filter/tests/test_fields.py +++ b/graphene_django/filter/tests/test_fields.py @@ -35,9 +35,6 @@ else: ) ) -pytestmark.append(pytest.mark.django_db) - - if DJANGO_FILTER_INSTALLED: class ArticleNode(DjangoObjectType): diff --git a/graphene_django/forms/tests/test_mutation.py b/graphene_django/forms/tests/test_mutation.py index 093f398..a455a0a 100644 --- a/graphene_django/forms/tests/test_mutation.py +++ b/graphene_django/forms/tests/test_mutation.py @@ -1,16 +1,25 @@ +import pytest from django import forms -from django.test import TestCase from django.core.exceptions import ValidationError from py.test import raises -from graphene import ObjectType, Schema, String, Field +from graphene import Field, ObjectType, Schema, String from graphene_django import DjangoObjectType -from graphene_django.tests.models import Film, Pet +from graphene_django.tests.models import Pet -from ...settings import graphene_settings from ..mutation import DjangoFormMutation, DjangoModelFormMutation +@pytest.fixture() +def pet_type(): + class PetType(DjangoObjectType): + class Meta: + model = Pet + fields = "__all__" + + return PetType + + class MyForm(forms.Form): text = forms.CharField() @@ -36,18 +45,6 @@ class PetForm(forms.ModelForm): return age -class PetType(DjangoObjectType): - class Meta: - model = Pet - fields = "__all__" - - -class FilmType(DjangoObjectType): - class Meta: - model = Film - fields = "__all__" - - def test_needs_form_class(): with raises(Exception) as exc: @@ -73,7 +70,7 @@ def test_has_input_fields(): assert "text" in MyMutation.Input._meta.fields -def test_mutation_error_camelcased(): +def test_mutation_error_camelcased(pet_type, graphene_settings): class ExtraPetForm(PetForm): test_field = forms.CharField(required=True) @@ -86,234 +83,237 @@ def test_mutation_error_camelcased(): graphene_settings.CAMELCASE_ERRORS = True result = PetMutation.mutate_and_get_payload(None, None) assert {f.field for f in result.errors} == {"name", "age", "testField"} - graphene_settings.CAMELCASE_ERRORS = False class MockQuery(ObjectType): a = String() -class FormMutationTests(TestCase): - def test_form_invalid_form(self): - class MyMutation(DjangoFormMutation): - class Meta: - form_class = MyForm +def test_form_invalid_form(): + class MyMutation(DjangoFormMutation): + class Meta: + form_class = MyForm - class Mutation(ObjectType): - my_mutation = MyMutation.Field() + class Mutation(ObjectType): + my_mutation = MyMutation.Field() - schema = Schema(query=MockQuery, mutation=Mutation) + schema = Schema(query=MockQuery, mutation=Mutation) - result = schema.execute( - """ mutation MyMutation { - myMutation(input: { text: "INVALID_INPUT" }) { - errors { - field - messages - } - text + result = schema.execute( + """ mutation MyMutation { + myMutation(input: { text: "INVALID_INPUT" }) { + errors { + field + messages + } + text + } + } + """ + ) + + assert result.errors is None + assert result.data["myMutation"]["errors"] == [ + {"field": "text", "messages": ["Invalid input"]} + ] + + +def test_form_valid_input(): + class MyMutation(DjangoFormMutation): + class Meta: + form_class = MyForm + + class Mutation(ObjectType): + my_mutation = MyMutation.Field() + + schema = Schema(query=MockQuery, mutation=Mutation) + + result = schema.execute( + """ mutation MyMutation { + myMutation(input: { text: "VALID_INPUT" }) { + errors { + field + messages + } + text + } + } + """ + ) + + assert result.errors is None + assert result.data["myMutation"]["errors"] == [] + assert result.data["myMutation"]["text"] == "VALID_INPUT" + + +def test_default_meta_fields(pet_type): + class PetMutation(DjangoModelFormMutation): + class Meta: + form_class = PetForm + + assert PetMutation._meta.model is Pet + assert PetMutation._meta.return_field_name == "pet" + assert "pet" in PetMutation._meta.fields + + +def test_default_input_meta_fields(pet_type): + class PetMutation(DjangoModelFormMutation): + class Meta: + form_class = PetForm + + assert PetMutation._meta.model is Pet + assert PetMutation._meta.return_field_name == "pet" + assert "name" in PetMutation.Input._meta.fields + assert "client_mutation_id" in PetMutation.Input._meta.fields + assert "id" in PetMutation.Input._meta.fields + + +def test_exclude_fields_input_meta_fields(pet_type): + class PetMutation(DjangoModelFormMutation): + class Meta: + form_class = PetForm + exclude_fields = ["id"] + + assert PetMutation._meta.model is Pet + assert PetMutation._meta.return_field_name == "pet" + assert "name" in PetMutation.Input._meta.fields + assert "age" in PetMutation.Input._meta.fields + assert "client_mutation_id" in PetMutation.Input._meta.fields + assert "id" not in PetMutation.Input._meta.fields + + +def test_custom_return_field_name(pet_type): + class PetMutation(DjangoModelFormMutation): + class Meta: + form_class = PetForm + model = Pet + return_field_name = "animal" + + assert PetMutation._meta.model is Pet + assert PetMutation._meta.return_field_name == "animal" + assert "animal" in PetMutation._meta.fields + + +def test_model_form_mutation_mutate_existing(pet_type): + class PetMutation(DjangoModelFormMutation): + pet = Field(pet_type) + + class Meta: + form_class = PetForm + + class Mutation(ObjectType): + pet_mutation = PetMutation.Field() + + schema = Schema(query=MockQuery, mutation=Mutation) + + pet = Pet.objects.create(name="Axel", age=10) + + result = schema.execute( + """ mutation PetMutation($pk: ID!) { + petMutation(input: { id: $pk, name: "Mia", age: 10 }) { + pet { + name + age } } - """ - ) + } + """, + variable_values={"pk": pet.pk}, + ) - self.assertIs(result.errors, None) - self.assertEqual( - result.data["myMutation"]["errors"], - [{"field": "text", "messages": ["Invalid input"]}], - ) + assert result.errors is None + assert result.data["petMutation"]["pet"] == {"name": "Mia", "age": 10} - def test_form_valid_input(self): - class MyMutation(DjangoFormMutation): - class Meta: - form_class = MyForm + assert Pet.objects.count() == 1 + pet.refresh_from_db() + assert pet.name == "Mia" - class Mutation(ObjectType): - my_mutation = MyMutation.Field() - schema = Schema(query=MockQuery, mutation=Mutation) +def test_model_form_mutation_creates_new(pet_type): + class PetMutation(DjangoModelFormMutation): + pet = Field(pet_type) - result = schema.execute( - """ mutation MyMutation { - myMutation(input: { text: "VALID_INPUT" }) { - errors { - field - messages - } - text + class Meta: + form_class = PetForm + + class Mutation(ObjectType): + pet_mutation = PetMutation.Field() + + schema = Schema(query=MockQuery, mutation=Mutation) + + result = schema.execute( + """ mutation PetMutation { + petMutation(input: { name: "Mia", age: 10 }) { + pet { + name + age + } + errors { + field + messages } } - """ - ) + } + """ + ) + assert result.errors is None + assert result.data["petMutation"]["pet"] == {"name": "Mia", "age": 10} - self.assertIs(result.errors, None) - self.assertEqual(result.data["myMutation"]["errors"], []) - self.assertEqual(result.data["myMutation"]["text"], "VALID_INPUT") + assert Pet.objects.count() == 1 + pet = Pet.objects.get() + assert pet.name == "Mia" + assert pet.age == 10 -class ModelFormMutationTests(TestCase): - def test_default_meta_fields(self): - class PetMutation(DjangoModelFormMutation): - class Meta: - form_class = PetForm +def test_model_form_mutation_invalid_input(pet_type): + class PetMutation(DjangoModelFormMutation): + pet = Field(pet_type) - self.assertEqual(PetMutation._meta.model, Pet) - self.assertEqual(PetMutation._meta.return_field_name, "pet") - self.assertIn("pet", PetMutation._meta.fields) + class Meta: + form_class = PetForm - def test_default_input_meta_fields(self): - class PetMutation(DjangoModelFormMutation): - class Meta: - form_class = PetForm + class Mutation(ObjectType): + pet_mutation = PetMutation.Field() - self.assertEqual(PetMutation._meta.model, Pet) - self.assertEqual(PetMutation._meta.return_field_name, "pet") - self.assertIn("name", PetMutation.Input._meta.fields) - self.assertIn("client_mutation_id", PetMutation.Input._meta.fields) - self.assertIn("id", PetMutation.Input._meta.fields) + schema = Schema(query=MockQuery, mutation=Mutation) - def test_exclude_fields_input_meta_fields(self): - class PetMutation(DjangoModelFormMutation): - class Meta: - form_class = PetForm - exclude_fields = ["id"] - - self.assertEqual(PetMutation._meta.model, Pet) - self.assertEqual(PetMutation._meta.return_field_name, "pet") - self.assertIn("name", PetMutation.Input._meta.fields) - self.assertIn("age", PetMutation.Input._meta.fields) - self.assertIn("client_mutation_id", PetMutation.Input._meta.fields) - self.assertNotIn("id", PetMutation.Input._meta.fields) - - def test_custom_return_field_name(self): - class PetMutation(DjangoModelFormMutation): - class Meta: - form_class = PetForm - model = Pet - return_field_name = "animal" - - self.assertEqual(PetMutation._meta.model, Pet) - self.assertEqual(PetMutation._meta.return_field_name, "animal") - self.assertIn("animal", PetMutation._meta.fields) - - def test_model_form_mutation_mutate_existing(self): - class PetMutation(DjangoModelFormMutation): - pet = Field(PetType) - - class Meta: - form_class = PetForm - - class Mutation(ObjectType): - pet_mutation = PetMutation.Field() - - schema = Schema(query=MockQuery, mutation=Mutation) - - pet = Pet.objects.create(name="Axel", age=10) - - result = schema.execute( - """ mutation PetMutation($pk: ID!) { - petMutation(input: { id: $pk, name: "Mia", age: 10 }) { - pet { - name - age - } + result = schema.execute( + """ mutation PetMutation { + petMutation(input: { name: "Mia", age: 99 }) { + pet { + name + age + } + errors { + field + messages } } - """, - variable_values={"pk": pet.pk}, - ) + } + """ + ) + assert result.errors is None + assert result.data["petMutation"]["pet"] is None + assert result.data["petMutation"]["errors"] == [ + {"field": "age", "messages": ["Too old"]} + ] - self.assertIs(result.errors, None) - self.assertEqual(result.data["petMutation"]["pet"], {"name": "Mia", "age": 10}) + assert Pet.objects.count() == 0 - self.assertEqual(Pet.objects.count(), 1) - pet.refresh_from_db() - self.assertEqual(pet.name, "Mia") - def test_model_form_mutation_creates_new(self): - class PetMutation(DjangoModelFormMutation): - pet = Field(PetType) +def test_model_form_mutation_mutate_invalid_form(pet_type): + class PetMutation(DjangoModelFormMutation): + class Meta: + form_class = PetForm - class Meta: - form_class = PetForm + result = PetMutation.mutate_and_get_payload(None, None) - class Mutation(ObjectType): - pet_mutation = PetMutation.Field() + # A pet was not created + Pet.objects.count() == 0 - schema = Schema(query=MockQuery, mutation=Mutation) - - result = schema.execute( - """ mutation PetMutation { - petMutation(input: { name: "Mia", age: 10 }) { - pet { - name - age - } - errors { - field - messages - } - } - } - """ - ) - self.assertIs(result.errors, None) - self.assertEqual(result.data["petMutation"]["pet"], {"name": "Mia", "age": 10}) - - self.assertEqual(Pet.objects.count(), 1) - pet = Pet.objects.get() - self.assertEqual(pet.name, "Mia") - self.assertEqual(pet.age, 10) - - def test_model_form_mutation_invalid_input(self): - class PetMutation(DjangoModelFormMutation): - pet = Field(PetType) - - class Meta: - form_class = PetForm - - class Mutation(ObjectType): - pet_mutation = PetMutation.Field() - - schema = Schema(query=MockQuery, mutation=Mutation) - - result = schema.execute( - """ mutation PetMutation { - petMutation(input: { name: "Mia", age: 99 }) { - pet { - name - age - } - errors { - field - messages - } - } - } - """ - ) - self.assertIs(result.errors, None) - self.assertEqual(result.data["petMutation"]["pet"], None) - self.assertEqual( - result.data["petMutation"]["errors"], - [{"field": "age", "messages": ["Too old"],}], - ) - - self.assertEqual(Pet.objects.count(), 0) - - def test_model_form_mutation_mutate_invalid_form(self): - class PetMutation(DjangoModelFormMutation): - class Meta: - form_class = PetForm - - result = PetMutation.mutate_and_get_payload(None, None) - - # A pet was not created - self.assertEqual(Pet.objects.count(), 0) - - fields_w_error = [e.field for e in result.errors] - self.assertEqual(len(result.errors), 2) - self.assertIn("name", fields_w_error) - self.assertEqual(result.errors[0].messages, ["This field is required."]) - self.assertIn("age", fields_w_error) - self.assertEqual(result.errors[1].messages, ["This field is required."]) + fields_w_error = [e.field for e in result.errors] + assert len(result.errors) == 2 + assert result.errors[0].messages == ["This field is required."] + assert result.errors[1].messages == ["This field is required."] + assert "age" in fields_w_error + assert "name" in fields_w_error diff --git a/graphene_django/rest_framework/tests/test_multiple_model_serializers.py b/graphene_django/rest_framework/tests/test_multiple_model_serializers.py index c1f4626..1676b62 100644 --- a/graphene_django/rest_framework/tests/test_multiple_model_serializers.py +++ b/graphene_django/rest_framework/tests/test_multiple_model_serializers.py @@ -1,14 +1,11 @@ -import graphene -import pytest from django.db import models -from graphene import Schema from rest_framework import serializers +import graphene +from graphene import Schema from graphene_django import DjangoObjectType from graphene_django.rest_framework.mutation import SerializerMutation -pytestmark = pytest.mark.django_db - class MyFakeChildModel(models.Model): name = models.CharField(max_length=50) diff --git a/graphene_django/rest_framework/tests/test_mutation.py b/graphene_django/rest_framework/tests/test_mutation.py index 5bf3bc1..1599fea 100644 --- a/graphene_django/rest_framework/tests/test_mutation.py +++ b/graphene_django/rest_framework/tests/test_mutation.py @@ -1,14 +1,13 @@ import datetime -from py.test import mark, raises +from py.test import raises from rest_framework import serializers from graphene import Field, ResolveInfo from graphene.types.inputobjecttype import InputObjectType -from ...settings import graphene_settings from ...types import DjangoObjectType -from ..models import MyFakeModel, MyFakeModelWithPassword, MyFakeModelWithDate +from ..models import MyFakeModel, MyFakeModelWithDate, MyFakeModelWithPassword from ..mutation import SerializerMutation @@ -99,7 +98,6 @@ def test_exclude_fields(): assert "created" not in MyMutation.Input._meta.fields -@mark.django_db def test_write_only_field(): class WriteOnlyFieldModelSerializer(serializers.ModelSerializer): password = serializers.CharField(write_only=True) @@ -122,7 +120,6 @@ def test_write_only_field(): ), "'password' is write_only field and shouldn't be visible" -@mark.django_db def test_write_only_field_using_extra_kwargs(): class WriteOnlyFieldModelSerializer(serializers.ModelSerializer): class Meta: @@ -144,7 +141,6 @@ def test_write_only_field_using_extra_kwargs(): ), "'password' is write_only field and shouldn't be visible" -@mark.django_db def test_read_only_fields(): class ReadOnlyFieldModelSerializer(serializers.ModelSerializer): cool_name = serializers.CharField(read_only=True) @@ -194,7 +190,6 @@ def test_mutate_and_get_payload_success(): assert result.errors is None -@mark.django_db def test_model_add_mutate_and_get_payload_success(): result = MyModelMutation.mutate_and_get_payload( None, mock_info(), **{"cool_name": "Narf"} @@ -204,7 +199,6 @@ def test_model_add_mutate_and_get_payload_success(): assert isinstance(result.created, datetime.datetime) -@mark.django_db def test_model_update_mutate_and_get_payload_success(): instance = MyFakeModel.objects.create(cool_name="Narf") result = MyModelMutation.mutate_and_get_payload( @@ -214,7 +208,6 @@ def test_model_update_mutate_and_get_payload_success(): assert result.cool_name == "New Narf" -@mark.django_db def test_model_partial_update_mutate_and_get_payload_success(): instance = MyFakeModel.objects.create(cool_name="Narf") result = MyModelMutation.mutate_and_get_payload( @@ -224,7 +217,6 @@ def test_model_partial_update_mutate_and_get_payload_success(): assert result.cool_name == "Narf" -@mark.django_db def test_model_invalid_update_mutate_and_get_payload_success(): class InvalidModelMutation(SerializerMutation): class Meta: @@ -239,7 +231,6 @@ def test_model_invalid_update_mutate_and_get_payload_success(): assert '"id" required' in str(exc.value) -@mark.django_db def test_perform_mutate_success(): class MyMethodMutation(SerializerMutation): class Meta: @@ -272,11 +263,10 @@ def test_model_mutate_and_get_payload_error(): assert len(result.errors) > 0 -def test_mutation_error_camelcased(): +def test_mutation_error_camelcased(graphene_settings): graphene_settings.CAMELCASE_ERRORS = True result = MyModelMutation.mutate_and_get_payload(None, mock_info(), **{}) assert result.errors[0].field == "coolName" - graphene_settings.CAMELCASE_ERRORS = False def test_invalid_serializer_operations(): diff --git a/graphene_django/tests/test_command.py b/graphene_django/tests/test_command.py index 8b0a8e6..297e461 100644 --- a/graphene_django/tests/test_command.py +++ b/graphene_django/tests/test_command.py @@ -8,7 +8,7 @@ from graphene import ObjectType, Schema, String @patch("graphene_django.management.commands.graphql_schema.Command.save_json_file") -def test_generate_json_file_on_call_graphql_schema(savefile_mock, settings): +def test_generate_json_file_on_call_graphql_schema(savefile_mock): out = StringIO() management.call_command("graphql_schema", schema="", stdout=out) assert "Successfully dumped GraphQL schema to schema.json" in out.getvalue() diff --git a/graphene_django/tests/test_converter.py b/graphene_django/tests/test_converter.py index 7f84de3..6227326 100644 --- a/graphene_django/tests/test_converter.py +++ b/graphene_django/tests/test_converter.py @@ -1,16 +1,17 @@ -import pytest from collections import namedtuple + +import pytest from django.db import models from django.utils.translation import ugettext_lazy as _ -from graphene import NonNull from py.test import raises import graphene +from graphene import NonNull from graphene.relay import ConnectionField, Node -from graphene.types.datetime import DateTime, Date, Time +from graphene.types.datetime import Date, DateTime, Time from graphene.types.json import JSONString -from ..compat import JSONField, ArrayField, HStoreField, RangeField, MissingType +from ..compat import ArrayField, HStoreField, JSONField, MissingType, RangeField from ..converter import ( convert_django_field, convert_django_field_with_choices, @@ -18,10 +19,8 @@ from ..converter import ( ) from ..registry import Registry from ..types import DjangoObjectType -from ..settings import graphene_settings from .models import Article, Film, FilmDetails, Reporter - # from graphene.core.types.custom_scalars import DateTime, Time, JSONString @@ -333,7 +332,7 @@ def test_should_postgres_range_convert_list(): assert field.type.of_type.of_type == graphene.Int -def test_generate_enum_name(): +def test_generate_enum_name(graphene_settings): MockDjangoModelMeta = namedtuple("DjangoMeta", ["app_label", "object_name"]) graphene_settings.DJANGO_CHOICE_FIELD_ENUM_V3_NAMING = True @@ -351,5 +350,3 @@ def test_generate_enum_name(): generate_enum_name(model_meta, field) == "SomeLongAppNameSomeObjectFizzBuzzChoices" ) - - graphene_settings.DJANGO_CHOICE_FIELD_ENUM_V3_NAMING = False diff --git a/graphene_django/tests/test_fields.py b/graphene_django/tests/test_fields.py index 8ea1901..67b3a35 100644 --- a/graphene_django/tests/test_fields.py +++ b/graphene_django/tests/test_fields.py @@ -10,7 +10,6 @@ from .models import Article as ArticleModel from .models import Reporter as ReporterModel -@pytest.mark.django_db class TestDjangoListField: def test_only_django_object_types(self): class TestType(ObjectType): diff --git a/graphene_django/tests/test_query.py b/graphene_django/tests/test_query.py index 95db2d1..698ca23 100644 --- a/graphene_django/tests/test_query.py +++ b/graphene_django/tests/test_query.py @@ -1,25 +1,20 @@ -import base64 import datetime import pytest from django.db import models +from django.db.models import Q from django.utils.functional import SimpleLazyObject +from graphql_relay import to_global_id from py.test import raises -from django.db.models import Q - -from graphql_relay import to_global_id import graphene from graphene.relay import Node -from ..utils import DJANGO_FILTER_INSTALLED -from ..compat import MissingType, JSONField +from ..compat import JSONField, MissingType from ..fields import DjangoConnectionField from ..types import DjangoObjectType -from ..settings import graphene_settings -from .models import Article, CNNReporter, Reporter, Film, FilmDetails - -pytestmark = pytest.mark.django_db +from ..utils import DJANGO_FILTER_INSTALLED +from .models import Article, CNNReporter, Film, FilmDetails, Reporter def test_should_query_only_fields(): @@ -147,9 +142,6 @@ def test_should_query_postgres_fields(): def test_should_node(): - # reset_global_registry() - # Node._meta.registry = get_global_registry() - class ReporterNode(DjangoObjectType): class Meta: model = Reporter @@ -588,7 +580,7 @@ def test_should_query_node_multiple_filtering(): assert result.data == expected -def test_should_enforce_first_or_last(): +def test_should_enforce_first_or_last(graphene_settings): graphene_settings.RELAY_CONNECTION_ENFORCE_FIRST_OR_LAST = True class ReporterType(DjangoObjectType): @@ -627,7 +619,7 @@ def test_should_enforce_first_or_last(): assert result.data == expected -def test_should_error_if_first_is_greater_than_max(): +def test_should_error_if_first_is_greater_than_max(graphene_settings): graphene_settings.RELAY_CONNECTION_MAX_LIMIT = 100 class ReporterType(DjangoObjectType): @@ -667,10 +659,8 @@ def test_should_error_if_first_is_greater_than_max(): ) assert result.data == expected - graphene_settings.RELAY_CONNECTION_ENFORCE_FIRST_OR_LAST = False - -def test_should_error_if_last_is_greater_than_max(): +def test_should_error_if_last_is_greater_than_max(graphene_settings): graphene_settings.RELAY_CONNECTION_MAX_LIMIT = 100 class ReporterType(DjangoObjectType): @@ -710,8 +700,6 @@ def test_should_error_if_last_is_greater_than_max(): ) assert result.data == expected - graphene_settings.RELAY_CONNECTION_ENFORCE_FIRST_OR_LAST = False - def test_should_query_promise_connectionfields(): from promise import Promise diff --git a/graphene_django/tests/test_types.py b/graphene_django/tests/test_types.py index 888521f..9b3ceb6 100644 --- a/graphene_django/tests/test_types.py +++ b/graphene_django/tests/test_types.py @@ -9,14 +9,10 @@ from graphene import Connection, Field, Interface, ObjectType, Schema, String from graphene.relay import Node from .. import registry -from ..settings import graphene_settings from ..types import DjangoObjectType, DjangoObjectTypeOptions -from ..converter import convert_choice_field_to_enum from .models import Article as ArticleModel from .models import Reporter as ReporterModel -registry.reset_global_registry() - class Reporter(DjangoObjectType): """Reporter description""" @@ -198,7 +194,6 @@ type RootQuery { def with_local_registry(func): def inner(*args, **kwargs): old = registry.get_global_registry() - registry.reset_global_registry() try: retval = func(*args, **kwargs) except Exception as e: @@ -499,7 +494,9 @@ class TestDjangoObjectType: """ ) - def test_django_objecttype_convert_choices_enum_naming_collisions(self, PetModel): + def test_django_objecttype_convert_choices_enum_naming_collisions( + self, PetModel, graphene_settings + ): graphene_settings.DJANGO_CHOICE_FIELD_ENUM_V3_NAMING = True class PetModelKind(DjangoObjectType): @@ -533,9 +530,10 @@ class TestDjangoObjectType: } """ ) - graphene_settings.DJANGO_CHOICE_FIELD_ENUM_V3_NAMING = False - def test_django_objecttype_choices_custom_enum_name(self, PetModel): + def test_django_objecttype_choices_custom_enum_name( + self, PetModel, graphene_settings + ): graphene_settings.DJANGO_CHOICE_FIELD_ENUM_CUSTOM_NAME = ( "graphene_django.tests.test_types.custom_enum_name" ) @@ -571,5 +569,3 @@ class TestDjangoObjectType: } """ ) - - graphene_settings.DJANGO_CHOICE_FIELD_ENUM_CUSTOM_NAME = None