1
1
import pytest
2
2
3
3
import graphene
4
- from graphene .contrib .django import DjangoObjectType
4
+ from graphene .contrib .django import DjangoNode , DjangoConnectionField
5
+ from graphene .contrib .django .filter import DjangoFilterConnectionField
5
6
6
7
from ...tests .models import Reporter
7
8
from ..plugin import DjangoDebugPlugin
8
9
9
10
# from examples.starwars_django.models import Character
10
11
12
+ from django .db .models import Count
13
+
11
14
pytestmark = pytest .mark .django_db
12
15
13
16
14
- def test_should_query_well ():
17
+ def count (qs ):
18
+ query = qs .query
19
+ query .add_annotation (Count ('*' ), alias = '__count' , is_summary = True )
20
+ query .select = []
21
+ query .default_cols = False
22
+ return query
23
+
24
+
25
+ def test_should_query_field ():
15
26
r1 = Reporter (last_name = 'ABA' )
16
27
r1 .save ()
17
28
r2 = Reporter (last_name = 'Griffin' )
18
29
r2 .save ()
19
30
20
- class ReporterType (DjangoObjectType ):
21
-
31
+ class ReporterType (DjangoNode ):
22
32
class Meta :
23
33
model = Reporter
24
34
25
35
class Query (graphene .ObjectType ):
26
36
reporter = graphene .Field (ReporterType )
27
- all_reporters = ReporterType .List ()
28
-
29
- def resolve_all_reporters (self , * args , ** kwargs ):
30
- return Reporter .objects .all ()
31
37
32
38
def resolve_reporter (self , * args , ** kwargs ):
33
39
return Reporter .objects .first ()
@@ -37,9 +43,6 @@ def resolve_reporter(self, *args, **kwargs):
37
43
reporter {
38
44
lastName
39
45
}
40
- allReporters {
41
- lastName
42
- }
43
46
__debug {
44
47
sql {
45
48
rawSql
@@ -51,15 +54,55 @@ def resolve_reporter(self, *args, **kwargs):
51
54
'reporter' : {
52
55
'lastName' : 'ABA' ,
53
56
},
57
+ '__debug' : {
58
+ 'sql' : [{
59
+ 'rawSql' : str (Reporter .objects .order_by ('pk' )[:1 ].query )
60
+ }]
61
+ }
62
+ }
63
+ schema = graphene .Schema (query = Query , plugins = [DjangoDebugPlugin ()])
64
+ result = schema .execute (query )
65
+ assert not result .errors
66
+ assert result .data == expected
67
+
68
+
69
+ def test_should_query_list ():
70
+ r1 = Reporter (last_name = 'ABA' )
71
+ r1 .save ()
72
+ r2 = Reporter (last_name = 'Griffin' )
73
+ r2 .save ()
74
+
75
+ class ReporterType (DjangoNode ):
76
+
77
+ class Meta :
78
+ model = Reporter
79
+
80
+ class Query (graphene .ObjectType ):
81
+ all_reporters = ReporterType .List ()
82
+
83
+ def resolve_all_reporters (self , * args , ** kwargs ):
84
+ return Reporter .objects .all ()
85
+
86
+ query = '''
87
+ query ReporterQuery {
88
+ allReporters {
89
+ lastName
90
+ }
91
+ __debug {
92
+ sql {
93
+ rawSql
94
+ }
95
+ }
96
+ }
97
+ '''
98
+ expected = {
54
99
'allReporters' : [{
55
100
'lastName' : 'ABA' ,
56
101
}, {
57
102
'lastName' : 'Griffin' ,
58
103
}],
59
104
'__debug' : {
60
105
'sql' : [{
61
- 'rawSql' : str (Reporter .objects .order_by ('pk' )[:1 ].query )
62
- }, {
63
106
'rawSql' : str (Reporter .objects .all ().query )
64
107
}]
65
108
}
@@ -68,3 +111,122 @@ def resolve_reporter(self, *args, **kwargs):
68
111
result = schema .execute (query )
69
112
assert not result .errors
70
113
assert result .data == expected
114
+
115
+
116
+ def test_should_query_connection ():
117
+ r1 = Reporter (last_name = 'ABA' )
118
+ r1 .save ()
119
+ r2 = Reporter (last_name = 'Griffin' )
120
+ r2 .save ()
121
+
122
+ class ReporterType (DjangoNode ):
123
+
124
+ class Meta :
125
+ model = Reporter
126
+
127
+ class Query (graphene .ObjectType ):
128
+ all_reporters_connection = DjangoConnectionField (ReporterType )
129
+
130
+ def resolve_all_reporters_connection (self , * args , ** kwargs ):
131
+ return Reporter .objects .all ()
132
+
133
+ query = '''
134
+ query ReporterQuery {
135
+ allReportersConnection(first:1) {
136
+ edges {
137
+ node {
138
+ lastName
139
+ }
140
+ }
141
+ }
142
+ __debug {
143
+ sql {
144
+ rawSql
145
+ }
146
+ }
147
+ }
148
+ '''
149
+ expected = {
150
+ 'allReportersConnection' : {
151
+ 'edges' : [{
152
+ 'node' : {
153
+ 'lastName' : 'ABA' ,
154
+ }
155
+ }]
156
+ },
157
+ '__debug' : {
158
+ 'sql' : [{
159
+ 'rawSql' : str (count (Reporter .objects .all ()))
160
+ }, {
161
+ 'rawSql' : str (Reporter .objects .all ()[:1 ].query )
162
+ }]
163
+ }
164
+ }
165
+ schema = graphene .Schema (query = Query , plugins = [DjangoDebugPlugin ()])
166
+ result = schema .execute (query )
167
+ assert not result .errors
168
+ assert result .data == expected
169
+
170
+
171
+ def test_should_query_connectionfilter ():
172
+ r1 = Reporter (last_name = 'ABA' )
173
+ r1 .save ()
174
+ r2 = Reporter (last_name = 'Griffin' )
175
+ r2 .save ()
176
+
177
+ class ReporterType (DjangoNode ):
178
+
179
+ class Meta :
180
+ model = Reporter
181
+
182
+ class Query (graphene .ObjectType ):
183
+ all_reporters_connection_filter = DjangoFilterConnectionField (ReporterType )
184
+
185
+ def resolve_all_reporters_connection_filter (self , * args , ** kwargs ):
186
+ return Reporter .objects .all ()
187
+
188
+ def resolve_all_reporters_connection (self , * args , ** kwargs ):
189
+ return Reporter .objects .all ()
190
+
191
+ def resolve_all_reporters (self , * args , ** kwargs ):
192
+ return Reporter .objects .all ()
193
+
194
+ def resolve_reporter (self , * args , ** kwargs ):
195
+ return Reporter .objects .first ()
196
+
197
+ query = '''
198
+ query ReporterQuery {
199
+ allReportersConnectionFilter(first:1) {
200
+ edges {
201
+ node {
202
+ lastName
203
+ }
204
+ }
205
+ }
206
+ __debug {
207
+ sql {
208
+ rawSql
209
+ }
210
+ }
211
+ }
212
+ '''
213
+ expected = {
214
+ 'allReportersConnectionFilter' : {
215
+ 'edges' : [{
216
+ 'node' : {
217
+ 'lastName' : 'ABA' ,
218
+ }
219
+ }]
220
+ },
221
+ '__debug' : {
222
+ 'sql' : [{
223
+ 'rawSql' : str (count (Reporter .objects .all ()))
224
+ }, {
225
+ 'rawSql' : str (Reporter .objects .all ()[:1 ].query )
226
+ }]
227
+ }
228
+ }
229
+ schema = graphene .Schema (query = Query , plugins = [DjangoDebugPlugin ()])
230
+ result = schema .execute (query )
231
+ assert not result .errors
232
+ assert result .data == expected
0 commit comments