mirror of
https://github.com/graphql-python/graphene.git
synced 2024-11-22 17:46:57 +03:00
Fixed source resolver and added tests for it
This commit is contained in:
parent
81018268aa
commit
d8fac58701
|
@ -11,7 +11,7 @@ from .utils import get_type
|
|||
base_type = type
|
||||
|
||||
|
||||
def source_resolver(source, root, args, context, info):
|
||||
def source_resolver(source, root, info, **args):
|
||||
resolved = getattr(root, source, None)
|
||||
if inspect.isfunction(resolved) or inspect.ismethod(resolved):
|
||||
return resolved()
|
||||
|
|
|
@ -27,6 +27,23 @@ def test_query():
|
|||
assert executed.data == {'hello': 'World'}
|
||||
|
||||
|
||||
def test_query_source():
|
||||
class Root(object):
|
||||
_hello = "World"
|
||||
|
||||
def hello(self):
|
||||
return self._hello
|
||||
|
||||
class Query(ObjectType):
|
||||
hello = String(source="hello")
|
||||
|
||||
hello_schema = Schema(Query)
|
||||
|
||||
executed = hello_schema.execute('{ hello }', Root())
|
||||
assert not executed.errors
|
||||
assert executed.data == {'hello': 'World'}
|
||||
|
||||
|
||||
def test_query_union():
|
||||
class one_object(object):
|
||||
pass
|
||||
|
@ -127,13 +144,15 @@ def test_query_dynamic():
|
|||
class Query(ObjectType):
|
||||
hello = Dynamic(lambda: String(resolver=lambda *_: 'World'))
|
||||
hellos = Dynamic(lambda: List(String, resolver=lambda *_: ['Worlds']))
|
||||
hello_field = Dynamic(lambda: Field(String, resolver=lambda *_: 'Field World'))
|
||||
hello_field = Dynamic(lambda: Field(
|
||||
String, resolver=lambda *_: 'Field World'))
|
||||
|
||||
hello_schema = Schema(Query)
|
||||
|
||||
executed = hello_schema.execute('{ hello hellos helloField }')
|
||||
assert not executed.errors
|
||||
assert executed.data == {'hello': 'World', 'hellos': ['Worlds'], 'helloField': 'Field World'}
|
||||
assert executed.data == {'hello': 'World', 'hellos': [
|
||||
'Worlds'], 'helloField': 'Field World'}
|
||||
|
||||
|
||||
def test_query_default_value():
|
||||
|
@ -165,7 +184,8 @@ def test_query_wrong_default_value():
|
|||
|
||||
executed = hello_schema.execute('{ hello { field } }')
|
||||
assert len(executed.errors) == 1
|
||||
assert executed.errors[0].message == GraphQLError('Expected value of type "MyType" but got: str.').message
|
||||
assert executed.errors[0].message == GraphQLError(
|
||||
'Expected value of type "MyType" but got: str.').message
|
||||
assert executed.data == {'hello': None}
|
||||
|
||||
|
||||
|
@ -174,7 +194,8 @@ def test_query_default_value_ignored_by_resolver():
|
|||
field = String()
|
||||
|
||||
class Query(ObjectType):
|
||||
hello = Field(MyType, default_value='hello', resolver=lambda *_: MyType(field='no default.'))
|
||||
hello = Field(MyType, default_value='hello',
|
||||
resolver=lambda *_: MyType(field='no default.'))
|
||||
|
||||
hello_schema = Schema(Query)
|
||||
|
||||
|
@ -214,7 +235,8 @@ def test_query_arguments():
|
|||
assert not result.errors
|
||||
assert result.data == {'test': '["Source!",{"a_str":"String!"}]'}
|
||||
|
||||
result = test_schema.execute('{ test(aInt: -123, aStr: "String!") }', 'Source!')
|
||||
result = test_schema.execute(
|
||||
'{ test(aInt: -123, aStr: "String!") }', 'Source!')
|
||||
assert not result.errors
|
||||
assert result.data in [
|
||||
{'test': '["Source!",{"a_str":"String!","a_int":-123}]'},
|
||||
|
@ -239,13 +261,17 @@ def test_query_input_field():
|
|||
assert not result.errors
|
||||
assert result.data == {'test': '[null,{}]'}
|
||||
|
||||
result = test_schema.execute('{ test(aInput: {aField: "String!"} ) }', 'Source!')
|
||||
result = test_schema.execute(
|
||||
'{ test(aInput: {aField: "String!"} ) }', 'Source!')
|
||||
assert not result.errors
|
||||
assert result.data == {'test': '["Source!",{"a_input":{"a_field":"String!"}}]'}
|
||||
assert result.data == {
|
||||
'test': '["Source!",{"a_input":{"a_field":"String!"}}]'}
|
||||
|
||||
result = test_schema.execute('{ test(aInput: {recursiveField: {aField: "String!"}}) }', 'Source!')
|
||||
result = test_schema.execute(
|
||||
'{ test(aInput: {recursiveField: {aField: "String!"}}) }', 'Source!')
|
||||
assert not result.errors
|
||||
assert result.data == {'test': '["Source!",{"a_input":{"recursive_field":{"a_field":"String!"}}}]'}
|
||||
assert result.data == {
|
||||
'test': '["Source!",{"a_input":{"recursive_field":{"a_field":"String!"}}}]'}
|
||||
|
||||
|
||||
def test_query_middlewares():
|
||||
|
@ -265,7 +291,8 @@ def test_query_middlewares():
|
|||
|
||||
hello_schema = Schema(Query)
|
||||
|
||||
executed = hello_schema.execute('{ hello, other }', middleware=[reversed_middleware])
|
||||
executed = hello_schema.execute(
|
||||
'{ hello, other }', middleware=[reversed_middleware])
|
||||
assert not executed.errors
|
||||
assert executed.data == {'hello': 'dlroW', 'other': 'rehto'}
|
||||
|
||||
|
@ -348,7 +375,8 @@ def test_big_list_of_containers_query_benchmark(benchmark):
|
|||
big_list_query = partial(hello_schema.execute, '{ allContainers { x } }')
|
||||
result = benchmark(big_list_query)
|
||||
assert not result.errors
|
||||
assert result.data == {'allContainers': [{'x': c.x} for c in big_container_list]}
|
||||
assert result.data == {'allContainers': [
|
||||
{'x': c.x} for c in big_container_list]}
|
||||
|
||||
|
||||
def test_big_list_of_containers_multiple_fields_query_benchmark(benchmark):
|
||||
|
@ -368,10 +396,12 @@ def test_big_list_of_containers_multiple_fields_query_benchmark(benchmark):
|
|||
|
||||
hello_schema = Schema(Query)
|
||||
|
||||
big_list_query = partial(hello_schema.execute, '{ allContainers { x, y, z, o } }')
|
||||
big_list_query = partial(hello_schema.execute,
|
||||
'{ allContainers { x, y, z, o } }')
|
||||
result = benchmark(big_list_query)
|
||||
assert not result.errors
|
||||
assert result.data == {'allContainers': [{'x': c.x, 'y': c.y, 'z': c.z, 'o': c.o} for c in big_container_list]}
|
||||
assert result.data == {'allContainers': [
|
||||
{'x': c.x, 'y': c.y, 'z': c.z, 'o': c.o} for c in big_container_list]}
|
||||
|
||||
|
||||
def test_big_list_of_containers_multiple_fields_custom_resolvers_query_benchmark(benchmark):
|
||||
|
@ -403,10 +433,12 @@ def test_big_list_of_containers_multiple_fields_custom_resolvers_query_benchmark
|
|||
|
||||
hello_schema = Schema(Query)
|
||||
|
||||
big_list_query = partial(hello_schema.execute, '{ allContainers { x, y, z, o } }')
|
||||
big_list_query = partial(hello_schema.execute,
|
||||
'{ allContainers { x, y, z, o } }')
|
||||
result = benchmark(big_list_query)
|
||||
assert not result.errors
|
||||
assert result.data == {'allContainers': [{'x': c.x, 'y': c.y, 'z': c.z, 'o': c.o} for c in big_container_list]}
|
||||
assert result.data == {'allContainers': [
|
||||
{'x': c.x, 'y': c.y, 'z': c.z, 'o': c.o} for c in big_container_list]}
|
||||
|
||||
|
||||
def test_query_annotated_resolvers():
|
||||
|
|
Loading…
Reference in New Issue
Block a user