diff --git a/lib/graphql/schema_comparator/changes.rb b/lib/graphql/schema_comparator/changes.rb index 5e566f5..282d7a2 100644 --- a/lib/graphql/schema_comparator/changes.rb +++ b/lib/graphql/schema_comparator/changes.rb @@ -843,7 +843,11 @@ class FieldAdded < AbstractChange attr_reader :object_type, :field, :criticality def initialize(object_type, field) - @criticality = Changes::Criticality.non_breaking + @criticality = if field.graphql_name == 'id' + Changes::Criticality.dangerous('this can blow up linters and change caching behaviour') + else + Changes::Criticality.non_breaking + end @object_type = object_type @field = field end diff --git a/test/lib/graphql/schema_comparator/changes/field_added_test.rb b/test/lib/graphql/schema_comparator/changes/field_added_test.rb new file mode 100644 index 0000000..82b4dd6 --- /dev/null +++ b/test/lib/graphql/schema_comparator/changes/field_added_test.rb @@ -0,0 +1,22 @@ +require "test_helper" + +class GraphQL::SchemaComparator::Changes::FieldAddedTest < Minitest::Test + def test_criticality_is_non_breaking_by_default + change = GraphQL::SchemaComparator::Changes::FieldAdded.new( + GraphQL::ObjectType.define { name "Type" }, + GraphQL::Field.define { name "field" }, + ) + + assert change.non_breaking? + end + + def test_criticality_is_dangerous_for_id_field_addition + change = GraphQL::SchemaComparator::Changes::FieldAdded.new( + GraphQL::ObjectType.define { name "Type" }, + GraphQL::Field.define { name "id" }, + ) + + assert change.dangerous? + assert_equal 'this can blow up linters and change caching behaviour', change.message + end +end