Exemple #1
0
    def correctly_assigns_ast_nodes_to_new_and_extended_types():
        extended_schema = extend_test_schema("""
            extend type Query {
              newField(testArg: TestInput): TestEnum
            }

            extend scalar SomeScalar @foo

            extend enum SomeEnum {
              NEW_VALUE
            }

            extend union SomeUnion = Bar

            extend input SomeInput {
              newField: String
            }

            extend interface SomeInterface {
              newField: String
            }

            enum TestEnum {
              TEST_VALUE
            }

            input TestInput {
              testInputField: TestEnum
            }
            """)
        ast = parse("""
            extend type Query {
              oneMoreNewField: TestUnion
            }

            extend scalar SomeScalar @test

            extend enum SomeEnum {
              ONE_MORE_NEW_VALUE
            }

            extend union SomeUnion = TestType

            extend input SomeInput {
              oneMoreNewField: String
            }

            extend interface SomeInterface {
              oneMoreNewField: String
            }

            union TestUnion = TestType

            interface TestInterface {
              interfaceField: String
            }

            type TestType implements TestInterface {
              interfaceField: String
            }

            directive @test(arg: Int) on FIELD | SCALAR
            """)
        extended_twice_schema = extend_schema(extended_schema, ast)

        query = assert_object_type(extended_twice_schema.get_type("Query"))
        some_enum = assert_enum_type(
            extended_twice_schema.get_type("SomeEnum"))
        some_union = assert_union_type(
            extended_twice_schema.get_type("SomeUnion"))
        some_scalar = assert_scalar_type(
            extended_twice_schema.get_type("SomeScalar"))
        some_input = assert_input_object_type(
            extended_twice_schema.get_type("SomeInput"))
        some_interface = assert_interface_type(
            extended_twice_schema.get_type("SomeInterface"))

        test_input = assert_input_object_type(
            extended_twice_schema.get_type("TestInput"))
        test_enum = assert_enum_type(
            extended_twice_schema.get_type("TestEnum"))
        test_union = assert_union_type(
            extended_twice_schema.get_type("TestUnion"))
        test_type = assert_object_type(
            extended_twice_schema.get_type("TestType"))
        test_interface = assert_interface_type(
            extended_twice_schema.get_type("TestInterface"))
        test_directive = assert_directive(
            extended_twice_schema.get_directive("test"))

        assert test_type.extension_ast_nodes is None
        assert test_enum.extension_ast_nodes is None
        assert test_union.extension_ast_nodes is None
        assert test_input.extension_ast_nodes is None
        assert test_interface.extension_ast_nodes is None

        assert len(query.extension_ast_nodes) == 2
        assert len(some_scalar.extension_ast_nodes) == 2
        assert len(some_enum.extension_ast_nodes) == 2
        assert len(some_union.extension_ast_nodes) == 2
        assert len(some_input.extension_ast_nodes) == 2
        assert len(some_interface.extension_ast_nodes) == 2

        definitions = [
            test_input.ast_node,
            test_enum.ast_node,
            test_union.ast_node,
            test_interface.ast_node,
            test_type.ast_node,
            test_directive.ast_node,
        ]
        for extension_ast_nodes in [
                query.extension_ast_nodes,
                some_scalar.extension_ast_nodes,
                some_enum.extension_ast_nodes,
                some_union.extension_ast_nodes,
                some_input.extension_ast_nodes,
                some_interface.extension_ast_nodes,
        ]:
            if extension_ast_nodes:
                definitions.extend(extension_ast_nodes)
        restored_extension_ast = DocumentNode(definitions=definitions)

        assert print_schema(extend_schema(
            test_schema,
            restored_extension_ast)) == print_schema(extended_twice_schema)

        new_field = query.fields["newField"]
        assert print_ast(
            new_field.ast_node) == "newField(testArg: TestInput): TestEnum"
        assert print_ast(
            new_field.args["testArg"].ast_node) == "testArg: TestInput"
        assert (print_ast(query.fields["oneMoreNewField"].ast_node) ==
                "oneMoreNewField: TestUnion")

        new_value = some_enum.values["NEW_VALUE"]
        assert some_enum
        assert print_ast(new_value.ast_node) == "NEW_VALUE"

        one_more_new_value = some_enum.values["ONE_MORE_NEW_VALUE"]
        assert one_more_new_value
        assert print_ast(one_more_new_value.ast_node) == "ONE_MORE_NEW_VALUE"
        assert print_ast(
            some_input.fields["newField"].ast_node) == "newField: String"
        assert (print_ast(some_input.fields["oneMoreNewField"].ast_node) ==
                "oneMoreNewField: String")
        assert (print_ast(
            some_interface.fields["newField"].ast_node) == "newField: String")
        assert (print_ast(some_interface.fields["oneMoreNewField"].ast_node) ==
                "oneMoreNewField: String")

        assert (print_ast(test_input.fields["testInputField"].ast_node) ==
                "testInputField: TestEnum")

        test_value = test_enum.values["TEST_VALUE"]
        assert test_value
        assert print_ast(test_value.ast_node) == "TEST_VALUE"

        assert (print_ast(test_interface.fields["interfaceField"].ast_node) ==
                "interfaceField: String")
        assert (print_ast(test_type.fields["interfaceField"].ast_node) ==
                "interfaceField: String")
        assert print_ast(test_directive.args["arg"].ast_node) == "arg: Int"
