Merge pull request #324 from Globegitter/add-dynamic-tests

Added tests for dynamic field and make more consistent.
This commit is contained in:
Syrus Akbary 2016-10-16 12:54:21 -07:00 committed by GitHub
commit f8e636db80
5 changed files with 57 additions and 4 deletions

View File

@ -3,6 +3,7 @@ from itertools import chain
from ..utils.orderedtype import OrderedType from ..utils.orderedtype import OrderedType
from .structures import NonNull from .structures import NonNull
from .dynamic import Dynamic
class Argument(OrderedType): class Argument(OrderedType):
@ -33,6 +34,9 @@ def to_arguments(args, extra_args):
iter_arguments = chain(args.items(), extra_args) iter_arguments = chain(args.items(), extra_args)
arguments = OrderedDict() arguments = OrderedDict()
for default_name, arg in iter_arguments: for default_name, arg in iter_arguments:
if isinstance(arg, Dynamic):
arg = arg.get_type()
if isinstance(arg, UnmountedType): if isinstance(arg, UnmountedType):
arg = arg.Argument() arg = arg.Argument()

View File

@ -0,0 +1,27 @@
from ..structures import List, NonNull
from ..scalars import String
from ..dynamic import Dynamic
def test_dynamic():
dynamic = Dynamic(lambda: String)
assert dynamic.get_type() == String
assert str(dynamic.get_type()) == 'String'
def test_nonnull():
dynamic = Dynamic(lambda: NonNull(String))
assert dynamic.get_type().of_type == String
assert str(dynamic.get_type()) == 'String!'
def test_list():
dynamic = Dynamic(lambda: List(String))
assert dynamic.get_type().of_type == String
assert str(dynamic.get_type()) == '[String]'
def test_list_non_null():
dynamic = Dynamic(lambda: List(NonNull(String)))
assert dynamic.get_type().of_type.of_type == String
assert str(dynamic.get_type()) == '[String!]'

View File

@ -4,6 +4,7 @@ from ..mutation import Mutation
from ..objecttype import ObjectType from ..objecttype import ObjectType
from ..schema import Schema from ..schema import Schema
from ..scalars import String from ..scalars import String
from ..dynamic import Dynamic
def test_generate_mutation_no_args(): def test_generate_mutation_no_args():
@ -47,12 +48,15 @@ def test_mutation_execution():
class CreateUser(Mutation): class CreateUser(Mutation):
class Input: class Input:
name = String() name = String()
dynamic = Dynamic(lambda: String())
name = String() name = String()
dynamic = Dynamic(lambda: String())
def mutate(self, args, context, info): def mutate(self, args, context, info):
name = args.get('name') name = args.get('name')
return CreateUser(name=name) dynamic = args.get('dynamic')
return CreateUser(name=name, dynamic=dynamic)
class Query(ObjectType): class Query(ObjectType):
a = String() a = String()
@ -62,14 +66,16 @@ def test_mutation_execution():
schema = Schema(query=Query, mutation=MyMutation) schema = Schema(query=Query, mutation=MyMutation)
result = schema.execute(''' mutation mymutation { result = schema.execute(''' mutation mymutation {
createUser(name:"Peter") { createUser(name:"Peter", dynamic: "dynamic") {
name name
dynamic
} }
} }
''') ''')
assert not result.errors assert not result.errors
assert result.data == { assert result.data == {
'createUser': { 'createUser': {
'name': "Peter" 'name': 'Peter',
'dynamic': 'dynamic',
} }
} }

View File

@ -10,6 +10,7 @@ from ..objecttype import ObjectType
from ..scalars import Int, String from ..scalars import Int, String
from ..schema import Schema from ..schema import Schema
from ..structures import List from ..structures import List
from ..dynamic import Dynamic
def test_query(): def test_query():
@ -23,6 +24,19 @@ def test_query():
assert executed.data == {'hello': 'World'} assert executed.data == {'hello': 'World'}
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_schema = Schema(Query)
executed = hello_schema.execute('{ hello hellos helloField }')
assert not executed.errors
assert executed.data == {'hello': 'World', 'hellos': ['Worlds'], 'helloField': 'Field World'}
def test_query_default_value(): def test_query_default_value():
class MyType(ObjectType): class MyType(ObjectType):
field = String() field = String()

View File

@ -13,12 +13,14 @@ from ..utils.str_converters import to_camel_case
from ..utils.get_unbound_function import get_unbound_function from ..utils.get_unbound_function import get_unbound_function
from .dynamic import Dynamic from .dynamic import Dynamic
from .enum import Enum from .enum import Enum
from .field import Field
from .inputobjecttype import InputObjectType from .inputobjecttype import InputObjectType
from .interface import Interface from .interface import Interface
from .objecttype import ObjectType from .objecttype import ObjectType
from .scalars import ID, Boolean, Float, Int, Scalar, String from .scalars import ID, Boolean, Float, Int, Scalar, String
from .structures import List, NonNull from .structures import List, NonNull
from .union import Union from .union import Union
from .utils import get_field_as
def is_graphene_type(_type): def is_graphene_type(_type):
@ -202,7 +204,7 @@ class TypeMap(GraphQLTypeMap):
fields = OrderedDict() fields = OrderedDict()
for name, field in type._meta.fields.items(): for name, field in type._meta.fields.items():
if isinstance(field, Dynamic): if isinstance(field, Dynamic):
field = field.get_type() field = get_field_as(field.get_type(), _as=Field)
if not field: if not field:
continue continue
map = self.reducer(map, field.type) map = self.reducer(map, field.type)