Skip to content

Commit 7bfeb08

Browse files
committed
Adding filter tests
1 parent b9f9391 commit 7bfeb08

File tree

2 files changed

+90
-2
lines changed

2 files changed

+90
-2
lines changed

graphene/contrib/django/tests/filters.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import django_filters
22

3+
from graphene.contrib.django.tests.models import Reporter
34
from .models import Article, Pet
45

56

@@ -15,6 +16,14 @@ class Meta:
1516
order_by = True
1617

1718

19+
class ReporterFilter(django_filters.FilterSet):
20+
21+
class Meta:
22+
model = Reporter
23+
fields = ['first_name', 'last_name', 'email', 'pets']
24+
order_by = False
25+
26+
1827
class PetFilter(django_filters.FilterSet):
1928

2029
class Meta:

graphene/contrib/django/tests/test_resolvers.py

Lines changed: 81 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,24 @@
1+
from django.core.exceptions import ImproperlyConfigured
2+
from py.test import raises
13
from django.db.models import Manager
24
from django.db.models.query import QuerySet
35

46
from graphene.contrib.django import DjangoNode
5-
from graphene.contrib.django.resolvers import SimpleQuerySetConnectionResolver
6-
from graphene.contrib.django.tests.models import Reporter
7+
from graphene.contrib.django.resolvers import SimpleQuerySetConnectionResolver, FilterConnectionResolver
8+
from graphene.contrib.django.tests.filters import ReporterFilter, ArticleFilter
9+
from graphene.contrib.django.tests.models import Reporter, Article
710

811

912
class ReporterNode(DjangoNode):
1013
class Meta:
1114
model = Reporter
1215

1316

17+
class ArticleNode(DjangoNode):
18+
class Meta:
19+
model = Article
20+
21+
1422
def test_simple_resolve():
1523
reporter = Reporter(id=1, first_name='Cookie Monster')
1624
resolver = SimpleQuerySetConnectionResolver(ReporterNode, on='articles')
@@ -51,3 +59,74 @@ def test_simple_order():
5159
assert 'WHERE' not in str(resolved.query)
5260
assert 'ORDER BY' in str(resolved.query)
5361
assert '"last_name" ASC' in str(resolved.query)
62+
63+
64+
def test_filter_get_filterset_class_explicit():
65+
reporter = Reporter(id=1, first_name='Cookie Monster')
66+
resolver = FilterConnectionResolver(ReporterNode,
67+
filterset_class=ReporterFilter)
68+
resolver(inst=reporter, args={}, info=None)
69+
assert resolver.get_filterset_class() == ReporterFilter, \
70+
'ReporterFilter not returned'
71+
72+
73+
def test_filter_get_filterset_class_implicit():
74+
reporter = Reporter(id=1, first_name='Cookie Monster')
75+
resolver = FilterConnectionResolver(ReporterNode)
76+
resolver(inst=reporter, args={}, info=None)
77+
assert resolver.get_filterset_class().__name__ == 'ReporterFilterSet'
78+
79+
80+
def test_filter_get_filterset_class_error():
81+
reporter = Reporter(id=1, first_name='Cookie Monster')
82+
resolver = FilterConnectionResolver(ReporterNode)
83+
resolver.model = None
84+
with raises(ImproperlyConfigured) as excinfo:
85+
resolver(inst=reporter, args={}, info=None)
86+
assert "must define 'filterset_class' or 'model'" in str(excinfo.value)
87+
88+
89+
def test_filter_filter():
90+
reporter = Reporter(id=1, first_name='Cookie Monster')
91+
resolver = FilterConnectionResolver(ReporterNode,
92+
filterset_class=ReporterFilter)
93+
resolved = resolver(inst=reporter, args={
94+
'first_name': 'Elmo'
95+
}, info=None)
96+
assert '"first_name" = Elmo' in str(resolved.query)
97+
assert 'ORDER BY' not in str(resolved.query)
98+
99+
100+
def test_filter_filter_contains():
101+
article = Article(id=1, headline='Cookie Monster eats fruit')
102+
resolver = FilterConnectionResolver(ArticleNode,
103+
filterset_class=ArticleFilter)
104+
resolved = resolver(inst=article, args={
105+
'headline__icontains': 'Elmo'
106+
}, info=None)
107+
assert '"headline" LIKE %Elmo%' in str(resolved.query)
108+
109+
110+
def test_filter_order():
111+
article = Article(id=1, headline='Cookie Monster eats fruit')
112+
resolver = FilterConnectionResolver(ArticleNode,
113+
filterset_class=ArticleFilter)
114+
resolved = resolver(inst=article, args={
115+
# TODO: This should be 'order', not 'o'
116+
'o': 'headline'
117+
}, info=None)
118+
assert 'WHERE' not in str(resolved.query)
119+
assert 'ORDER BY' in str(resolved.query)
120+
assert '"headline" ASC' in str(resolved.query)
121+
122+
123+
def test_filter_order_not_available():
124+
reporter = Reporter(id=1, first_name='Cookie Monster')
125+
resolver = FilterConnectionResolver(ReporterNode,
126+
filterset_class=ReporterFilter)
127+
resolved = resolver(inst=reporter, args={
128+
# TODO: This should be 'order', not 'o'
129+
'o': 'last_name'
130+
}, info=None)
131+
assert 'WHERE' not in str(resolved.query)
132+
assert 'ORDER BY' not in str(resolved.query)

0 commit comments

Comments
 (0)