Exemplo n.º 1
0
 def check_selection_node():
     assert not is_selection_node(Node())
     assert not is_selection_node(DocumentNode())
     assert is_selection_node(SelectionNode())
     assert is_selection_node(FieldNode())
     assert is_selection_node(InlineFragmentNode())
     assert not is_selection_node(SelectionSetNode())
Exemplo n.º 2
0
 def check_value_node():
     assert not is_value_node(Node())
     assert not is_value_node(DocumentNode())
     assert is_value_node(ValueNode())
     assert is_value_node(IntValueNode())
     assert is_value_node(ObjectValueNode())
     assert not is_value_node(TypeNode())
Exemplo n.º 3
0
 def check_type_extension_node():
     assert not is_type_extension_node(Node())
     assert not is_type_extension_node(DocumentNode())
     assert is_type_extension_node(TypeExtensionNode())
     assert not is_type_extension_node(ScalarTypeDefinitionNode())
     assert is_type_extension_node(ScalarTypeExtensionNode())
     assert not is_type_extension_node(DefinitionNode())
     assert not is_type_extension_node(TypeNode())
Exemplo n.º 4
0
 def check_type_system_extension_node():
     assert not is_type_system_extension_node(Node())
     assert not is_type_system_extension_node(DocumentNode())
     assert is_type_system_extension_node(SchemaExtensionNode())
     assert is_type_system_extension_node(TypeExtensionNode())
     assert not is_type_system_extension_node(TypeSystemDefinitionNode())
     assert not is_type_system_extension_node(DefinitionNode())
     assert not is_type_system_extension_node(TypeNode())
Exemplo n.º 5
0
 def check_type_definition_node():
     assert not is_type_definition_node(Node())
     assert not is_type_definition_node(DocumentNode())
     assert is_type_definition_node(TypeDefinitionNode())
     assert is_type_definition_node(ScalarTypeDefinitionNode())
     assert not is_type_definition_node(TypeSystemDefinitionNode())
     assert not is_type_definition_node(DefinitionNode())
     assert not is_type_definition_node(TypeNode())
Exemplo n.º 6
0
def print_schema_changes(schema: GraphQLSchema,
                         extended_schema: GraphQLSchema) -> str:
    schema_definitions = [
        print_ast(definition)
        for definition in parse(print_schema(schema)).definitions
    ]
    ast = parse(print_schema(extended_schema))
    return print_ast(
        DocumentNode(definitions=FrozenList(
            node for node in ast.definitions
            if print_ast(node) not in schema_definitions)))
    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) repeatable 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 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

        definitions: List[Optional[TypeSystemDefinitionNode]] = [
            test_input.ast_node,
            test_enum.ast_node,
            test_union.ast_node,
            test_interface.ast_node,
            test_type.ast_node,
            test_directive.ast_node,
        ]
        extensions: List[Optional[FrozenList[TypeSystemDefinitionNode]]] = [
            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,
        ]
        for extension_ast_nodes in extensions:
            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_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 some_enum
        assert print_ast_node(new_value) == "NEW_VALUE"

        one_more_new_value = some_enum.values["ONE_MORE_NEW_VALUE"]
        assert 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 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"
