def test_register_resolver_raises_on_unknown_field(): Object = ObjectType("Object", [Field("id", String)]) schema = Schema(ObjectType("Query", [Field("foo", Object)])) resolver = lambda *_, **__: None with pytest.raises(SchemaError): schema.register_resolver("Object", "foo", resolver)
def test_register_resolver_on_root_type(): schema = Schema(ObjectType("Query", [Field("author", BlogAuthor)])) resolver = lambda *_, **__: None schema.register_resolver("Query", "author", resolver) assert schema.query_type.fields[0].resolver is resolver # type: ignore
def test_accept_callable_object(self, schema: Schema) -> None: class Resolver: def __call__(self, root, ctx, info, b, c, a="s"): pass schema.register_resolver("Object", "field", Resolver()) validate_schema(schema)
def test_register_resolver_raises_on_override_by_default(): resolver = lambda *_, **__: None Object = ObjectType("Object", [Field("id", String, resolver=resolver)]) schema = Schema(ObjectType("Query", [Field("foo", Object)])) new_resolver = lambda *_, **__: None with pytest.raises(ValueError): schema.register_resolver("Object", "id", new_resolver)
def test_register_resolver_on_child_type(): Object = ObjectType("Object", [Field("id", String)]) schema = Schema(ObjectType("Query", [Field("foo", Object)])) resolver = lambda *_, **__: None schema.register_resolver("Object", "id", resolver) assert (schema.get_type("Object").fields[0].resolver is resolver # type: ignore )
def test_register_resolver_accepts_override_with_flag(): old_resolver = lambda *_, **__: None Object = ObjectType("Object", [Field("id", String, resolver=old_resolver)]) schema = Schema(ObjectType("Query", [Field("foo", Object)])) resolver = lambda *_, **__: None schema.register_resolver("Object", "id", resolver, allow_override=True) assert (schema.get_type("Object").fields[0].resolver is resolver # type: ignore )
def test_arguments_and_input_fields_are_handled_correctly( schema: Schema, ) -> None: def resolver(_root, _ctx, _info, *, arg_one, arg_two=None): if arg_two is None: arg_two = {"field_one": 0, "field_two": ""} return arg_one + arg_two["field_one"] schema.register_resolver("Query", "field_with_arguments", resolver) new_schema = transform_schema(schema, CamelCaseSchemaTransform()) result = graphql_blocking( new_schema, "{ fieldWithArguments(argOne: 42, argTwo: { fieldOne: 42 }) }", root={}, ) assert result and result.response()["data"] == {"fieldWithArguments": "84"}
def test_register_resolver_does_not_raise_on_same_resolver(): resolver = lambda *_, **__: None Object = ObjectType("Object", [Field("id", String, resolver=resolver)]) schema = Schema(ObjectType("Query", [Field("foo", Object)])) schema.register_resolver("Object", "id", resolver)
def test_custom_resolver_still_works(schema: Schema) -> None: schema.register_resolver("Query", "snake_case_field", lambda *_: 42) new_schema = transform_schema(schema, CamelCaseSchemaTransform()) result = graphql_blocking(new_schema, "{ snakeCaseField }", root={}) assert result and result.response()["data"] == {"snakeCaseField": 42}