def duplicate_op(op_name, l1, c1, l2, c2): return { 'message': UniqueOperationNames.duplicate_operation_name_message(op_name), 'locations': [SourceLocation(l1, c1), SourceLocation(l2, c2)] }
def duplicate_fragment(fragment_name, l1, c1, l2, c2): return { 'message': UniqueFragmentNames.duplicate_fragment_name_message(fragment_name), 'locations': [SourceLocation(l1, c1), SourceLocation(l2, c2)] }
def undefined_var_by_op(var_name, l1, c1, op_name, l2, c2): return { 'message': NoUndefinedVariables.undefined_var_by_op_message(var_name, op_name), 'locations': [ SourceLocation(l1, c1), SourceLocation(l2, c2), ] }
def test_string_non_null_boolean_in_directive(): expect_fails_rule( VariablesInAllowedPosition, ''' query Query($stringVar: String) { dog @include(if: $stringVar) } ''', [{ 'message': VariablesInAllowedPosition.bad_var_pos_message( 'stringVar', 'String', 'Boolean!'), 'locations': [SourceLocation(2, 19), SourceLocation(3, 26)] }])
def test_string_string_fail(): expect_fails_rule( VariablesInAllowedPosition, ''' query Query($stringVar: String) { complicatedArgs { stringListArgField(stringListArg: $stringVar) } } ''', [{ 'message': VariablesInAllowedPosition.bad_var_pos_message( 'stringVar', 'String', '[String]'), 'locations': [SourceLocation(2, 19), SourceLocation(4, 45)] }])
def test_string_over_boolean(): expect_fails_rule( VariablesInAllowedPosition, ''' query Query($stringVar: String) { complicatedArgs { booleanArgField(booleanArg: $stringVar) } } ''', [{ 'message': VariablesInAllowedPosition.bad_var_pos_message( 'stringVar', 'String', 'Boolean'), 'locations': [SourceLocation(2, 19), SourceLocation(4, 39)] }])
def test_int_non_null_int(): expect_fails_rule( VariablesInAllowedPosition, ''' query Query($intArg: Int) { complicatedArgs { nonNullIntArgField(nonNullIntArg: $intArg) } } ''', [{ 'message': VariablesInAllowedPosition.bad_var_pos_message( 'intArg', 'Int', 'Int!'), 'locations': [SourceLocation(4, 45), SourceLocation(2, 19)] }])
def unknown_directive_arg(arg_name, directive_name, line, column): return { 'message': KnownArgumentNames.unknown_directive_arg_message( arg_name, directive_name), 'locations': [SourceLocation(line, column)] }
def missing_field_arg(field_name, arg_name, type_name, line, column): return { 'message': ProvidedNonNullArguments.missing_field_arg_message( field_name, arg_name, type_name), 'locations': [SourceLocation(line, column)] }
def unknown_arg(arg_name, field_name, type_name, line, column): return { 'message': KnownArgumentNames.unknown_arg_message(arg_name, field_name, type_name), 'locations': [SourceLocation(line, column)] }
def test_parse_provides_useful_errors(): with raises(LanguageError) as excinfo: parse("""{""") assert (u'Syntax Error GraphQL (1:2) Expected Name, found EOF\n' u'\n' u'1: {\n' u' ^\n' u'') == excinfo.value.message assert excinfo.value.positions == [1] assert excinfo.value.locations == [SourceLocation(line=1, column=2)] with raises(LanguageError) as excinfo: parse("""{ ...MissingOn } fragment MissingOn Type """) assert 'Syntax Error GraphQL (2:20) Expected "on", found Name "Type"' in str( excinfo.value) with raises(LanguageError) as excinfo: parse('{ field: {} }') assert 'Syntax Error GraphQL (1:10) Expected Name, found {' in str( excinfo.value) with raises(LanguageError) as excinfo: parse('notanoperation Foo { field }') assert 'Syntax Error GraphQL (1:1) Unexpected Name "notanoperation"' in str( excinfo.value) with raises(LanguageError) as excinfo: parse('...') assert 'Syntax Error GraphQL (1:1) Unexpected ...' in str(excinfo.value)
def non_input_type_on_variable(variable_name, type_name, line, col): return { 'message': VariablesAreInputTypes.non_input_type_on_variable_message( variable_name, type_name), 'locations': [SourceLocation(line, col)] }
def fragment_on_non_composite_error(frag_name, type_name, line, column): return { 'message': FragmentsOnCompositeTypes.fragment_on_non_composite_error_message( frag_name, type_name), 'locations': [SourceLocation(line, column)] }
def bad_value(var_name, type_name, value, line, column): return { 'message': DefaultValuesOfCorrectType.bad_value_for_default_arg_message( var_name, type_name, value), 'locations': [SourceLocation(line, column)] }
def error(frag_name, parent_type, frag_type, line, column): return { 'message': PossibleFragmentSpreads.type_incompatible_spread_message( frag_name, parent_type, frag_type), 'locations': [SourceLocation(line, column)] }
def default_for_non_null_arg(var_name, type_name, guess_type_name, line, column): return { 'message': DefaultValuesOfCorrectType.default_for_non_null_arg_message( var_name, type_name, guess_type_name), 'locations': [SourceLocation(line, column)] }
def bad_value(arg_name, type_name, value, line, column, errors=None): if not errors: errors = [u'Expected type "{}", found {}.'.format(type_name, value)] return { 'message': ArgumentsOfCorrectType.bad_value_message(arg_name, type_name, value, errors), 'locations': [SourceLocation(line, column)] }
def test_int_non_null_int_within_fragment(): expect_fails_rule( VariablesInAllowedPosition, ''' fragment nonNullIntArgFieldFrag on ComplicatedArgs { nonNullIntArgField(nonNullIntArg: $intArg) } query Query($intArg: Int) { complicatedArgs { ...nonNullIntArgFieldFrag } } ''', [{ 'message': VariablesInAllowedPosition.bad_var_pos_message( 'intArg', 'Int', 'Int!'), 'locations': [SourceLocation(5, 19), SourceLocation(3, 43)] }])
def bad_value(var_name, type_name, value, line, column, errors=None): if not errors: errors = ['Expected type "{}", found {}.'.format(type_name, value)] return { 'message': DefaultValuesOfCorrectType.bad_value_for_default_arg_message( var_name, type_name, value, errors), 'locations': [SourceLocation(line, column)] }
def test_scalar_is_invalid_inline_fragment_type(): expect_fails_rule( FragmentsOnCompositeTypes, ''' fragment invalidFragment on Pet { ... on String { barks } } ''', [{ 'message': FragmentsOnCompositeTypes.inline_message('String'), 'locations': [SourceLocation(3, 16)] }])
def test_output_types_are_invalid(): expect_fails_rule( VariablesAreInputTypes, ''' query Foo($a: Dog, $b: [[CatOrDog!]]!, $c: Pet) { field(a: $a, b: $b, c: $c) } ''', [ { 'locations': [SourceLocation(2, 21)], 'message': VariablesAreInputTypes.message('a', 'Dog') }, { 'locations': [SourceLocation(2, 30)], 'message': VariablesAreInputTypes.message( 'b', '[[CatOrDog!]]!') }, { 'locations': [SourceLocation(2, 50)], 'message': VariablesAreInputTypes.message('c', 'Pet') }, ])
def test_boolean_non_null_boolean_in_directive(): expect_fails_rule( VariablesInAllowedPosition, ''' query Query($boolVar: Boolean) { dog @include(if: $boolVar) } ''', [{ 'message': VariablesInAllowedPosition.bad_var_pos_message( 'boolVar', 'Boolean', 'Boolean!'), 'locations': [SourceLocation(4, 26)] }])
def test_fails_as_expected_on_the_type_root_field_without_an_arg(): TestType = GraphQLObjectType('TestType', {'testField': GraphQLField(GraphQLString)}) schema = GraphQLSchema(TestType) request = ''' { __type { name } }''' result = graphql(schema, request) expected_error = { 'message': ProvidedNonNullArguments.missing_field_arg_message( '__type', 'name', 'String!'), 'locations': [SourceLocation(line=3, column=9)] } assert (expected_error in [format_error(error) for error in result.errors])
def unknown_directive(directive_name, line, column): return { 'message': KnownDirectives.unknown_directive_message(directive_name), 'locations': [SourceLocation(line, column)] }
def misplaced_directive(directive_name, placement, line, column): return { 'message': KnownDirectives.misplaced_directive_message(directive_name, placement), 'locations': [SourceLocation(line, column)] }
def unknown_type(type_name, line, column): return { 'message': KnownTypeNames.message(type_name), 'locations': [SourceLocation(line, column)] }
def undefined_fragment(fragment_name, line, column): return { 'message': KnownFragmentNames.unknown_fragment_message(fragment_name), 'locations': [SourceLocation(line, column)] }
def anon_not_alone(line, column): return { 'message': LoneAnonymousOperation.anonymous_operation_not_alone_message(), 'locations': [SourceLocation(line, column)] }
def unused_fragment(fragment_name, line, column): return { 'message': NoUnusedFragments.unused_fragment_message(fragment_name), 'locations': [SourceLocation(line, column)] }
def unused_variable(variable_name, line, column): return { 'message': NoUnusedVariables.unused_variable_message(variable_name), 'locations': [SourceLocation(line, column)] }