mirror of
				https://github.com/graphql-python/graphene.git
				synced 2025-10-30 23:47:55 +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