예제 #1
0
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)
예제 #2
0
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
예제 #3
0
    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)
예제 #4
0
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)
예제 #5
0
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
            )
예제 #6
0
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"}
예제 #8
0
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}