def test_parser_mutation(self): query = """ mutation CreateHero { createHero { hero { name } ok } } """ parser = QueryParser(self.swapi_schema) parsed = parser.parse(query) expected = asdict( ParsedQuery( query=query, objects=[ ParsedOperation( name='CreateHero', type='mutation', children=[ ParsedObject( name='CreateHeroData', fields=[ ParsedField(name='createHero', type='CreateHeroPayload', nullable=True) ], children=[ ParsedObject( name='CreateHeroPayload', fields=[ ParsedField(name='hero', type='Hero', nullable=True), ParsedField(name='ok', type='bool', nullable=True) ], children=[ ParsedObject( name='Hero', fields=[ ParsedField(name='name', type='str', nullable=False) ]) ]) ]) ]) ])) parsed_dict = asdict(parsed) assert bool(parsed) assert parsed_dict == expected, str(DeepDiff(parsed_dict, expected))
def test_parser_query_with_variables(self): query = """ query GetFilm($theFilmID: ID!) { returnOfTheJedi: film(id: $theFilmID) { title director } } """ parser = QueryParser(self.swapi_schema) parsed = parser.parse(query) expected = asdict( ParsedQuery( query=query, objects=[ ParsedOperation( name='GetFilm', type='query', variables=[ ParsedVariableDefinition(name='theFilmID', type='str', nullable=False, is_list=False) ], children=[ ParsedObject( name='GetFilmData', fields=[ ParsedField(name='returnOfTheJedi', type='Film', nullable=True) ], children=[ ParsedObject( name='Film', fields=[ ParsedField(name='title', type='str', nullable=False), ParsedField(name='director', type='str', nullable=False), ]) ]) ]) ])) parsed_dict = asdict(parsed) assert bool(parsed) assert parsed_dict == expected, str(DeepDiff(parsed_dict, expected))
def test_parser_query_inline_fragment(self): query = """ query GetFilm { returnOfTheJedi: film(id: "1") { ... on Film { title director } } } """ parser = QueryParser(self.swapi_schema) parsed = parser.parse(query) expected = asdict( ParsedQuery( query=query, objects=[ ParsedOperation( name='GetFilm', type='query', children=[ ParsedObject( name='GetFilmData', fields=[ ParsedField(name='returnOfTheJedi', type='Film', nullable=True) ], children=[ ParsedObject( name='Film', fields=[ ParsedField(name='title', type='str', nullable=False), ParsedField(name='director', type='str', nullable=False), ]) ], ) ]) ])) parsed_dict = asdict(parsed) assert bool(parsed) assert parsed_dict == expected, str(DeepDiff(parsed_dict, expected))
def test_parser_query_with_enums(self): query = """ query MyIssues { viewer { issues(first: 5) { edges { node { author { login } authorAssociation } } } } } """ parsed = self.github_parser.parse(query) issue_child = ParsedObject( name='Issue', fields=[ ParsedField(name='author', type='Actor', nullable=True), ParsedField(name='authorAssociation', type='CommentAuthorAssociation', nullable=False) ], children=[ ParsedObject(name='Actor', fields=[ ParsedField(name='login', type='str', nullable=False) ]) ]) child = ParsedObject( name='MyIssuesData', fields=[ParsedField(name='viewer', type='User', nullable=False)], children=[ ParsedObject(name='User', fields=[ ParsedField(name='issues', type='IssueConnection', nullable=False) ], children=[ ParsedObject( name='IssueConnection', fields=[ ParsedField(name='edges', type='List[IssueEdge]', nullable=True) ], children=[ ParsedObject(name='IssueEdge', fields=[ ParsedField( name='node', type='Issue', nullable=True) ], children=[ issue_child, ]) ]) ]) ]) expected = asdict( ParsedQuery(query=query, enums=[ ParsedEnum(name='CommentAuthorAssociation', values={ 'MEMBER': 'MEMBER', 'OWNER': 'OWNER', 'COLLABORATOR': 'COLLABORATOR', 'CONTRIBUTOR': 'CONTRIBUTOR', 'FIRST_TIME_CONTRIBUTOR': 'FIRST_TIME_CONTRIBUTOR', 'FIRST_TIMER': 'FIRST_TIMER', 'NONE': 'NONE' }) ], objects=[ ParsedOperation(name='MyIssues', type='query', children=[ child, ]) ])) parsed_dict = asdict(parsed) assert bool(parsed) assert parsed_dict == expected, str(DeepDiff(parsed_dict, expected))
def test_parser_connection_query(self): query = """ query GetAllFilms { allFilms { count: totalCount edges { node { id title director } } } allHeroes { edges { node { ...HeroFields } } } } fragment HeroFields on Hero { id name } """ parser = QueryParser(self.swapi_schema) parsed = parser.parse(query) expected = asdict( ParsedQuery( query=query, objects=[ ParsedOperation( name='GetAllFilms', type='query', children=[ ParsedObject( name='GetAllFilmsData', fields=[ ParsedField(name='allFilms', type='FilmConnection', nullable=True), ParsedField(name='allHeroes', type='HeroConnection', nullable=True) ], children=[ ParsedObject( name='FilmConnection', fields=[ ParsedField(name='count', type='int', nullable=True), ParsedField(name='edges', type='List[FilmEdge]', nullable=True), ], children=[ ParsedObject( name='FilmEdge', fields=[ ParsedField(name='node', type='Film', nullable=True) ], children=[ ParsedObject( name='Film', fields=[ ParsedField( name='id', type='str', nullable=False ), ParsedField( name='title', type='str', nullable=False ), ParsedField( name='director', type='str', nullable=False) ]) ]) ]), ParsedObject( name='HeroConnection', fields=[ ParsedField(name='edges', type='List[HeroEdge]', nullable=True), ], children=[ ParsedObject( name='HeroEdge', fields=[ ParsedField(name='node', type='Hero', nullable=True) ], children=[ ParsedObject( name='Hero', parents=['HeroFields'], fields=[]) ]) ]), ], ), ]), ParsedObject( name='HeroFields', fields=[ ParsedField(name='id', type='str', nullable=False), ParsedField(name='name', type='str', nullable=False), ], ) ])) parsed_dict = asdict(parsed) assert bool(parsed) assert parsed_dict == expected, str(DeepDiff(parsed_dict, expected))
def test_parser_query_complex_fragment(self): query = """ query GetPerson { luke: character(id: "luke") { ...CharacterFields } } fragment CharacterFields on Person { name home: homeworld { name } } """ parser = QueryParser(self.swapi_schema) parsed = parser.parse(query) expected = asdict( ParsedQuery( query=query, objects=[ ParsedOperation( name='GetPerson', type='query', children=[ ParsedObject( name='GetPersonData', fields=[ ParsedField(name='luke', type='Person', nullable=True) ], children=[ ParsedObject(name='Person', parents=['CharacterFields'], fields=[]) ], ), ]), ParsedObject(name='CharacterFields', fields=[ ParsedField(name='name', type='str', nullable=False), ParsedField(name='home', type='Planet', nullable=False), ], children=[ ParsedObject(name='Planet', fields=[ ParsedField( name='name', type='str', nullable=False), ]) ]) ])) parsed_dict = asdict(parsed) assert bool(parsed) assert parsed_dict == expected, str(DeepDiff(parsed_dict, expected))