From b26f914b54602a8476654a397cf2b08ebe81aa8f Mon Sep 17 00:00:00 2001 From: Pablo Chinea Date: Thu, 29 Dec 2016 15:40:12 +0000 Subject: [PATCH 1/4] Fixes filtering in nested nodes. --- graphene_django/fields.py | 1 + 1 file changed, 1 insertion(+) diff --git a/graphene_django/fields.py b/graphene_django/fields.py index 74ac4d337..e282ebe75 100644 --- a/graphene_django/fields.py +++ b/graphene_django/fields.py @@ -49,6 +49,7 @@ def connection_resolver(resolver, connection, default_manager, root, args, conte iterable = default_manager iterable = maybe_queryset(iterable) if isinstance(iterable, QuerySet): + iterable &= maybe_queryset(default_manager) _len = iterable.count() else: _len = len(iterable) From dfb55cda6b456f5ee7fd8cee5db642a8e2f73de0 Mon Sep 17 00:00:00 2001 From: Pablo Chinea Date: Fri, 30 Dec 2016 09:34:59 +0000 Subject: [PATCH 2/4] Adds test for nested node filtering. --- graphene_django/tests/test_query.py | 84 +++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) diff --git a/graphene_django/tests/test_query.py b/graphene_django/tests/test_query.py index 9c31243b6..fdf5bb0d4 100644 --- a/graphene_django/tests/test_query.py +++ b/graphene_django/tests/test_query.py @@ -281,3 +281,87 @@ def resolve_all_reporters(self, args, context, info): }] } } + +def test_should_query_node_filtering(): + class ReporterType(DjangoObjectType): + + class Meta: + model = Reporter + interfaces = (Node, ) + + class ArticleType(DjangoObjectType): + + class Meta: + model = Article + interfaces = (Node, ) + filter_fields = ('lang', ) + + class Query(graphene.ObjectType): + all_reporters = DjangoConnectionField(ReporterType) + + r = Reporter.objects.create( + first_name='John', + last_name='Doe', + email='johndoe@example.com', + a_choice=1 + ) + Article.objects.create( + headline='Article Node 1', + pub_date=datetime.date.today(), + reporter=r, + editor=r, + lang='es' + ) + Article.objects.create( + headline='Article Node 2', + pub_date=datetime.date.today(), + reporter=r, + editor=r, + lang='en' + ) + + + schema = graphene.Schema(query=Query) + query = ''' + query NodeFilteringQuery { + allReporters { + edges { + node { + id + articles(lang: "es") { + edges { + node { + id + } + } + } + } + } + } + } + ''' + + expected = { + "allReporters": { + "edges": [ + { + "node": { + "id": "UmVwb3J0ZXJUeXBlOjE=", + "articles": { + "edges": [ + { + "node": { + "id": "QXJ0aWNsZVR5cGU6MQ==" + } + } + ] + } + } + } + ] + } + } + + result = schema.execute(query) + assert not result.errors + assert result.data == expected From b5a450cb6de3d4877a120ea72b713c54811ecef4 Mon Sep 17 00:00:00 2001 From: Pablo Chinea Date: Fri, 30 Dec 2016 09:57:50 +0000 Subject: [PATCH 3/4] Fixes nested node test when django-filter is not installed. --- graphene_django/tests/test_query.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/graphene_django/tests/test_query.py b/graphene_django/tests/test_query.py index fdf5bb0d4..23b8511cd 100644 --- a/graphene_django/tests/test_query.py +++ b/graphene_django/tests/test_query.py @@ -8,6 +8,7 @@ import graphene from graphene.relay import Node +from ..utils import DJANGO_FILTER_INSTALLED from ..compat import MissingType, RangeField from ..fields import DjangoConnectionField from ..types import DjangoObjectType @@ -282,6 +283,9 @@ def resolve_all_reporters(self, args, context, info): } } + +@pytest.mark.skipif(not DJANGO_FILTER_INSTALLED, + reason="django-filter should be installed") def test_should_query_node_filtering(): class ReporterType(DjangoObjectType): @@ -320,7 +324,6 @@ class Query(graphene.ObjectType): lang='en' ) - schema = graphene.Schema(query=Query) query = ''' query NodeFilteringQuery { From 16a0d9ce58b7ae2b16a5faea0e02c2244b324626 Mon Sep 17 00:00:00 2001 From: Pablo Chinea Date: Fri, 30 Dec 2016 12:27:45 +0000 Subject: [PATCH 4/4] Fixes identation in queries test file. --- graphene_django/tests/test_query.py | 34 +++++++++++++---------------- 1 file changed, 15 insertions(+), 19 deletions(-) diff --git a/graphene_django/tests/test_query.py b/graphene_django/tests/test_query.py index 23b8511cd..750a42155 100644 --- a/graphene_django/tests/test_query.py +++ b/graphene_django/tests/test_query.py @@ -345,25 +345,21 @@ class Query(graphene.ObjectType): ''' expected = { - "allReporters": { - "edges": [ - { - "node": { - "id": "UmVwb3J0ZXJUeXBlOjE=", - "articles": { - "edges": [ - { - "node": { - "id": "QXJ0aWNsZVR5cGU6MQ==" - } - } - ] - } - } - } - ] - } - } + 'allReporters': { + 'edges': [{ + 'node': { + 'id': 'UmVwb3J0ZXJUeXBlOjE=', + 'articles': { + 'edges': [{ + 'node': { + 'id': 'QXJ0aWNsZVR5cGU6MQ==' + } + }] + } + } + }] + } + } result = schema.execute(query) assert not result.errors