Exemple #2
0
 def returns_false_for_non_interface_type():
     assert is_interface_type(ObjectType) is False
     with raises(TypeError):
         assert_interface_type(ObjectType)
Exemple #3
0
 def returns_false_for_wrapped_interface_type():
     assert is_interface_type(GraphQLList(InterfaceType)) is False
     with raises(TypeError):
         assert_interface_type(GraphQLList(InterfaceType))
Exemple #4
0
 def returns_true_for_interface_type():
     assert is_interface_type(InterfaceType) is True
     assert_interface_type(InterfaceType)
Exemple #5
0
    def correctly_assign_ast_nodes():
        sdl = dedent("""
            schema {
              query: Query
            }

            type Query {
              testField(testArg: TestInput): TestUnion
            }

            input TestInput {
              testInputField: TestEnum
            }

            enum TestEnum {
              TEST_VALUE
            }

            union TestUnion = TestType

            interface TestInterface {
              interfaceField: String
            }

            type TestType implements TestInterface {
              interfaceField: String
            }

            scalar TestScalar

            directive @test(arg: TestScalar) on FIELD
            """)
        ast = parse(sdl, no_location=True)

        schema = build_ast_schema(ast)
        query = assert_object_type(schema.get_type("Query"))
        test_input = assert_input_object_type(schema.get_type("TestInput"))
        test_enum = assert_enum_type(schema.get_type("TestEnum"))
        test_union = assert_union_type(schema.get_type("TestUnion"))
        test_interface = assert_interface_type(
            schema.get_type("TestInterface"))
        test_type = assert_object_type(schema.get_type("TestType"))
        test_scalar = assert_scalar_type(schema.get_type("TestScalar"))
        test_directive = assert_directive(schema.get_directive("test"))

        assert [
            schema.ast_node,
            query.ast_node,
            test_input.ast_node,
            test_enum.ast_node,
            test_union.ast_node,
            test_interface.ast_node,
            test_type.ast_node,
            test_scalar.ast_node,
            test_directive.ast_node,
        ] == ast.definitions

        test_field = query.fields["testField"]
        assert print_ast_node(test_field) == (
            "testField(testArg: TestInput): TestUnion")
        assert print_ast_node(
            test_field.args["testArg"]) == "testArg: TestInput"
        assert print_ast_node(test_input.fields["testInputField"]) == (
            "testInputField: TestEnum")
        test_enum_value = test_enum.values["TEST_VALUE"]
        assert test_enum_value
        assert print_ast_node(test_enum_value) == "TEST_VALUE"
        assert print_ast_node(test_interface.fields["interfaceField"]) == (
            "interfaceField: String")
        assert print_ast_node(test_directive.args["arg"]) == "arg: TestScalar"
    def correctly_assigns_ast_nodes_to_new_and_extended_types():
        schema = build_schema("""
            type Query

            scalar SomeScalar
            enum SomeEnum
            union SomeUnion
            input SomeInput
            type SomeObject
            interface SomeInterface

            directive @foo on SCALAR
            """)
        first_extension_ast = parse("""
            extend type Query {
              newField(testArg: TestInput): TestEnum
            }

            extend scalar SomeScalar @foo

            extend enum SomeEnum {
              NEW_VALUE
            }

            extend union SomeUnion = SomeObject

            extend input SomeInput {
              newField: String
            }

            extend interface SomeInterface {
              newField: String
            }

            enum TestEnum {
              TEST_VALUE
            }

            input TestInput {
              testInputField: TestEnum
            }
            """)
        extended_schema = extend_schema(schema, first_extension_ast)

        second_extension_ast = parse("""
            extend type Query {
              oneMoreNewField: TestUnion
            }

            extend scalar SomeScalar @test

            extend enum SomeEnum {
              ONE_MORE_NEW_VALUE
            }

            extend union SomeUnion = TestType

            extend input SomeInput {
              oneMoreNewField: String
            }

            extend interface SomeInterface {
              oneMoreNewField: String
            }

            union TestUnion = TestType

            interface TestInterface {
              interfaceField: String
            }

            type TestType implements TestInterface {
              interfaceField: String
            }

            directive @test(arg: Int) repeatable on FIELD | SCALAR
            """)
        extended_twice_schema = extend_schema(extended_schema,
                                              second_extension_ast)

        extend_in_one_go_schema = extend_schema(
            schema, concat_ast([first_extension_ast, second_extension_ast]))
        assert print_schema(extend_in_one_go_schema) == print_schema(
            extended_twice_schema)

        query = assert_object_type(extended_twice_schema.get_type("Query"))
        some_enum = assert_enum_type(
            extended_twice_schema.get_type("SomeEnum"))
        some_union = assert_union_type(
            extended_twice_schema.get_type("SomeUnion"))
        some_scalar = assert_scalar_type(
            extended_twice_schema.get_type("SomeScalar"))
        some_input = assert_input_object_type(
            extended_twice_schema.get_type("SomeInput"))
        some_interface = assert_interface_type(
            extended_twice_schema.get_type("SomeInterface"))

        test_input = assert_input_object_type(
            extended_twice_schema.get_type("TestInput"))
        test_enum = assert_enum_type(
            extended_twice_schema.get_type("TestEnum"))
        test_union = assert_union_type(
            extended_twice_schema.get_type("TestUnion"))
        test_type = assert_object_type(
            extended_twice_schema.get_type("TestType"))
        test_interface = assert_interface_type(
            extended_twice_schema.get_type("TestInterface"))
        test_directive = assert_directive(
            extended_twice_schema.get_directive("test"))

        assert test_type.extension_ast_nodes is None
        assert test_enum.extension_ast_nodes is None
        assert test_union.extension_ast_nodes is None
        assert test_input.extension_ast_nodes is None
        assert test_interface.extension_ast_nodes is None

        assert query.extension_ast_nodes
        assert len(query.extension_ast_nodes) == 2
        assert some_scalar.extension_ast_nodes
        assert len(some_scalar.extension_ast_nodes) == 2
        assert some_enum.extension_ast_nodes
        assert len(some_enum.extension_ast_nodes) == 2
        assert some_union.extension_ast_nodes
        assert len(some_union.extension_ast_nodes) == 2
        assert some_input.extension_ast_nodes
        assert len(some_input.extension_ast_nodes) == 2
        assert some_interface.extension_ast_nodes
        assert len(some_interface.extension_ast_nodes) == 2

        assert {
            test_input.ast_node,
            test_enum.ast_node,
            test_union.ast_node,
            test_interface.ast_node,
            test_type.ast_node,
            test_directive.ast_node,
            *query.extension_ast_nodes,
            *some_scalar.extension_ast_nodes,
            *some_enum.extension_ast_nodes,
            *some_union.extension_ast_nodes,
            *some_input.extension_ast_nodes,
            *some_interface.extension_ast_nodes,
        } == {
            *first_extension_ast.definitions, *second_extension_ast.definitions
        }

        new_field = query.fields["newField"]
        assert print_ast_node(
            new_field) == "newField(testArg: TestInput): TestEnum"
        assert print_ast_node(
            new_field.args["testArg"]) == "testArg: TestInput"
        assert (print_ast_node(
            query.fields["oneMoreNewField"]) == "oneMoreNewField: TestUnion")

        new_value = some_enum.values["NEW_VALUE"]
        assert print_ast_node(new_value) == "NEW_VALUE"

        one_more_new_value = some_enum.values["ONE_MORE_NEW_VALUE"]
        assert print_ast_node(one_more_new_value) == "ONE_MORE_NEW_VALUE"
        assert print_ast_node(
            some_input.fields["newField"]) == "newField: String"
        assert (print_ast_node(
            some_input.fields["oneMoreNewField"]) == "oneMoreNewField: String")
        assert print_ast_node(
            some_interface.fields["newField"]) == "newField: String"
        assert (print_ast_node(some_interface.fields["oneMoreNewField"]) ==
                "oneMoreNewField: String")

        assert (print_ast_node(
            test_input.fields["testInputField"]) == "testInputField: TestEnum")

        test_value = test_enum.values["TEST_VALUE"]
        assert print_ast_node(test_value) == "TEST_VALUE"

        assert (print_ast_node(test_interface.fields["interfaceField"]) ==
                "interfaceField: String")
        assert (print_ast_node(
            test_type.fields["interfaceField"]) == "interfaceField: String")
        assert print_ast_node(test_directive.args["arg"]) == "arg: Int"