def should_not_flag_args_with_the_same_type_signature_as_breaking(): old_schema = build_schema(""" input InputType1 { field1: String } type Type1 { field1(arg1: Int!, arg2: InputType1): Int } type Query { field1: String } """) new_schema = build_schema(""" input InputType1 { field1: String } type Type1 { field1(arg1: Int!, arg2: InputType1): Int } type Query { field1: String } """) assert find_arg_changes(old_schema, new_schema).breaking_changes == []
def should_detect_if_an_arguments_default_value_has_changed(): old_schema = build_schema(""" type Type1 { field1(name: String = "test"): String } type Query { field1: String } """) new_schema = build_schema(""" type Type1 { field1(name: String = "Test"): String } type Query { field1: String } """) assert find_arg_changes( old_schema, new_schema).dangerous_changes == [( DangerousChangeType.ARG_DEFAULT_VALUE_CHANGE, "Type1.field1 arg name has changed defaultValue", )]
def should_detect_if_an_optional_field_argument_was_added(): old_schema = build_schema(""" type Type1 { field1(arg1: String): String } type Query { field1: String } """) new_schema = build_schema(""" type Type1 { field1(arg1: String, arg2: String): String } type Query { field1: String } """) assert find_arg_changes(old_schema, new_schema).dangerous_changes == [( DangerousChangeType.OPTIONAL_ARG_ADDED, "An optional arg arg2 on Type1.field1 was added", )]
def should_detect_if_a_required_field_argument_was_added(): old_schema = build_schema(""" type Type1 { field1(arg1: String): String } type Query { field1: String } """) new_schema = build_schema(""" type Type1 { field1( arg1: String, newRequiredArg: String! newOptionalArg1: Int newOptionalArg2: Int! = 0 ): String } type Query { field1: String } """) assert find_arg_changes(old_schema, new_schema).breaking_changes == [( BreakingChangeType.REQUIRED_ARG_ADDED, "A required arg newRequiredArg on Type1.field1 was added", )]
def should_detect_if_a_non_null_field_argument_was_added(): old_schema = build_schema(""" type Type1 { field1(arg1: String): String } type Query { field1: String } """) new_schema = build_schema(""" type Type1 { field1(arg1: String, newRequiredArg: String!, newOptionalArg: Int): String } type Query { field1: String } """) # noqa assert find_arg_changes(old_schema, new_schema).breaking_changes == [ (BreakingChangeType.NON_NULL_ARG_ADDED, 'A non-null arg newRequiredArg on Type1.field1 was added') ]
def should_detect_if_a_nullable_field_argument_was_added(): old_schema = build_schema(""" type Type1 { field1(arg1: String): String } type Query { field1: String } """) new_schema = build_schema(""" type Type1 { field1(arg1: String, arg2: String): String } type Query { field1: String } """) assert find_arg_changes(old_schema, new_schema).dangerous_changes == [ (DangerousChangeType.NULLABLE_ARG_ADDED, 'A nullable arg arg2 on Type1.field1 was added') ]
def should_consider_args_that_move_away_from_non_null_as_non_breaking(): old_schema = build_schema( """ type Type1 { field1(name: String!): String } type Query { field1: String } """ ) new_schema = build_schema( """ type Type1 { field1(name: String): String } type Query { field1: String } """ ) assert find_arg_changes(old_schema, new_schema).breaking_changes == []
def should_detect_if_a_field_argument_was_removed(): old_schema = build_schema( """ input InputType1 { field1: String } interface Interface1 { field1(arg1: Boolean, objectArg: InputType1): String } type Type1 { field1(name: String): String } type Query { field1: String } """ ) new_schema = build_schema( """ interface Interface1 { field1: String } type Type1 { field1: String } type Query { field1: String } """ ) assert find_arg_changes(old_schema, new_schema).breaking_changes == [ (BreakingChangeType.ARG_REMOVED, "Interface1.field1 arg arg1 was removed"), ( BreakingChangeType.ARG_REMOVED, "Interface1.field1 arg objectArg was removed", ), (BreakingChangeType.ARG_REMOVED, "Type1.field1 arg name was removed"), ]
def should_detect_if_a_field_argument_has_changed_type(): old_schema = build_schema(""" type Type1 { field1( arg1: String arg2: String arg3: [String] arg4: String arg5: String! arg6: String! arg7: [Int]! arg8: Int arg9: [Int] arg10: [Int!] arg11: [Int] arg12: [[Int]] arg13: Int! arg14: [[Int]!] arg15: [[Int]!] ): String } type Query { field1: String } """) new_schema = build_schema(""" type Type1 { field1( arg1: Int arg2: [String] arg3: String arg4: String! arg5: Int arg6: Int! arg7: [Int] arg8: [Int]! arg9: [Int!] arg10: [Int] arg11: [[Int]] arg12: [Int] arg13: [Int]! arg14: [[Int]] arg15: [[Int!]!] ): String } type Query { field1: String } """) assert find_arg_changes(old_schema, new_schema).breaking_changes == [ ( BreakingChangeType.ARG_CHANGED_KIND, "Type1.field1 arg arg1 has changed type from String to Int", ), ( BreakingChangeType.ARG_CHANGED_KIND, "Type1.field1 arg arg2 has changed type from String to [String]", ), ( BreakingChangeType.ARG_CHANGED_KIND, "Type1.field1 arg arg3 has changed type from [String] to String", ), ( BreakingChangeType.ARG_CHANGED_KIND, "Type1.field1 arg arg4 has changed type from String to String!", ), ( BreakingChangeType.ARG_CHANGED_KIND, "Type1.field1 arg arg5 has changed type from String! to Int", ), ( BreakingChangeType.ARG_CHANGED_KIND, "Type1.field1 arg arg6 has changed type from String! to Int!", ), ( BreakingChangeType.ARG_CHANGED_KIND, "Type1.field1 arg arg8 has changed type from Int to [Int]!", ), ( BreakingChangeType.ARG_CHANGED_KIND, "Type1.field1 arg arg9 has changed type from [Int] to [Int!]", ), ( BreakingChangeType.ARG_CHANGED_KIND, "Type1.field1 arg arg11 has changed type from [Int] to [[Int]]", ), ( BreakingChangeType.ARG_CHANGED_KIND, "Type1.field1 arg arg12 has changed type from [[Int]] to [Int]", ), ( BreakingChangeType.ARG_CHANGED_KIND, "Type1.field1 arg arg13 has changed type from Int! to [Int]!", ), ( BreakingChangeType.ARG_CHANGED_KIND, "Type1.field1 arg arg15 has changed type from [[Int]!] to [[Int!]!]", ), ]