@@ -62,6 +62,7 @@ def resolve_pet_type(value, info):
62
62
if isinstance (value , Cat ):
63
63
return CatType
64
64
65
+
65
66
PetType = GraphQLUnionType ('Pet' , [DogType , CatType ],
66
67
resolve_type = resolve_pet_type )
67
68
@@ -83,11 +84,53 @@ def resolve_pet_type(value, info):
83
84
liz = Person ('Liz' , [], [])
84
85
john = Person ('John' , [garfield , odie ], [liz , odie ])
85
86
87
+
86
88
# Execute: Union and intersection types
87
89
88
- def test_can_introspect_on_union_and_intersetion_types ():
89
- # TODO
90
- pass
90
+ def test_can_introspect_on_union_and_intersection_types ():
91
+ ast = parse ('''
92
+ {
93
+ Named: __type(name: "Named") {
94
+ kind
95
+ name
96
+ fields { name }
97
+ interfaces { name }
98
+ possibleTypes { name }
99
+ enumValues { name }
100
+ inputFields { name }
101
+ }
102
+ Pet: __type(name: "Pet") {
103
+ kind
104
+ name
105
+ fields { name }
106
+ interfaces { name }
107
+ possibleTypes { name }
108
+ enumValues { name }
109
+ inputFields { name }
110
+ }
111
+ }''' )
112
+
113
+ result = execute (schema , None , ast )
114
+ assert result .data == {
115
+ 'Named' : {
116
+ 'enumValues' : None ,
117
+ 'name' : 'Named' ,
118
+ 'kind' : 'INTERFACE' ,
119
+ 'interfaces' : None ,
120
+ 'fields' : [{'name' : 'name' }],
121
+ 'possibleTypes' : [{'name' : 'Dog' }, {'name' : 'Cat' }, {'name' : 'Person' }],
122
+ 'inputFields' : None
123
+ },
124
+ 'Pet' : {
125
+ 'enumValues' : None ,
126
+ 'name' : 'Pet' ,
127
+ 'kind' : 'UNION' ,
128
+ 'interfaces' : None ,
129
+ 'fields' : None ,
130
+ 'possibleTypes' : [{'name' : 'Dog' }, {'name' : 'Cat' }],
131
+ 'inputFields' : None
132
+ }
133
+ }
91
134
92
135
93
136
def test_executes_using_union_types ():
@@ -113,7 +156,7 @@ def test_executes_using_union_types():
113
156
{'__typename' : 'Cat' , 'name' : 'Garfield' , 'meows' : False },
114
157
{'__typename' : 'Dog' , 'name' : 'Odie' , 'barks' : True }
115
158
]
116
- }
159
+ }
117
160
118
161
119
162
def test_executes_union_types_with_inline_fragment ():
@@ -269,3 +312,42 @@ def test_only_include_fields_from_matching_fragment_condition():
269
312
{'__typename' : 'Dog' , 'name' : 'Odie' }
270
313
],
271
314
}
315
+
316
+
317
+ def test_gets_execution_info_in_resolver ():
318
+ encountered_schema = [None ]
319
+ encountered_root_value = [None ]
320
+
321
+ def resolve_type (obj , info ):
322
+ encountered_schema [0 ] = info .schema
323
+ encountered_root_value [0 ] = info .root_value
324
+ return PersonType2
325
+
326
+ NamedType2 = GraphQLInterfaceType (
327
+ name = 'Named' ,
328
+ fields = {
329
+ 'name' : GraphQLField (GraphQLString )
330
+ },
331
+ resolve_type = resolve_type
332
+ )
333
+
334
+ PersonType2 = GraphQLObjectType (
335
+ name = 'Person' ,
336
+ interfaces = [NamedType2 ],
337
+ fields = {
338
+ 'name' : GraphQLField (GraphQLString ),
339
+ 'friends' : GraphQLField (GraphQLList (NamedType2 ))
340
+ }
341
+ )
342
+
343
+ schema2 = GraphQLSchema (query = PersonType2 )
344
+ john2 = Person ('John' , [], [liz ])
345
+ ast = parse ('''{ name, friends { name } }''' )
346
+
347
+ result = execute (schema2 , john2 , ast )
348
+ assert result .data == {
349
+ 'name' : 'John' , 'friends' : [{'name' : 'Liz' }]
350
+ }
351
+
352
+ assert encountered_schema [0 ] == schema2
353
+ assert encountered_root_value [0 ] == john2
0 commit comments