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
                    },
                ]
            },
        }
    }
Beispiel #2
0
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,
            },
        },
    }
Beispiel #3
0
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,
            },
        },
    }
Beispiel #4
0
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',
            },
        }
    }
Beispiel #6
0
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
            }]
        }
    }
Beispiel #7
0
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'
                        },
                    ]
                },
            ]
        }
    }
Beispiel #8
0
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'
                    },
                ]
            },
        }
    }
Beispiel #9
0
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'
                        },
                    ]
                },
            ]
        }
    }
Beispiel #10
0
def test_execute__introspect_directives():
    document = '''{
        __schema {
            directives {
                name
                description
                locations
                args {
                    ...InputValue
                }
            }
        }
    }
    '''
    assert schema.execute(document) == {
        'data': {
            '__schema': {
                'directives': [],
            },
        },
    }
Beispiel #11
0
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)
Beispiel #13
0
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'