Skip to content

Commit 8d63062

Browse files
committed
#23 Implement missing tests in test_union_interface and fix ResolveInfo.root_value
1 parent a27808c commit 8d63062

File tree

2 files changed

+87
-5
lines changed

2 files changed

+87
-5
lines changed

graphql/core/execution/base.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -231,7 +231,7 @@ def fragments(self):
231231

232232
@property
233233
def root_value(self):
234-
return self.context.root_value
234+
return self.context.root
235235

236236
@property
237237
def operation(self):

tests/core_execution/test_union_interface.py

Lines changed: 86 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ def resolve_pet_type(value, info):
6262
if isinstance(value, Cat):
6363
return CatType
6464

65+
6566
PetType = GraphQLUnionType('Pet', [DogType, CatType],
6667
resolve_type=resolve_pet_type)
6768

@@ -83,11 +84,53 @@ def resolve_pet_type(value, info):
8384
liz = Person('Liz', [], [])
8485
john = Person('John', [garfield, odie], [liz, odie])
8586

87+
8688
# Execute: Union and intersection types
8789

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+
}
91134

92135

93136
def test_executes_using_union_types():
@@ -113,7 +156,7 @@ def test_executes_using_union_types():
113156
{'__typename': 'Cat', 'name': 'Garfield', 'meows': False},
114157
{'__typename': 'Dog', 'name': 'Odie', 'barks': True}
115158
]
116-
}
159+
}
117160

118161

119162
def test_executes_union_types_with_inline_fragment():
@@ -269,3 +312,42 @@ def test_only_include_fields_from_matching_fragment_condition():
269312
{'__typename': 'Dog', 'name': 'Odie'}
270313
],
271314
}
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

Comments
 (0)