Skip to content

Commit b44bae1

Browse files
author
Adam Charnock
committed
Adding test to reproduce bug whereby the FilterConnectionResolver does not correctly traverse relationships
1 parent 5e6f4cf commit b44bae1

File tree

1 file changed

+55
-0
lines changed

1 file changed

+55
-0
lines changed

graphene/contrib/django/filter/tests/test_fields.py

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
1+
from datetime import datetime
2+
13
import pytest
4+
from graphql.core.execution.base import ResolveInfo, ExecutionContext
25

36
from graphene import ObjectType, Schema
47
from graphene.contrib.django import DjangoNode
@@ -7,6 +10,7 @@
710
from graphene.contrib.django.tests.models import Article, Pet, Reporter
811
from graphene.contrib.django.utils import DJANGO_FILTER_INSTALLED
912
from graphene.relay import NodeField
13+
from graphene.utils import ProxySnakeDict
1014

1115
pytestmark = []
1216
if DJANGO_FILTER_INSTALLED:
@@ -160,6 +164,57 @@ class Query(ObjectType):
160164
assert_orderable(articles_field)
161165

162166

167+
def test_filter_filterset_related_results():
168+
class ReporterFilterNode(DjangoNode):
169+
170+
class Meta:
171+
model = Reporter
172+
filter_fields = ['first_name', 'articles']
173+
filter_order_by = True
174+
175+
class ArticleFilterNode(DjangoNode):
176+
177+
class Meta:
178+
model = Article
179+
filter_fields = ['headline', 'reporter']
180+
filter_order_by = True
181+
182+
class Query(ObjectType):
183+
all_reporters = DjangoFilterConnectionField(ReporterFilterNode)
184+
all_articles = DjangoFilterConnectionField(ArticleFilterNode)
185+
reporter = NodeField(ReporterFilterNode)
186+
article = NodeField(ArticleFilterNode)
187+
188+
r1 = Reporter.objects.create(first_name='r1', last_name='r1', email='[email protected]')
189+
r2 = Reporter.objects.create(first_name='r2', last_name='r2', email='[email protected]')
190+
a1 = Article.objects.create(headline='a1', pub_date=datetime.now(), reporter=r1)
191+
a2 = Article.objects.create(headline='a2', pub_date=datetime.now(), reporter=r2)
192+
193+
query = '''
194+
query {
195+
allReporters {
196+
edges {
197+
node {
198+
articles {
199+
edges {
200+
node {
201+
headline
202+
}
203+
}
204+
}
205+
}
206+
}
207+
}
208+
}
209+
'''
210+
schema = Schema(query=Query)
211+
result = schema.execute(query)
212+
assert not result.errors
213+
# We should only get back a single article for each reporter
214+
assert len(result.data['allReporters']['edges'][0]['node']['articles']['edges']) == 1
215+
assert len(result.data['allReporters']['edges'][1]['node']['articles']['edges']) == 1
216+
217+
163218
def test_global_id_field_implicit():
164219
field = DjangoFilterConnectionField(ArticleNode, fields=['id'])
165220
filterset_class = field.resolver_fn.get_filterset_class()

0 commit comments

Comments
 (0)