1313db = create_engine ('sqlite:///test_sqlalchemy.sqlite3' )
1414
1515
16+ def normalize (value ):
17+ """Convert nested ordered dicts ot normal dicts for better comparison."""
18+ if isinstance (value , dict ):
19+ return {k : normalize (v ) for k , v in value .items ()}
20+ elif isinstance (value , list ):
21+ return [normalize (v ) for v in value ]
22+ else :
23+ return value
24+
25+
1626@pytest .yield_fixture (scope = 'function' )
1727def session ():
1828 reset_global_registry ()
@@ -33,23 +43,34 @@ def session():
3343
3444
3545def setup_fixtures (session ):
36- pet = Pet (name = 'Lassie' , pet_kind = 'dog' )
37- session .add (pet )
38- reporter = Reporter (first_name = 'ABA' , last_name = 'X' )
46+ reporter = Reporter (
47+ first_name = 'John' , last_name = 'Doe' , favorite_pet_kind = 'cat' )
3948 session .add (reporter )
40- reporter2 = Reporter (first_name = 'ABO' , last_name = 'Y' )
41- session .add (reporter2 )
49+ pet = Pet (name = 'Garfield' , pet_kind = 'cat' )
50+ session .add (pet )
51+ pet .reporters .append (reporter )
4252 article = Article (headline = 'Hi!' )
4353 article .reporter = reporter
4454 session .add (article )
45- editor = Editor (name = "John" )
55+ reporter = Reporter (
56+ first_name = 'Jane' , last_name = 'Roe' , favorite_pet_kind = 'dog' )
57+ session .add (reporter )
58+ pet = Pet (name = 'Lassie' , pet_kind = 'dog' )
59+ pet .reporters .append (reporter )
60+ session .add (pet )
61+ editor = Editor (name = "Jack" )
4662 session .add (editor )
4763 session .commit ()
4864
4965
5066def test_should_query_well (session ):
5167 setup_fixtures (session )
5268
69+ class PetType (SQLAlchemyObjectType ):
70+
71+ class Meta :
72+ model = Pet
73+
5374 class ReporterType (SQLAlchemyObjectType ):
5475
5576 class Meta :
@@ -58,75 +79,68 @@ class Meta:
5879 class Query (graphene .ObjectType ):
5980 reporter = graphene .Field (ReporterType )
6081 reporters = graphene .List (ReporterType )
82+ pets = graphene .List (PetType , kind = graphene .Argument (
83+ PetType ._meta .fields ['pet_kind' ].type ))
6184
62- def resolve_reporter (self , * args , ** kwargs ):
85+ def resolve_reporter (self , _info ):
6386 return session .query (Reporter ).first ()
6487
65- def resolve_reporters (self , * args , ** kwargs ):
88+ def resolve_reporters (self , _info ):
6689 return session .query (Reporter )
6790
91+ def resolve_pets (self , _info , kind ):
92+ query = session .query (Pet )
93+ if kind :
94+ query = query .filter_by (pet_kind = kind )
95+ return query
96+
6897 query = '''
6998 query ReporterQuery {
7099 reporter {
71100 firstName,
72101 lastName,
73- email
102+ email,
103+ favoritePetKind,
104+ pets {
105+ name
106+ petKind
107+ }
74108 }
75109 reporters {
76110 firstName
77111 }
112+ pets(kind: DOG) {
113+ name
114+ petKind
115+ }
78116 }
79117 '''
80118 expected = {
81119 'reporter' : {
82- 'firstName' : 'ABA' ,
83- 'lastName' : 'X' ,
84- 'email' : None
120+ 'firstName' : 'John' ,
121+ 'lastName' : 'Doe' ,
122+ 'email' : None ,
123+ 'favoritePetKind' : 'CAT' ,
124+ 'pets' : [{
125+ 'name' : 'Garfield' ,
126+ 'petKind' : 'CAT'
127+ }]
85128 },
86129 'reporters' : [{
87- 'firstName' : 'ABA ' ,
130+ 'firstName' : 'John ' ,
88131 }, {
89- 'firstName' : 'ABO' ,
90- }]
91- }
92- schema = graphene .Schema (query = Query )
93- result = schema .execute (query )
94- assert not result .errors
95- assert result .data == expected
96-
97-
98- def test_should_query_enums (session ):
99- setup_fixtures (session )
100-
101- class PetType (SQLAlchemyObjectType ):
102-
103- class Meta :
104- model = Pet
105-
106- class Query (graphene .ObjectType ):
107- pet = graphene .Field (PetType )
108-
109- def resolve_pet (self , * args , ** kwargs ):
110- return session .query (Pet ).first ()
111-
112- query = '''
113- query PetQuery {
114- pet {
115- name,
116- petKind
117- }
118- }
119- '''
120- expected = {
121- 'pet' : {
132+ 'firstName' : 'Jane' ,
133+ }],
134+ 'pets' : [{
122135 'name' : 'Lassie' ,
123- 'petKind' : 'dog '
124- }
136+ 'petKind' : 'DOG '
137+ }]
125138 }
126139 schema = graphene .Schema (query = Query )
127140 result = schema .execute (query )
128141 assert not result .errors
129- assert result .data == expected , result .data
142+ result = normalize (result .data )
143+ assert result == expected
130144
131145
132146def test_should_node (session ):
@@ -158,10 +172,10 @@ class Query(graphene.ObjectType):
158172 article = graphene .Field (ArticleNode )
159173 all_articles = SQLAlchemyConnectionField (ArticleNode )
160174
161- def resolve_reporter (self , * args , ** kwargs ):
175+ def resolve_reporter (self , _info ):
162176 return session .query (Reporter ).first ()
163177
164- def resolve_article (self , * args , ** kwargs ):
178+ def resolve_article (self , _info ):
165179 return session .query (Article ).first ()
166180
167181 query = '''
@@ -200,8 +214,8 @@ def resolve_article(self, *args, **kwargs):
200214 expected = {
201215 'reporter' : {
202216 'id' : 'UmVwb3J0ZXJOb2RlOjE=' ,
203- 'firstName' : 'ABA ' ,
204- 'lastName' : 'X ' ,
217+ 'firstName' : 'John ' ,
218+ 'lastName' : 'Doe ' ,
205219 'email' : None ,
206220 'articles' : {
207221 'edges' : [{
@@ -226,7 +240,8 @@ def resolve_article(self, *args, **kwargs):
226240 schema = graphene .Schema (query = Query )
227241 result = schema .execute (query , context_value = {'session' : session })
228242 assert not result .errors
229- assert result .data == expected
243+ result = normalize (result .data )
244+ assert result == expected
230245
231246
232247def test_should_custom_identifier (session ):
@@ -264,12 +279,12 @@ class Query(graphene.ObjectType):
264279 'edges' : [{
265280 'node' : {
266281 'id' : 'RWRpdG9yTm9kZTox' ,
267- 'name' : 'John '
282+ 'name' : 'Jack '
268283 }
269284 }]
270285 },
271286 'node' : {
272- 'name' : 'John '
287+ 'name' : 'Jack '
273288 }
274289 }
275290
@@ -355,7 +370,7 @@ class Mutation(graphene.ObjectType):
355370 'headline' : 'My Article' ,
356371 'reporter' : {
357372 'id' : 'UmVwb3J0ZXJOb2RlOjE=' ,
358- 'firstName' : 'ABA '
373+ 'firstName' : 'John '
359374 }
360375 }
361376 },
@@ -364,4 +379,6 @@ class Mutation(graphene.ObjectType):
364379 schema = graphene .Schema (query = Query , mutation = Mutation )
365380 result = schema .execute (query , context_value = {'session' : session })
366381 assert not result .errors
367- assert result .data == expected
382+ result = normalize (result .data )
383+ assert result == expected
384+
0 commit comments