mirror of
https://github.com/graphql-python/graphene.git
synced 2025-02-08 23:50:38 +03:00
Adding test to reproduce bug whereby the FilterConnectionResolver does not correctly traverse relationships
This commit is contained in:
parent
5e6f4cf302
commit
b44bae115d
|
@ -1,4 +1,7 @@
|
||||||
|
from datetime import datetime
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
from graphql.core.execution.base import ResolveInfo, ExecutionContext
|
||||||
|
|
||||||
from graphene import ObjectType, Schema
|
from graphene import ObjectType, Schema
|
||||||
from graphene.contrib.django import DjangoNode
|
from graphene.contrib.django import DjangoNode
|
||||||
|
@ -7,6 +10,7 @@ from graphene.contrib.django.forms import (GlobalIDFormField,
|
||||||
from graphene.contrib.django.tests.models import Article, Pet, Reporter
|
from graphene.contrib.django.tests.models import Article, Pet, Reporter
|
||||||
from graphene.contrib.django.utils import DJANGO_FILTER_INSTALLED
|
from graphene.contrib.django.utils import DJANGO_FILTER_INSTALLED
|
||||||
from graphene.relay import NodeField
|
from graphene.relay import NodeField
|
||||||
|
from graphene.utils import ProxySnakeDict
|
||||||
|
|
||||||
pytestmark = []
|
pytestmark = []
|
||||||
if DJANGO_FILTER_INSTALLED:
|
if DJANGO_FILTER_INSTALLED:
|
||||||
|
@ -160,6 +164,57 @@ def test_filter_filterset_information_on_meta_related():
|
||||||
assert_orderable(articles_field)
|
assert_orderable(articles_field)
|
||||||
|
|
||||||
|
|
||||||
|
def test_filter_filterset_related_results():
|
||||||
|
class ReporterFilterNode(DjangoNode):
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
model = Reporter
|
||||||
|
filter_fields = ['first_name', 'articles']
|
||||||
|
filter_order_by = True
|
||||||
|
|
||||||
|
class ArticleFilterNode(DjangoNode):
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
model = Article
|
||||||
|
filter_fields = ['headline', 'reporter']
|
||||||
|
filter_order_by = True
|
||||||
|
|
||||||
|
class Query(ObjectType):
|
||||||
|
all_reporters = DjangoFilterConnectionField(ReporterFilterNode)
|
||||||
|
all_articles = DjangoFilterConnectionField(ArticleFilterNode)
|
||||||
|
reporter = NodeField(ReporterFilterNode)
|
||||||
|
article = NodeField(ArticleFilterNode)
|
||||||
|
|
||||||
|
r1 = Reporter.objects.create(first_name='r1', last_name='r1', email='r1@test.com')
|
||||||
|
r2 = Reporter.objects.create(first_name='r2', last_name='r2', email='r2@test.com')
|
||||||
|
a1 = Article.objects.create(headline='a1', pub_date=datetime.now(), reporter=r1)
|
||||||
|
a2 = Article.objects.create(headline='a2', pub_date=datetime.now(), reporter=r2)
|
||||||
|
|
||||||
|
query = '''
|
||||||
|
query {
|
||||||
|
allReporters {
|
||||||
|
edges {
|
||||||
|
node {
|
||||||
|
articles {
|
||||||
|
edges {
|
||||||
|
node {
|
||||||
|
headline
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
'''
|
||||||
|
schema = Schema(query=Query)
|
||||||
|
result = schema.execute(query)
|
||||||
|
assert not result.errors
|
||||||
|
# We should only get back a single article for each reporter
|
||||||
|
assert len(result.data['allReporters']['edges'][0]['node']['articles']['edges']) == 1
|
||||||
|
assert len(result.data['allReporters']['edges'][1]['node']['articles']['edges']) == 1
|
||||||
|
|
||||||
|
|
||||||
def test_global_id_field_implicit():
|
def test_global_id_field_implicit():
|
||||||
field = DjangoFilterConnectionField(ArticleNode, fields=['id'])
|
field = DjangoFilterConnectionField(ArticleNode, fields=['id'])
|
||||||
filterset_class = field.resolver_fn.get_filterset_class()
|
filterset_class = field.resolver_fn.get_filterset_class()
|
||||||
|
|
Loading…
Reference in New Issue
Block a user