This commit is contained in:
Syrus Akbary 2017-11-15 06:29:27 +00:00 committed by GitHub
commit f9b071d724
2 changed files with 39 additions and 1 deletions

View File

@ -4,6 +4,8 @@ from .unmountedtype import UnmountedType
class MountedType(OrderedType):
_mount_cls_override = None
@classmethod
def mounted(cls, unmounted): # noqa: N802
'''
@ -13,7 +15,9 @@ class MountedType(OrderedType):
'{} can\'t mount {}'
).format(cls.__name__, repr(unmounted))
return cls(
mount_cls = cls._mount_cls_override or cls
return mount_cls(
unmounted.get_type(),
*unmounted.args,
_creation_counter=unmounted.creation_counter,

View File

@ -1,5 +1,6 @@
from ..field import Field
from ..objecttype import ObjectType
from ..scalars import String
@ -23,3 +24,36 @@ def test_mounted_type_custom():
assert isinstance(mounted, CustomField)
assert mounted.type == String
assert mounted.metadata == {'hey': 'yo!'}
@pytest.yield_fixture
def custom_field():
# We set the override
Field._mount_cls_override = CustomField
# Run the test
yield CustomField
# Remove the class override (back to the original state)
Field._mount_cls_override = None
def test_mounted_type_overrided(custom_field):
# This function is using the custom_field yield fixture
unmounted = String(metadata={'hey': 'yo!'})
mounted = Field.mount(unmounted)
assert isinstance(mounted, CustomField)
assert mounted.type == String
assert mounted.metadata == {'hey': 'yo!'}
def test_mounted_type_overrided(custom_field):
# This function is using the custom_field yield fixture
class Query(ObjectType):
test = String(metadata={'other': 'thing'})
test_field = Query._meta.fields['test']
assert isinstance(test_field, CustomField)
assert test_field.metadata == {'other': 'thing'}