Exemplo n.º 8
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
            """)
        schema = build_schema(sdl)
        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"))

        restored_schema_ast = DocumentNode(definitions=[
            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,
        ])
        assert print_ast(restored_schema_ast) == sdl

        test_field = query.fields["testField"]
        assert print_ast(test_field.ast_node) == (
            "testField(testArg: TestInput): TestUnion")
        assert print_ast(
            test_field.args["testArg"].ast_node) == "testArg: TestInput"
        assert print_ast(test_input.fields["testInputField"].ast_node) == (
            "testInputField: TestEnum")
        test_enum_value = test_enum.values["TEST_VALUE"]
        assert test_enum_value
        assert print_ast(test_enum_value.ast_node) == "TEST_VALUE"
        assert print_ast(test_interface.fields["interfaceField"].ast_node) == (
            "interfaceField: String")
        assert print_ast(
            test_directive.args["arg"].ast_node) == "arg: TestScalar"
Exemplo n.º 9
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 = extended_twice_schema.get_type("Query")
        some_scalar = extended_twice_schema.get_type("SomeScalar")
        some_enum = extended_twice_schema.get_type("SomeEnum")
        some_union = extended_twice_schema.get_type("SomeUnion")
        some_input = extended_twice_schema.get_type("SomeInput")
        some_interface = extended_twice_schema.get_type("SomeInterface")

        test_input = extended_twice_schema.get_type("TestInput")
        test_enum = extended_twice_schema.get_type("TestEnum")
        test_union = extended_twice_schema.get_type("TestUnion")
        test_interface = extended_twice_schema.get_type("TestInterface")
        test_type = extended_twice_schema.get_type("TestType")
        test_directive = extended_twice_schema.get_directive("test")

        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

        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

        restored_extension_ast = DocumentNode(definitions=[
            *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,
            test_input.ast_node,
            test_enum.ast_node,
            test_union.ast_node,
            test_interface.ast_node,
            test_type.ast_node,
            test_directive.ast_node,
        ])

        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")
        assert print_ast(some_enum.values["NEW_VALUE"].ast_node) == "NEW_VALUE"
        assert (print_ast(some_enum.values["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")
        assert print_ast(
            test_enum.values["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"
Exemplo n.º 10
0
def print_extension_nodes(obj: TypeWithExtensionAstNodes) -> str:
    assert obj is not None and obj.extension_ast_nodes is not None
    return print_ast(DocumentNode(definitions=obj.extension_ast_nodes))
Exemplo n.º 11
0
 def check_type_node():
     assert not is_type_node(Node())
     assert not is_type_node(DocumentNode())
     assert not is_type_node(ValueNode())
     assert is_type_node(TypeNode())
     assert is_type_node(NonNullTypeNode())
Exemplo n.º 12
0
 def check_exectuable_definition_node():
     assert not is_executable_definition_node(Node())
     assert not is_executable_definition_node(DocumentNode())
     assert not is_executable_definition_node(DefinitionNode())
     assert is_executable_definition_node(ExecutableDefinitionNode())
     assert not is_executable_definition_node(TypeSystemDefinitionNode())
Exemplo n.º 13
0
    def correctly_assign_ast_nodes():
        schema_ast = parse(
            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
            """))
        schema = build_ast_schema(schema_ast)
        query = schema.get_type('Query')
        query = cast(GraphQLObjectType, query)
        test_input = schema.get_type('TestInput')
        test_input = cast(GraphQLInputObjectType, test_input)
        test_enum = schema.get_type('TestEnum')
        test_enum = cast(GraphQLEnumType, test_enum)
        test_union = schema.get_type('TestUnion')
        test_interface = schema.get_type('TestInterface')
        test_interface = cast(GraphQLInterfaceType, test_interface)
        test_type = schema.get_type('TestType')
        test_scalar = schema.get_type('TestScalar')
        test_directive = schema.get_directive('test')

        restored_schema_ast = DocumentNode(definitions=[
            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
        ])
        assert print_ast(restored_schema_ast) == print_ast(schema_ast)

        test_field = query.fields['testField']
        assert print_ast(test_field.ast_node) == (
            'testField(testArg: TestInput): TestUnion')
        assert print_ast(
            test_field.args['testArg'].ast_node) == ('testArg: TestInput')
        assert print_ast(test_input.fields['testInputField'].ast_node) == (
            'testInputField: TestEnum')
        assert print_ast(
            test_enum.values['TEST_VALUE'].ast_node) == ('TEST_VALUE')
        assert print_ast(test_interface.fields['interfaceField'].ast_node) == (
            'interfaceField: String')
        assert print_ast(
            test_directive.args['arg'].ast_node) == ('arg: TestScalar')
Exemplo n.º 14
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 = extended_twice_schema.get_type('Query')
        some_scalar = extended_twice_schema.get_type('SomeScalar')
        some_enum = extended_twice_schema.get_type('SomeEnum')
        some_union = extended_twice_schema.get_type('SomeUnion')
        some_input = extended_twice_schema.get_type('SomeInput')
        some_interface = extended_twice_schema.get_type('SomeInterface')

        test_input = extended_twice_schema.get_type('TestInput')
        test_enum = extended_twice_schema.get_type('TestEnum')
        test_union = extended_twice_schema.get_type('TestUnion')
        test_interface = extended_twice_schema.get_type('TestInterface')
        test_type = extended_twice_schema.get_type('TestType')
        test_directive = extended_twice_schema.get_directive('test')

        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

        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

        restored_extension_ast = DocumentNode(
            definitions=[
                *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,
                test_input.ast_node,
                test_enum.ast_node,
                test_union.ast_node,
                test_interface.ast_node,
                test_type.ast_node,
                test_directive.ast_node])

        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'
        assert print_ast(some_enum.values['NEW_VALUE'].ast_node) == 'NEW_VALUE'
        assert print_ast(some_enum.values[
            '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'
        assert print_ast(
            test_enum.values['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'
Exemplo n.º 15
0
    def match_order_of_default_types_and_directives():
        schema = GraphQLSchema()
        sdl_schema = build_ast_schema(DocumentNode(definitions=[]))

        assert sdl_schema.directives == schema.directives
        assert sdl_schema.type_map == schema.type_map
    def correctly_assign_ast_nodes():
        schema_ast = parse(
            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
                """))
        schema = build_ast_schema(schema_ast)
        query = schema.get_type("Query")
        query = cast(GraphQLObjectType, query)
        test_input = schema.get_type("TestInput")
        test_input = cast(GraphQLInputObjectType, test_input)
        test_enum = schema.get_type("TestEnum")
        test_enum = cast(GraphQLEnumType, test_enum)
        test_union = schema.get_type("TestUnion")
        test_interface = schema.get_type("TestInterface")
        test_interface = cast(GraphQLInterfaceType, test_interface)
        test_type = schema.get_type("TestType")
        test_scalar = schema.get_type("TestScalar")
        test_directive = schema.get_directive("test")

        restored_schema_ast = DocumentNode(definitions=[
            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,
        ])
        assert print_ast(restored_schema_ast) == print_ast(schema_ast)

        test_field = query.fields["testField"]
        assert print_ast(test_field.ast_node) == (
            "testField(testArg: TestInput): TestUnion")
        assert print_ast(
            test_field.args["testArg"].ast_node) == "testArg: TestInput"
        assert print_ast(test_input.fields["testInputField"].ast_node) == (
            "testInputField: TestEnum")
        assert print_ast(
            test_enum.values["TEST_VALUE"].ast_node) == "TEST_VALUE"
        assert print_ast(test_interface.fields["interfaceField"].ast_node) == (
            "interfaceField: String")
        assert print_ast(
            test_directive.args["arg"].ast_node) == "arg: TestScalar"