Fields default_value are no longer dismissed. Fixed #702.

This commit is contained in:
Syrus Akbary 2018-04-07 15:31:04 -07:00
parent 05d7e61b84
commit 9408ba70d1
2 changed files with 26 additions and 3 deletions

View File

@ -81,7 +81,10 @@ class ObjectType(BaseType):
for name, field in fields_iter:
try:
val = kwargs.pop(name, None)
val = kwargs.pop(
name,
field.default_value if isinstance(field, Field) else None
)
setattr(self, name, val)
except KeyError:
pass

View File

@ -9,9 +9,9 @@ from ..inputfield import InputField
from ..inputobjecttype import InputObjectType
from ..interface import Interface
from ..objecttype import ObjectType
from ..scalars import Int, String
from ..scalars import Int, String, Boolean
from ..schema import Schema
from ..structures import List
from ..structures import List, NonNull
from ..union import Union
from ..context import Context
@ -475,3 +475,23 @@ def test_query_annotated_resolvers():
result = test_schema.execute('{ info }', "base")
assert not result.errors
assert result.data == {'info': 'base-info'}
def test_default_as_kwarg_to_NonNull():
# Related to https://github.com/graphql-python/graphene/issues/702
class User(ObjectType):
name = String()
is_admin = NonNull(Boolean, default_value=False)
class Query(ObjectType):
user = Field(User)
def resolve_user(self, *args, **kwargs):
return User(name="foo")
schema = Schema(query=Query)
expected = {'user': {'name': 'foo', 'isAdmin': False}}
result = schema.execute("{ user { name isAdmin } }")
assert not result.errors
assert result.data == expected