From 45201f9dace237b7434f90b97b07248265b7803e Mon Sep 17 00:00:00 2001 From: Tiago Lupepic Date: Tue, 19 May 2026 11:14:57 +0200 Subject: [PATCH] feat(presentation_group_keys): Fix validation of presentation group keys to avoid duplicated values This commit changes the validation of presentation group keys to avoid duplicated keys --- app/services/charges/validators/base_service.rb | 7 +++++++ .../charges/presentation_group_keys_validation.rb | 11 +++++++++++ 2 files changed, 18 insertions(+) diff --git a/app/services/charges/validators/base_service.rb b/app/services/charges/validators/base_service.rb index 9127884cf32..ff0ab072b78 100644 --- a/app/services/charges/validators/base_service.rb +++ b/app/services/charges/validators/base_service.rb @@ -59,6 +59,7 @@ def validate_presentation_group_keys raw_keys = properties["presentation_group_keys"] return if raw_keys.blank? + values = [] valid_presentation_group_keys = raw_keys.is_a?(Array) && raw_keys.all? do |key| next false unless key.is_a?(Hash) @@ -80,6 +81,8 @@ def validate_presentation_group_keys end end + values << key[:value] if value_valid + keys_valid && value_key_present && value_valid && options_key_valid end @@ -93,6 +96,10 @@ def validate_presentation_group_keys if raw_keys.size > 2 add_error(field: "presentation_group_keys", error_code: "too_many_keys") end + + if values.size != values.uniq.size + add_error(field: "presentation_group_keys", error_code: "value_is_duplicated") + end end end end diff --git a/spec/support/shared_examples/charges/presentation_group_keys_validation.rb b/spec/support/shared_examples/charges/presentation_group_keys_validation.rb index ef5eba1b826..6fd6f3930cf 100644 --- a/spec/support/shared_examples/charges/presentation_group_keys_validation.rb +++ b/spec/support/shared_examples/charges/presentation_group_keys_validation.rb @@ -30,6 +30,17 @@ end end + context "when presentation_group_keys has duplicated values" do + let(:presentation_group_keys) { [{"value" => "country"}, {"value" => "country"}] } + + it "is invalid" do + expect(validation_service).not_to be_valid + expect(validation_service.result.error).to be_a(BaseService::ValidationFailure) + expect(validation_service.result.error.messages.keys).to include(:presentation_group_keys) + expect(validation_service.result.error.messages[:presentation_group_keys]).to include("value_is_duplicated") + end + end + context "when presentation_group_keys has options" do let(:presentation_group_keys) do [