Skip to content

Commit d959cf5

Browse files
committed
Adding tests for DjangoFilterConnectionField
1 parent 4a087ec commit d959cf5

File tree

3 files changed

+88
-0
lines changed

3 files changed

+88
-0
lines changed
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
import django_filters
2+
3+
from .models import Article, Pet
4+
5+
6+
class ArticleFilter(django_filters.FilterSet):
7+
8+
class Meta:
9+
model = Article
10+
fields = {
11+
'headline': ['exact', 'icontains'],
12+
'pub_date': ['gt', 'lt', 'exact'],
13+
'reporter': ['exact'],
14+
}
15+
order_by = True
16+
17+
18+
class PetFilter(django_filters.FilterSet):
19+
20+
class Meta:
21+
model = Pet
22+
fields = ['name']
23+
order_by = False
24+
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
from graphene import Schema
2+
from graphene.contrib.django import DjangoFilterConnectionField, DjangoNode
3+
from graphene.contrib.django.tests.filters import ArticleFilter, PetFilter
4+
from graphene.contrib.django.tests.models import Article, Pet
5+
6+
schema = Schema()
7+
8+
9+
@schema.register
10+
class ArticleNode(DjangoNode):
11+
12+
class Meta:
13+
model = Article
14+
15+
16+
@schema.register
17+
class PetNode(DjangoNode):
18+
19+
class Meta:
20+
model = Pet
21+
22+
23+
def assert_arguments(field, *arguments):
24+
ignore = ('after', 'before', 'first', 'last', 'o')
25+
actual = [
26+
name
27+
for name in field.arguments.arguments.keys()
28+
if name not in ignore and not name.startswith('_')
29+
]
30+
assert set(arguments) == set(actual), \
31+
'Expected arguments ({}) did not match actual ({])'.format(
32+
arguments,
33+
actual
34+
)
35+
36+
37+
def assert_orderable(field):
38+
assert 'o' in field.arguments.arguments.keys(), \
39+
'Field cannot be ordered'
40+
41+
42+
def assert_not_orderable(field):
43+
assert 'o' in field.arguments.arguments.keys(), \
44+
'Field cannot be ordered'
45+
46+
47+
def test_filter_explicit_filterset_arguments():
48+
field = DjangoFilterConnectionField(ArticleNode, filterset_class=ArticleFilter)
49+
assert_arguments(field,
50+
'headline', 'headlineIcontains',
51+
'pubDate', 'pubDateGt', 'pubDateLt',
52+
'reporter',
53+
)
54+
55+
56+
def test_filter_explicit_filterset_orderable():
57+
field = DjangoFilterConnectionField(ArticleNode, filterset_class=ArticleFilter)
58+
assert_orderable(field)
59+
60+
61+
def test_filter_explicit_filterset_not_orderable():
62+
field = DjangoFilterConnectionField(PetNode, filterset_class=PetFilter)
63+
assert_not_orderable(field)

setup.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ def run_tests(self):
6060
'django_filter>=0.10.0',
6161
],
6262
tests_require=[
63+
'django-filter>=0.11.0',
6364
'pytest>=2.7.2',
6465
'pytest-django',
6566
'mock',

0 commit comments

Comments
 (0)