def enter(*args): parent_type = type_info.get_parent_type() type_ = type_info.get_type() input_type = type_info.get_input_type() node = args[0] visited.append( ( "enter", node.kind, node.value if node.kind == "name" else None, str(parent_type) if parent_type else None, str(type_) if type_ else None, str(input_type) if input_type else None, ) ) # Make a query valid by adding missing selection sets. if ( node.kind == "field" and not node.selection_set and is_composite_type(get_named_type(type_)) ): return FieldNode( alias=node.alias, name=node.name, arguments=node.arguments, directives=node.directives, selection_set=SelectionSetNode( selections=[FieldNode(name=NameNode(value="__typename"))] ), )
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())
def converts_recursive_ast_to_recursive_dict(): field = FieldNode(name="foo", arguments=(), selection_set=()) ast = SelectionSetNode(selections=(field, )) field.selection_set = ast res = ast_to_dict(ast) assert res == { "kind": "selection_set", "selections": [{ "kind": "field", "name": "foo", "alias": None, "arguments": [], "directives": None, "selection_set": res, }], }
def produces_helpful_error_messages(): bad_ast = {"random": "Data"} with raises(TypeError) as exc_info: # noinspection PyTypeChecker print_ast(bad_ast) # type: ignore assert str(exc_info.value) == "Not an AST Node: {'random': 'Data'}." corrupt_ast = FieldNode(name="random data") with raises(TypeError) as exc_info: print_ast(corrupt_ast) assert str(exc_info.value) == "Invalid AST Node: 'random data'."
def prints_minimal_ast(): ast = FieldNode(name=NameNode(value="foo")) assert print_ast(ast) == "foo"