From 4477b8ddcd6a77678d1d683cd43af0489fb3261a Mon Sep 17 00:00:00 2001 From: Sam Bostock Date: Tue, 30 Nov 2021 22:58:12 -0500 Subject: [PATCH 1/2] Add test for existing field addition criticality --- .../changes/field_added_test.rb | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 test/lib/graphql/schema_comparator/changes/field_added_test.rb 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..e13d842 --- /dev/null +++ b/test/lib/graphql/schema_comparator/changes/field_added_test.rb @@ -0,0 +1,21 @@ +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_non_breaking_for_id_field_addition + change = GraphQL::SchemaComparator::Changes::FieldAdded.new( + GraphQL::ObjectType.define { name "Type" }, + GraphQL::Field.define { name "id" }, + ) + + assert change.non_breaking? + end +end From 1ed191e22b68c1da5c95d2763eb3cdad4057c79e Mon Sep 17 00:00:00 2001 From: Sam Bostock Date: Tue, 30 Nov 2021 23:00:14 -0500 Subject: [PATCH 2/2] Make id field addition dangerous --- lib/graphql/schema_comparator/changes.rb | 6 +++++- .../graphql/schema_comparator/changes/field_added_test.rb | 5 +++-- 2 files changed, 8 insertions(+), 3 deletions(-) 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 index e13d842..82b4dd6 100644 --- a/test/lib/graphql/schema_comparator/changes/field_added_test.rb +++ b/test/lib/graphql/schema_comparator/changes/field_added_test.rb @@ -10,12 +10,13 @@ def test_criticality_is_non_breaking_by_default assert change.non_breaking? end - def test_criticality_is_non_breaking_for_id_field_addition + 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.non_breaking? + assert change.dangerous? + assert_equal 'this can blow up linters and change caching behaviour', change.message end end