def test_simple_non_null_type(): body = ''' type Hello { world: String! }''' doc = parse(body) loc = create_loc_fn(body) expected = ast.Document(definitions=[ ast.ObjectTypeDefinition( name=ast.Name(value='Hello', loc=loc(6, 11)), interfaces=[], directives=[], fields=[ ast.FieldDefinition(name=ast.Name(value='world', loc=loc(16, 21)), arguments=[], type=ast.NonNullType(type=ast.NamedType( name=ast.Name(value='String', loc=loc(23, 29)), loc=loc(23, 29)), loc=loc(23, 30)), directives=[], loc=loc(16, 30)) ], loc=loc(1, 32)) ], loc=loc(1, 32)) assert doc == expected
def _get_basic_schema_ast(query_type): """Create a basic AST Document representing a nearly blank schema. The output AST contains a single query type, whose name is the input string. The query type is guaranteed to be the second entry of Document definitions, after the schema definition. The query type has no fields. Args: query_type: str, name of the query type for the schema Returns: Document, representing a nearly blank schema """ blank_ast = ast_types.Document(definitions=[ ast_types.SchemaDefinition( operation_types=[ ast_types.OperationTypeDefinition( operation='query', type=ast_types.NamedType(name=ast_types.Name( value=query_type)), ) ], directives=[], ), ast_types.ObjectTypeDefinition( name=ast_types.Name(value=query_type), fields=[], interfaces=[], directives=[], ), ]) return blank_ast
def test_parses_simple_type(): # type: () -> None body = """ type Hello { world: String }""" doc = parse(body) loc = create_loc_fn(body) expected = ast.Document( definitions=[ ast.ObjectTypeDefinition( name=ast.Name(value="Hello", loc=loc(6, 11)), interfaces=[], directives=[], fields=[ ast.FieldDefinition( name=ast.Name(value="world", loc=loc(16, 21)), arguments=[], type=ast.NamedType( name=ast.Name(value="String", loc=loc(23, 29)), loc=loc(23, 29), ), directives=[], loc=loc(16, 29), ) ], loc=loc(1, 31), ) ], loc=loc(1, 31), ) assert doc == expected
def test_parses_simple_extension(): body = ''' extend type Hello { world: String }''' doc = parse(body) loc = create_loc_fn(body) expected = ast.Document(definitions=[ ast.TypeExtensionDefinition(definition=ast.ObjectTypeDefinition( name=ast.Name(value='Hello', loc=loc(13, 18)), interfaces=[], directives=[], fields=[ ast.FieldDefinition(name=ast.Name(value='world', loc=loc(23, 28)), arguments=[], type=ast.NamedType(name=ast.Name( value='String', loc=loc(30, 36)), loc=loc(30, 36)), directives=[], loc=loc(23, 36)) ], loc=loc(8, 38)), loc=loc(1, 38)) ], loc=loc(1, 38)) assert doc == expected
def test_parses_simple_field_with_list_arg(): body = ''' type Hello { world(things: [String]): String }''' loc = create_loc_fn(body) doc = parse(body) expected = ast.Document(definitions=[ ast.ObjectTypeDefinition( name=ast.Name(value='Hello', loc=loc(6, 11)), interfaces=[], fields=[ ast.FieldDefinition( name=ast.Name(value='world', loc=loc(16, 21)), arguments=[ ast.InputValueDefinition( name=ast.Name(value='things', loc=loc(22, 28)), type=ast.ListType(type=ast.NamedType( name=ast.Name(value='String', loc=loc(31, 37)), loc=loc(31, 37)), loc=loc(30, 38)), default_value=None, loc=loc(22, 38)) ], type=ast.NamedType(name=ast.Name(value='String', loc=loc(41, 47)), loc=loc(41, 47)), loc=loc(16, 47)) ], loc=loc(1, 49)) ], loc=loc(1, 49)) assert doc == expected
def test_parses_simple_field_with_arg_with_default_value(): body = ''' type Hello { world(flag: Boolean = true): String }''' loc = create_loc_fn(body) doc = parse(body) expected = ast.Document(definitions=[ ast.ObjectTypeDefinition( name=ast.Name(value='Hello', loc=loc(6, 11)), interfaces=[], fields=[ ast.FieldDefinition( name=ast.Name(value='world', loc=loc(16, 21)), arguments=[ ast.InputValueDefinition( name=ast.Name(value='flag', loc=loc(22, 26)), type=ast.NamedType(name=ast.Name(value='Boolean', loc=loc(28, 35)), loc=loc(28, 35)), default_value=ast.BooleanValue(value=True, loc=loc(38, 42)), loc=loc(22, 42)) ], type=ast.NamedType(name=ast.Name(value='String', loc=loc(45, 51)), loc=loc(45, 51)), loc=loc(16, 51)) ], loc=loc(1, 53)) ], loc=loc(1, 53)) assert doc == expected
def test_parses_simple_type_inheriting_multiple_interfaces(): # type: () -> None body = "type Hello implements Wo & rld { }" loc = create_loc_fn(body) doc = parse(body) expected = ast.Document( definitions=[ ast.ObjectTypeDefinition( name=ast.Name(value="Hello", loc=loc(5, 10)), interfaces=[ ast.NamedType( name=ast.Name(value="Wo", loc=loc(22, 24)), loc=loc(22, 24) ), ast.NamedType( name=ast.Name(value="rld", loc=loc(26, 29)), loc=loc(26, 29) ), ], directives=[], fields=[], loc=loc(0, 33), ) ], loc=loc(0, 33), ) assert doc == expected
def test_parses_simple_field_with_two_args(): # type: () -> None body = """ type Hello { world(argOne: Boolean, argTwo: Int): String }""" loc = create_loc_fn(body) doc = parse(body) expected = ast.Document( definitions=[ ast.ObjectTypeDefinition( name=ast.Name(value="Hello", loc=loc(6, 11)), interfaces=[], directives=[], fields=[ ast.FieldDefinition( name=ast.Name(value="world", loc=loc(16, 21)), arguments=[ ast.InputValueDefinition( name=ast.Name(value="argOne", loc=loc(22, 28)), type=ast.NamedType( name=ast.Name(value="Boolean", loc=loc(30, 37)), loc=loc(30, 37), ), default_value=None, directives=[], loc=loc(22, 37), ), ast.InputValueDefinition( name=ast.Name(value="argTwo", loc=loc(39, 45)), type=ast.NamedType( name=ast.Name(value="Int", loc=loc(47, 50)), loc=loc(47, 50), ), default_value=None, directives=[], loc=loc(39, 50), ), ], type=ast.NamedType( name=ast.Name(value="String", loc=loc(53, 59)), loc=loc(53, 59), ), directives=[], loc=loc(16, 59), ) ], loc=loc(1, 61), ) ], loc=loc(1, 61), ) assert doc == expected
def test_parses_simple_field_with_list_arg(): # type: () -> None body = """ type Hello { world(things: [String]): String }""" loc = create_loc_fn(body) doc = parse(body) expected = ast.Document( definitions=[ ast.ObjectTypeDefinition( name=ast.Name(value="Hello", loc=loc(6, 11)), interfaces=[], directives=[], fields=[ ast.FieldDefinition( name=ast.Name(value="world", loc=loc(16, 21)), arguments=[ ast.InputValueDefinition( name=ast.Name(value="things", loc=loc(22, 28)), type=ast.ListType( type=ast.NamedType( name=ast.Name(value="String", loc=loc(31, 37)), loc=loc(31, 37), ), loc=loc(30, 38), ), default_value=None, directives=[], loc=loc(22, 38), ) ], type=ast.NamedType( name=ast.Name(value="String", loc=loc(41, 47)), loc=loc(41, 47), ), directives=[], loc=loc(16, 47), ) ], loc=loc(1, 49), ) ], loc=loc(1, 49), ) assert doc == expected
def test_parses_simple_field_with_arg_with_default_value(): # type: () -> None body = """ type Hello { world(flag: Boolean = true): String }""" loc = create_loc_fn(body) doc = parse(body) expected = ast.Document( definitions=[ ast.ObjectTypeDefinition( name=ast.Name(value="Hello", loc=loc(6, 11)), interfaces=[], directives=[], fields=[ ast.FieldDefinition( name=ast.Name(value="world", loc=loc(16, 21)), arguments=[ ast.InputValueDefinition( name=ast.Name(value="flag", loc=loc(22, 26)), type=ast.NamedType( name=ast.Name(value="Boolean", loc=loc(28, 35)), loc=loc(28, 35), ), default_value=ast.BooleanValue(value=True, loc=loc(38, 42)), directives=[], loc=loc(22, 42), ) ], type=ast.NamedType( name=ast.Name(value="String", loc=loc(45, 51)), loc=loc(45, 51), ), directives=[], loc=loc(16, 51), ) ], loc=loc(1, 53), ) ], loc=loc(1, 53), ) assert doc == expected
def test_parses_simple_type_inheriting_multiple_interfaces(): body = 'type Hello implements Wo, rld { }' loc = create_loc_fn(body) doc = parse(body) expected = ast.Document(definitions=[ ast.ObjectTypeDefinition( name=ast.Name(value='Hello', loc=loc(5, 10)), interfaces=[ ast.NamedType(name=ast.Name(value='Wo', loc=loc(22, 24)), loc=loc(22, 24)), ast.NamedType(name=ast.Name(value='rld', loc=loc(26, 29)), loc=loc(26, 29)) ], fields=[], loc=loc(0, 33)) ], loc=loc(0, 33)) assert doc == expected
def test_parses_simple_field_with_two_args(): body = ''' type Hello { world(argOne: Boolean, argTwo: Int): String }''' loc = create_loc_fn(body) doc = parse(body) expected = ast.Document(definitions=[ ast.ObjectTypeDefinition( name=ast.Name(value='Hello', loc=loc(6, 11)), interfaces=[], directives=[], fields=[ ast.FieldDefinition( name=ast.Name(value='world', loc=loc(16, 21)), arguments=[ ast.InputValueDefinition( name=ast.Name(value='argOne', loc=loc(22, 28)), type=ast.NamedType(name=ast.Name(value='Boolean', loc=loc(30, 37)), loc=loc(30, 37)), default_value=None, directives=[], loc=loc(22, 37)), ast.InputValueDefinition( name=ast.Name(value='argTwo', loc=loc(39, 45)), type=ast.NamedType(name=ast.Name(value='Int', loc=loc(47, 50)), loc=loc(47, 50)), default_value=None, directives=[], loc=loc(39, 50)) ], type=ast.NamedType(name=ast.Name(value='String', loc=loc(53, 59)), loc=loc(53, 59)), directives=[], loc=loc(16, 59)) ], loc=loc(1, 61)) ], loc=loc(1, 61)) assert doc == expected
def test_parses_simple_extension(): # type: () -> None body = """ extend type Hello { world: String }""" doc = parse(body) loc = create_loc_fn(body) expected = ast.Document( definitions=[ ast.TypeExtensionDefinition( definition=ast.ObjectTypeDefinition( name=ast.Name(value="Hello", loc=loc(13, 18)), interfaces=[], directives=[], fields=[ ast.FieldDefinition( name=ast.Name(value="world", loc=loc(23, 28)), arguments=[], type=ast.NamedType( name=ast.Name(value="String", loc=loc(30, 36)), loc=loc(30, 36), ), directives=[], loc=loc(23, 36), ) ], loc=loc(8, 38), ), loc=loc(1, 38), ) ], loc=loc(1, 38), ) assert doc == expected