Beispiel #1
0
    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 == []
Beispiel #2
0
        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",
                )]
Beispiel #3
0
    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",
        )]
Beispiel #4
0
    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",
        )]
Beispiel #5
0
    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')
        ]
Beispiel #6
0
    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"),
        ]
Beispiel #9
0
    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!]!]",
            ),
        ]