Skip to content

Commit abe3741

Browse files
committed
Change test to assert around placeholders
1 parent aaa160f commit abe3741

File tree

1 file changed

+32
-13
lines changed

1 file changed

+32
-13
lines changed

tests/test_converters.py

Lines changed: 32 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
import graphene_pydantic.converters as converters
1414
from graphene_pydantic.converters import ConversionError, convert_pydantic_field
1515
from graphene_pydantic.objecttype import PydanticObjectType
16-
from graphene_pydantic.registry import get_global_registry
16+
from graphene_pydantic.registry import get_global_registry, Placeholder
1717

1818

1919
def _get_field_from_spec(name, type_spec_or_default):
@@ -141,15 +141,34 @@ class Meta:
141141
assert field.type == GraphFoo
142142

143143

144-
def test_unknown():
145-
with pytest.raises(ConversionError) as exc:
146-
_convert_field_from_spec("attr", (create_model("Model", size=int), None))
147-
assert "Don't know how to convert" in exc.value.args[0]
148-
if pydantic.version.VERSION < "1.0":
149-
assert "Field(attr type=Model default=None)" in exc.value.args[0]
150-
else:
151-
# this worked at least as of 1.1
152-
assert (
153-
"ModelField(name='attr', type=Optional[Model], required=False, default=None)"
154-
in exc.value.args[0]
155-
)
144+
def test_unresolved_placeholders():
145+
# no errors should be raised here -- instead a placeholder is created
146+
field = _convert_field_from_spec("attr", (create_model("Model", size=int), None))
147+
assert any(
148+
isinstance(x, Placeholder)
149+
for x in get_global_registry(PydanticObjectType)._registry.values()
150+
)
151+
# this is a runtime error waiting to happen, but what can we do about it?
152+
assert field.type is None
153+
154+
155+
def test_self_referencing():
156+
class NodeModel(BaseModel):
157+
id: int
158+
name: str
159+
# nodes: Union['NodeModel', None]
160+
nodes: T.Optional["NodeModel"]
161+
162+
NodeModel.update_forward_refs()
163+
164+
class NodeModelSchema(PydanticObjectType):
165+
class Meta: # noqa: too-few-public-methods
166+
model = NodeModel
167+
168+
@classmethod
169+
def is_type_of(cls, root, info):
170+
return isinstance(root, (cls, NodeModel))
171+
172+
NodeModelSchema.resolve_placeholders()
173+
174+
assert NodeModelSchema._meta.model is NodeModel

0 commit comments

Comments
 (0)