def test_hero_name_and_episodes(starwars_data): document = ''' { hero { name appears_in { name number } } } ''' assert schema.execute(document) == { 'data': { 'hero': { 'name': 'R2-D2', 'appears_in': [ { 'name': 'A New Hope', 'number': 4 }, { 'name': 'The Empire Strikes Back', 'number': 5 }, ] }, } }
def test_fragments__inline(starwars_data): document = ''' { hero { ... on Character { id name } } episodes { ... on Episode { name number } } } ''' assert schema.execute(document) == { 'data': { 'episodes': [ { 'name': 'A New Hope', 'number': 4, }, { 'name': 'The Empire Strikes Back', 'number': 5, }, ], 'hero': { 'name': 'R2-D2', 'id': 2001, }, }, }
def test_fragments__recursive(starwars_data): document = ''' { hero { ...heroIdFragment } } fragment heroIdFragment on Character { id ...heroNameFragment } fragment heroNameFragment on Character { name ...heroIdFragment } ''' assert schema.execute(document) == { 'data': { 'hero': { 'name': 'R2-D2', 'id': 2001, }, }, }
def test_hero_name_and_friends_names(starwars_data): document = ''' { hero { name friends { name } } } ''' assert schema.execute(document) == { 'data': { 'hero': { 'name': 'R2-D2', 'friends': [ { 'name': 'Luke Skywalker', }, { 'name': 'Han Solo', }, { 'name': 'Leia Organa', }, { 'name': 'C-3PO', }, ], }, } }
def test_hero_name(starwars_data): document = ''' { hero { name } } ''' assert schema.execute(document) == { 'data': { 'hero': { 'name': 'R2-D2', }, } }
def test_query_missing_variable_no_default(starwars_data): document = ''' query Episodes($episode: Int) { episodes(number: $episode) { number } } ''' assert schema.execute(document) == { 'data': { 'episodes': [{ 'number': 4 }, { 'number': 5 }] } }
def test_episodes_and_droids(starwars_data): document = ''' { episodes { name number characters (types: "droid") { name } } } ''' assert schema.execute(document) == { 'data': { 'episodes': [ { 'name': 'A New Hope', 'number': 4, 'characters': [ { 'name': 'C-3PO' }, { 'name': 'R2-D2' }, ] }, { 'name': 'The Empire Strikes Back', 'number': 5, 'characters': [ { 'name': 'C-3PO' }, { 'name': 'R2-D2' }, ] }, ] } }
def test_episode_and_characters(starwars_data): document = ''' { episode(number: 5) { name number characters (type: ["human", "droid"]) { name } } } ''' assert schema.execute(document) == { 'data': { 'episode': { 'name': 'The Empire Strikes Back', 'number': 5, 'characters': [ { 'name': 'Luke Skywalker' }, { 'name': 'Darth Vader' }, { 'name': 'Han Solo' }, { 'name': 'Leia Organa' }, { 'name': 'C-3PO' }, { 'name': 'R2-D2' }, ] }, } }
def test_query_episodes_and_droids(starwars_data): document = ''' query EpisodesAndCharacterType($type: String) { episodes { name number characters (types: $type) { name } } } ''' assert schema.execute(document, {"type": "droid"}) == { 'data': { 'episodes': [ { 'name': 'A New Hope', 'number': 4, 'characters': [ { 'name': 'C-3PO' }, { 'name': 'R2-D2' }, ] }, { 'name': 'The Empire Strikes Back', 'number': 5, 'characters': [ { 'name': 'C-3PO' }, { 'name': 'R2-D2' }, ] }, ] } }
def test_execute__introspect_directives(): document = '''{ __schema { directives { name description locations args { ...InputValue } } } } ''' assert schema.execute(document) == { 'data': { '__schema': { 'directives': [], }, }, }
def test_execute__filter_type(): document = '''{ __type (name: Character) { name kind fields { name } } } ''' assert schema.execute(document) == { 'data': { '__type': { 'name': 'Character', 'kind': 'OBJECT', 'fields': [ { 'name': 'appears_in' }, { 'name': 'best_friend' }, { 'name': 'friends' }, { 'name': 'id' }, { 'name': 'name' }, ], } } }
def test_blank_query(starwars_data): query = '' with pytest.raises(Exception): schema.execute(query)
def test_episode_name_field_description(starwars_data): document = """ query IntrospectionQuery { __schema { queryType { name } mutationType { name } types { ...FullType } directives { name description locations args { ...InputValue } } } } fragment FullType on __Type { kind name description fields(includeDeprecated: true) { name description args { ...InputValue } type { ...TypeRef } isDeprecated deprecationReason } inputFields { ...InputValue } interfaces { ...TypeRef } enumValues(includeDeprecated: true) { name description isDeprecated deprecationReason } possibleTypes { ...TypeRef } } fragment InputValue on __InputValue { name description type { ...TypeRef } defaultValue } fragment TypeRef on __Type { kind name ofType { kind name ofType { kind name ofType { kind name ofType { kind name ofType { kind name ofType { kind name ofType { kind name } } } } } } } }""" response = schema.execute(document) types = response['data']['__schema']['types'] episodes = [type_ for type_ in types if type_['name'] == 'Episode'][0] name_field = [ field for field in episodes['fields'] if field['name'] == 'name' ][0] assert name_field['description'] == 'The name of an episode'