From bb69feedfe1bc3fd41e44967923b237938ce579c Mon Sep 17 00:00:00 2001 From: Kat Date: Thu, 8 Aug 2024 15:21:44 +0100 Subject: [PATCH] Remove duplicate errors for check errors page --- app/helpers/form_page_error_helper.rb | 10 ++++++++++ app/views/form/check_errors.html.erb | 1 + spec/helpers/form_page_error_helper_spec.rb | 18 ++++++++++++++++++ 3 files changed, 29 insertions(+) diff --git a/app/helpers/form_page_error_helper.rb b/app/helpers/form_page_error_helper.rb index 8a46accca..9610da921 100644 --- a/app/helpers/form_page_error_helper.rb +++ b/app/helpers/form_page_error_helper.rb @@ -4,6 +4,16 @@ module FormPageErrorHelper other_page_error_ids.each { |id| lettings_log.errors.delete(id) } end + def remove_duplicate_page_errors(lettings_log) + lettings_log.errors.map(&:message) + lettings_log.errors.group_by(&:message).each do |_, errors| + next if errors.size == 1 + + errors.shift + errors.each { |error| lettings_log.errors.delete(error.attribute) } + end + end + def all_questions_affected_by_errors(log) log.errors.map(&:attribute) - [:base] end diff --git a/app/views/form/check_errors.html.erb b/app/views/form/check_errors.html.erb index 27fa3ea0c..bab4858a5 100644 --- a/app/views/form/check_errors.html.erb +++ b/app/views/form/check_errors.html.erb @@ -2,6 +2,7 @@
<%= form_with model: @log, url: send("#{@log.model_name.param_key}_confirm_clear_answer_path", @log), method: "post", local: true do |f| %> + <% remove_duplicate_page_errors(@log) %> <%= f.govuk_error_summary %> <%= f.hidden_field :page_id, value: @page.id %> diff --git a/spec/helpers/form_page_error_helper_spec.rb b/spec/helpers/form_page_error_helper_spec.rb index 5f86e1648..067739e16 100644 --- a/spec/helpers/form_page_error_helper_spec.rb +++ b/spec/helpers/form_page_error_helper_spec.rb @@ -21,4 +21,22 @@ RSpec.describe FormPageErrorHelper do end end end + + describe "#remove_duplicate_page_errors" do + context "when non base other questions are removed" do + let!(:lettings_log) { FactoryBot.create(:lettings_log, :in_progress) } + + before do + lettings_log.errors.add :layear, "error" + lettings_log.errors.add :period, "error_one" + lettings_log.errors.add :base, "error_one" + end + + it "returns details and user tabs" do + remove_duplicate_page_errors(lettings_log) + expect(lettings_log.errors.count).to eq(2) + expect(lettings_log.errors.map(&:message)).to match_array(%w[error_one error]) + end + end + end end