From 1f9fe049795b651eba240b64b44410befa6f1d92 Mon Sep 17 00:00:00 2001 From: Jonathan Kim Date: Sun, 4 Aug 2019 09:05:48 +0100 Subject: [PATCH] Add some more tests to check behaviour --- graphene_django/fields.py | 2 + graphene_django/tests/test_fields.py | 81 ++++++++++++++++++++++++++++ 2 files changed, 83 insertions(+) diff --git a/graphene_django/fields.py b/graphene_django/fields.py index c358865..e6daa88 100644 --- a/graphene_django/fields.py +++ b/graphene_django/fields.py @@ -37,6 +37,8 @@ class DjangoListField(Field): def list_resolver(django_object_type, resolver, root, info, **args): queryset = maybe_queryset(resolver(root, info, **args)) if queryset is None: + # Default to Django Model queryset + # N.B. This happens if DjangoListField is used in the top level Query object model = django_object_type._meta.model queryset = maybe_queryset( django_object_type.get_queryset(model.objects, info) diff --git a/graphene_django/tests/test_fields.py b/graphene_django/tests/test_fields.py index 44d735c..f6abf00 100644 --- a/graphene_django/tests/test_fields.py +++ b/graphene_django/tests/test_fields.py @@ -69,6 +69,36 @@ class TestDjangoListField: "reporters": [{"firstName": "Tara"}, {"firstName": "Debra"}] } + def test_override_resolver(self): + class Reporter(DjangoObjectType): + class Meta: + model = ReporterModel + fields = ("first_name",) + + class Query(ObjectType): + reporters = DjangoListField(Reporter) + + def resolve_reporters(_, info): + return ReporterModel.objects.filter(first_name="Tara") + + schema = Schema(query=Query) + + query = """ + query { + reporters { + firstName + } + } + """ + + ReporterModel.objects.create(first_name="Tara", last_name="West") + ReporterModel.objects.create(first_name="Debra", last_name="Payne") + + result = schema.execute(query) + + assert not result.errors + assert result.data == {"reporters": [{"firstName": "Tara"}]} + def test_nested_list_field(self): class Article(DjangoObjectType): class Meta: @@ -116,3 +146,54 @@ class TestDjangoListField: {"firstName": "Debra", "articles": []}, ] } + + def test_override_resolver_nested_list_field(self): + class Article(DjangoObjectType): + class Meta: + model = ArticleModel + fields = ("headline",) + + class Reporter(DjangoObjectType): + class Meta: + model = ReporterModel + fields = ("first_name", "articles") + + def resolve_reporters(reporter, info): + return reporter.articles.all() + + class Query(ObjectType): + reporters = DjangoListField(Reporter) + + schema = Schema(query=Query) + + query = """ + query { + reporters { + firstName + articles { + headline + } + } + } + """ + + r1 = ReporterModel.objects.create(first_name="Tara", last_name="West") + ReporterModel.objects.create(first_name="Debra", last_name="Payne") + + ArticleModel.objects.create( + headline="Amazing news", + reporter=r1, + pub_date=datetime.date.today(), + pub_date_time=datetime.datetime.now(), + editor=r1, + ) + + result = schema.execute(query) + + assert not result.errors + assert result.data == { + "reporters": [ + {"firstName": "Tara", "articles": [{"headline": "Amazing news"}]}, + {"firstName": "Debra", "articles": []}, + ] + }