diff --git a/doc/api/admin/data_management.md b/doc/api/admin/data_management.md index 11d300f3fc5e54e0fb2b2c580869e40602242a87..00885363b13be371addfb765159a26513d51e26a 100644 --- a/doc/api/admin/data_management.md +++ b/doc/api/admin/data_management.md @@ -95,7 +95,7 @@ Example response: "checksum_information": { "checksum": "", "last_checksum": "2025-07-24T14:22:18.643Z", - "checksum_state": 2, + "checksum_state": "succeeded", "checksum_retry_count": 0, "checksum_retry_at": null, "checksum_failure": null @@ -109,7 +109,7 @@ Example response: "checksum_information": { "checksum": "", "last_checksum": "2025-07-24T14:22:18.214Z", - "checksum_state": 2, + "checksum_state": "succeeded", "checksum_retry_count": 0, "checksum_retry_at": null, "checksum_failure": null @@ -155,7 +155,7 @@ Example response: "checksum_information": { "checksum": "", "last_checksum": "2025-07-24T14:22:18.643Z", - "checksum_state": 2, + "checksum_state": "succeeded", "checksum_retry_count": 0, "checksum_retry_at": null, "checksum_failure": null @@ -187,7 +187,7 @@ Example response: "checksum_information": { "checksum": "", "last_checksum": "2025-07-24T14:22:18.643Z", - "checksum_state": 2, + "checksum_state": "succeeded", "checksum_retry_count": 0, "checksum_retry_at": null, "checksum_failure": null diff --git a/ee/app/graphql/types/geo/registry_type.rb b/ee/app/graphql/types/geo/registry_type.rb index 11c88cdacb11b9b4d44b0a78e2138479a94662cb..983d265c87dfabb6e51abd380ba0b535cb98282e 100644 --- a/ee/app/graphql/types/geo/registry_type.rb +++ b/ee/app/graphql/types/geo/registry_type.rb @@ -35,7 +35,7 @@ module RegistryType field :verified_at, Types::TimeType, null: true, description: "Timestamp of the most recent successful verification of the #{graphql_name}" def verification_state_name_value - object.verification_state_name.to_s.gsub('verification_', '') + object.verification_state_name_no_prefix end end end diff --git a/ee/app/models/concerns/geo/verification_state.rb b/ee/app/models/concerns/geo/verification_state.rb index 1307c3290967352651e1445822dc894a1d537df7..200fa7ced440c6bd6d2ac6cd82782f10e779e364 100644 --- a/ee/app/models/concerns/geo/verification_state.rb +++ b/ee/app/models/concerns/geo/verification_state.rb @@ -20,7 +20,9 @@ module VerificationState }.freeze VERIFICATION_TIMEOUT = 8.hours - VERIFICATION_METHODS = [:verification_retry_at, :verification_retry_at=, + VERIFICATION_METHODS = [ + :verification_state_name_no_prefix, + :verification_retry_at, :verification_retry_at=, :verified_at, :verified_at=, :verification_failed?, :verification_checksum, :verification_checksum=, :verification_failure, :verification_failure=, @@ -34,7 +36,8 @@ module VerificationState :verification_succeeded?, :verification_failed, :verification_pending, :verification_disabled, :verification_disabled!, :verification_disabled?, - :verification_pending?].freeze + :verification_pending? + ].freeze included do sha_attribute :verification_checksum diff --git a/ee/app/models/concerns/geo/verification_state_definition.rb b/ee/app/models/concerns/geo/verification_state_definition.rb index 23582f73a2da32b9b7cdfc2aaef10364ecb34652..6ad695119d778fc02fe25daecbe59359e18fccbc 100644 --- a/ee/app/models/concerns/geo/verification_state_definition.rb +++ b/ee/app/models/concerns/geo/verification_state_definition.rb @@ -132,5 +132,9 @@ def verification_transition_details(object, transition) result: transition.result } end + + def verification_state_name_no_prefix + verification_state_name.to_s.gsub('verification_', '') + end end end diff --git a/ee/lib/api/entities/admin/model.rb b/ee/lib/api/entities/admin/model.rb index 9753750714de9dd529f9fea3b28b9c9dcc0d3f9e..833bfb4816d5fe35c64009afc58c43cd8795486a 100644 --- a/ee/lib/api/entities/admin/model.rb +++ b/ee/lib/api/entities/admin/model.rb @@ -34,7 +34,7 @@ class Model < Grape::Entity if: ->(model) { verification_enabled?(model) } do expose :verification_checksum, as: :checksum expose :verified_at, as: :last_checksum - expose :verification_state, as: :checksum_state + expose :verification_state_name_no_prefix, as: :checksum_state expose :verification_retry_count, as: :checksum_retry_count expose :verification_retry_at, as: :checksum_retry_at expose :verification_failure, as: :checksum_failure diff --git a/ee/spec/lib/api/entities/admin/model_spec.rb b/ee/spec/lib/api/entities/admin/model_spec.rb index 71aded6d60625ae31df1bd13e5eb1cac170707f7..46c6edd7b83e248b9a15b3b2473c65dab3cc3212 100644 --- a/ee/spec/lib/api/entities/admin/model_spec.rb +++ b/ee/spec/lib/api/entities/admin/model_spec.rb @@ -28,9 +28,9 @@ expect(result[:record_identifier]).to eq(model.id) expect(result[:model_class]).to eq(model_classes.name) expect(result[:created_at]).to eq(model.respond_to?(:created_at) ? model.created_at : nil) - - expect(result.dig(:checksum_information, :checksum_state)).to eq(model.verification_state) expect(result[:file_size]).to eq(model.attributes.has_key?('size') ? model.size : nil) + expect(result.dig(:checksum_information, :checksum_state)) + .to eq(model.verification_state_name_no_prefix) end end diff --git a/ee/spec/models/concerns/geo/verification_state_definition_spec.rb b/ee/spec/models/concerns/geo/verification_state_definition_spec.rb new file mode 100644 index 0000000000000000000000000000000000000000..50d564ffdf2dacc41eb77d079008771f065aa22a --- /dev/null +++ b/ee/spec/models/concerns/geo/verification_state_definition_spec.rb @@ -0,0 +1,64 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe Geo::VerificationStateDefinition, feature_category: :geo_replication do + using RSpec::Parameterized::TableSyntax + + include ::EE::GeoHelpers + + before_all do + create_dummy_model_table + end + + after(:all) do + drop_dummy_model_table + end + + let_it_be(:dummy_model_class) do + Class.new(ActiveRecord::Base) do + self.table_name = '_test_dummy_models' + include Geo::VerificationStateDefinition + end + end + + let(:dummy_model) { dummy_model_class.new } + + describe '#verification_state_name_no_prefix' do + where(:raw_state, :expected_result) do + :verification_pending | 'pending' + :verification_started | 'started' + :verification_succeeded | 'succeeded' + :verification_failed | 'failed' + :verification_disabled | 'disabled' + end + + with_them do + it 'removes verification_ prefix from state name' do + dummy_model.verification_state = ::Geo::VerificationState::VERIFICATION_STATE_VALUES[raw_state] + + expect(dummy_model.verification_state_name_no_prefix).to eq(expected_result) + end + end + end + + def create_dummy_model_table + ActiveRecord::Schema.define do + create_table :_test_dummy_models, force: true do |t| + t.binary :verification_checksum + t.integer :verification_state + t.datetime_with_timezone :verification_started_at + t.datetime_with_timezone :verified_at + t.datetime_with_timezone :verification_retry_at + t.integer :verification_retry_count + t.text :verification_failure + end + end + end + + def drop_dummy_model_table + ActiveRecord::Schema.define do + drop_table :_test_dummy_models, force: true + end + end +end diff --git a/ee/spec/support/shared_examples/requests/api/graphql/geo/registries_shared_examples.rb b/ee/spec/support/shared_examples/requests/api/graphql/geo/registries_shared_examples.rb index cff972ce0b4ce859f2565842b9114ff814fc69f5..364e13997a8bfa8d6e87a0e188f9d4f6620ade0e 100644 --- a/ee/spec/support/shared_examples/requests/api/graphql/geo/registries_shared_examples.rb +++ b/ee/spec/support/shared_examples/requests/api/graphql/geo/registries_shared_examples.rb @@ -174,7 +174,7 @@ def registry_to_graphql_data_hash(registry) 'verificationFailure' => registry.verification_failure, 'verificationRetryCount' => registry.verification_retry_count, 'verificationStartedAt' => registry.verification_started_at, - 'verificationState' => registry.verification_state_name.to_s.gsub('verification_', '').upcase + 'verificationState' => registry.verification_state_name_no_prefix.upcase } return data unless verification_enabled