From f452e5452da429fff3bbecdb635f8ae5ef5f8c8e Mon Sep 17 00:00:00 2001 From: Andrew Duthie Date: Thu, 9 Nov 2023 08:47:22 -0500 Subject: [PATCH] Fix FormResponse to pick error details as type --- app/services/form_response.rb | 2 +- spec/services/form_response_spec.rb | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/app/services/form_response.rb b/app/services/form_response.rb index 1804a571d26..7f78ab6b6ed 100644 --- a/app/services/form_response.rb +++ b/app/services/form_response.rb @@ -56,7 +56,7 @@ def merge_arrays(_key, first, second) end def flatten_details(details) - details.transform_values { |errors| errors.pluck(:error) } + details.transform_values { |errors| errors.flat_map { |error| error[:type] || error[:error] } } end attr_reader :success diff --git a/spec/services/form_response_spec.rb b/spec/services/form_response_spec.rb index 9898d2e5eb7..9116960991d 100644 --- a/spec/services/form_response_spec.rb +++ b/spec/services/form_response_spec.rb @@ -177,6 +177,25 @@ expect(combined_response.to_h).to eq response_hash end + context 'with error detail symbol defined as type option on error' do + it 'returns a hash with success, errors, and error_details keys' do + errors = ActiveModel::Errors.new(build_stubbed(:user)) + errors.add(:email_language, 'Language cannot be blank', type: :blank) + response = FormResponse.new(success: false, errors: errors) + response_hash = { + success: false, + errors: { + email_language: ['Language cannot be blank'], + }, + error_details: { + email_language: [:blank], + }, + } + + expect(response.to_h).to eq response_hash + end + end + context 'with serialize_error_details_only' do it 'excludes errors from the hash' do errors = ActiveModel::Errors.new(build_stubbed(:user))