Skip to content

Commit dd50783

Browse files
committed
Improved tests
1 parent 09ff102 commit dd50783

File tree

4 files changed

+19
-35
lines changed

4 files changed

+19
-35
lines changed

graphql/execution/querybuilder/fragment.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ def resolve(self, root):
9595
if result is Undefined:
9696
continue
9797

98-
if is_promise(result):
98+
if not contains_promise and is_promise(result):
9999
contains_promise = True
100100

101101
final_results[response_name] = result

graphql/execution/querybuilder/resolver.py

Lines changed: 13 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import itertools
12
import sys
23
import traceback
34
import collections
@@ -19,15 +20,13 @@ def is_promise(value):
1920

2021
def on_complete_resolver(on_error, __func, exe_context, info, __resolver, *args, **kwargs):
2122
try:
22-
# print 'on_complete_resolver'
2323
result = __resolver(*args, **kwargs)
24-
# print 'result', result
24+
if is_promise(result):
25+
return result.then(__func).catch(on_error)
26+
return __func(result)
2527
except Exception, e:
2628
return on_error(e)
2729

28-
if is_promise(result):
29-
return result.then(__func, on_error)
30-
return __func(result)
3130

3231

3332
def complete_list_value(inner_resolver, exe_context, info, on_error, result):
@@ -38,19 +37,12 @@ def complete_list_value(inner_resolver, exe_context, info, on_error, result):
3837
('User Error: expected iterable, but did not find one ' +
3938
'for field {}.{}.').format(info.parent_type, info.field_name)
4039

41-
completed_results = []
42-
contains_promise = False
43-
try:
44-
for item in result:
45-
completed_item = inner_resolver(item)
46-
if not contains_promise and is_promise(completed_item):
47-
contains_promise = True
40+
completed_results = map(inner_resolver, result)
4841

49-
completed_results.append(completed_item)
42+
if not any(itertools.imap(is_promise, completed_results)):
43+
return completed_results
5044

51-
return Promise.all(completed_results).catch(on_error) if contains_promise else completed_results
52-
except Exception, e:
53-
on_error(e)
45+
return Promise.all(completed_results).catch(on_error)
5446

5547

5648
def complete_nonnull_value(exe_context, info, result):
@@ -71,24 +63,15 @@ def complete_leaf_value(serialize, result):
7163
def complete_object_value(fragment_resolve, exe_context, on_error, result):
7264
if result is None:
7365
return None
74-
try:
75-
result = fragment_resolve(result)
76-
if is_promise(result):
77-
return result.catch(on_error)
78-
return result
79-
except Exception, e:
80-
on_error(e)
66+
67+
result = fragment_resolve(result)
68+
if is_promise(result):
69+
return result.catch(on_error)
70+
return result
8171

8272

8373
def field_resolver(field, fragment=None, exe_context=None, info=None):
8474
return type_resolver(field.type, field.resolver or default_resolve_fn, fragment, exe_context, info, catch_error=True)
85-
# def new_resolver(*args, **kwargs):
86-
# try:
87-
# result = resolver(*args, **kwargs)
88-
# except Exception, e:
89-
# exe_context.errors.append(e)
90-
91-
# return new_resolver
9275

9376

9477
def type_resolver(return_type, resolver, fragment=None, exe_context=None, info=None, catch_error=False):

graphql/execution/querybuilder/tests/test_executor.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
from ....language.parser import parse
1212

1313
from ..executor import execute
14+
# from ...executor import execute
1415

1516
from promise import Promise
1617

graphql/execution/querybuilder/tests/test_resolver.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -100,18 +100,18 @@ def test_nonnull_field_resolver_fails_on_null_value():
100100
assert str(exc_info.value) == 'Cannot return null for non-nullable field parent_type.field_name.'
101101

102102

103-
def test_nonnull_list_field_resolver_fails_on_null_value():
103+
def test_nonnull_list_field_resolver_fails_silently_on_null_value():
104104
info = mock.MagicMock()
105105
info.parent_type = 'parent_type'
106106
info.field_name = 'field_name'
107107
exe_context = mock.MagicMock()
108108
exe_context.errors = []
109109
field = GraphQLField(GraphQLList(GraphQLNonNull(GraphQLString)), resolver=lambda *_: ['1', None])
110110
resolver = field_resolver(field, info=info, exe_context=exe_context)
111-
with pytest.raises(GraphQLError) as exc_info:
112-
resolver()
111+
assert resolver() == None
113112

114-
assert str(exc_info.value) == 'Cannot return null for non-nullable field parent_type.field_name.'
113+
assert len(exe_context.errors) == 1
114+
assert str(exe_context.errors[0]) == 'Cannot return null for non-nullable field parent_type.field_name.'
115115

116116

117117
def test_nonnull_list_field_resolver_fails_on_null_value_top():

0 commit comments

Comments
 (0)