From a75b3cf705a38579eb6d048eb8108450c17c9ee6 Mon Sep 17 00:00:00 2001 From: Kat Date: Fri, 14 Jun 2024 11:55:54 +0100 Subject: [PATCH] Link to check your errors page --- ...eck_answers_summary_list_card_component.rb | 4 +-- app/helpers/form_page_error_helper.rb | 8 ++++++ app/views/check_your_errors/index.html.erb | 4 +-- app/views/form/page.html.erb | 7 +++++ spec/features/form/page_routing_spec.rb | 27 +++++++++++++++++++ .../check_your_errors_controller_spec.rb | 14 +++++----- 6 files changed, 53 insertions(+), 11 deletions(-) diff --git a/app/components/check_answers_summary_list_card_component.rb b/app/components/check_answers_summary_list_card_component.rb index 463fa3193..825ab04b1 100644 --- a/app/components/check_answers_summary_list_card_component.rb +++ b/app/components/check_answers_summary_list_card_component.rb @@ -32,9 +32,9 @@ class CheckAnswersSummaryListCardComponent < ViewComponent::Base def action_href(question, log, correcting_hard_validation: false) if correcting_hard_validation if question.displayed_as_answered?(log) - lettings_log_confirm_clear_answer_path(log, question_id: question.id, related_question_ids: request.query_parameters["related_question_ids"], original_question_id: request.query_parameters["original_question_id"]) + lettings_log_confirm_clear_answer_path(log, question_id: question.id, related_question_ids: request.query_parameters["related_question_ids"], original_page_id: request.query_parameters["original_page_id"]) else - send("#{log.model_name.param_key}_#{question.page.id}_path", log, referrer: "check_your_errors", related_question_ids: request.query_parameters["related_question_ids"], original_question_id: request.query_parameters["original_question_id"]) + send("#{log.model_name.param_key}_#{question.page.id}_path", log, referrer: "check_your_errors", related_question_ids: request.query_parameters["related_question_ids"], original_page_id: request.query_parameters["original_page_id"]) end else referrer = question.displayed_as_answered?(log) ? "check_answers" : "check_answers_new_answer" diff --git a/app/helpers/form_page_error_helper.rb b/app/helpers/form_page_error_helper.rb index 4bfda9eee..035c34f0a 100644 --- a/app/helpers/form_page_error_helper.rb +++ b/app/helpers/form_page_error_helper.rb @@ -3,4 +3,12 @@ module FormPageErrorHelper other_page_error_ids = lettings_log.errors.map(&:attribute) - page.questions.map { |q| q.id.to_sym }.concat([:base]) other_page_error_ids.each { |id| lettings_log.errors.delete(id) } end + + def all_questions_affected_by_errors(log) + log.errors.map(&:attribute) - [:base] + end + + def check_your_errors_link(log, related_question_ids, original_page_id) + govuk_link_to "See all related answers", lettings_log_check_your_errors_path(log, related_question_ids:, original_page_id:), method: :post + end end diff --git a/app/views/check_your_errors/index.html.erb b/app/views/check_your_errors/index.html.erb index 4e304c5c6..55ddac172 100644 --- a/app/views/check_your_errors/index.html.erb +++ b/app/views/check_your_errors/index.html.erb @@ -2,10 +2,10 @@

- Make sure these answers are correct: + Make sure these answers are correct: - <%= govuk_link_to "Clear all", lettings_log_confirm_clear_all_answers_path(@log, related_question_ids: request.query_parameters["related_question_ids"] , original_question_id: request.query_parameters["original_question_id"])%> + <%= govuk_link_to "Clear all", lettings_log_confirm_clear_all_answers_path(@log, related_question_ids: request.query_parameters["related_question_ids"], original_page_id: request.query_parameters["original_page_id"]) %>

diff --git a/app/views/form/page.html.erb b/app/views/form/page.html.erb index fffc22411..cfc7e7a71 100644 --- a/app/views/form/page.html.erb +++ b/app/views/form/page.html.erb @@ -16,6 +16,7 @@ <%= form_with model: @log, url: request.original_url, method: "post", local: true do |f| %>
+ <% all_questions_with_errors = all_questions_affected_by_errors(@log) %> <% remove_other_page_errors(@log, @page) %> <%= f.govuk_error_summary %> @@ -70,6 +71,12 @@ <%= f.hidden_field :interruption_page_id, value: @interruption_page_id %> <%= f.hidden_field :interruption_page_referrer_type, value: @interruption_page_referrer_type %> + <% if all_questions_with_errors.count > 1 %> +
+ <%= check_your_errors_link(@log, all_questions_with_errors, @page.id) %> +
+ <% end %> +
<% if !@page.interruption_screen? %> <%= f.govuk_submit submit_button_text(@page, request.query_parameters["referrer"]) %> diff --git a/spec/features/form/page_routing_spec.rb b/spec/features/form/page_routing_spec.rb index 8ee63de03..0a0b7307f 100644 --- a/spec/features/form/page_routing_spec.rb +++ b/spec/features/form/page_routing_spec.rb @@ -119,6 +119,16 @@ RSpec.describe "Form Page Routing" do expect(find_field("lettings_log[startdate(2i)]").value).to eq(nil) expect(find_field("lettings_log[startdate(1i)]").value).to eq(nil) end + + it "does not show see all related answers link if only 1 field has an error" do + visit("/lettings-logs/#{id}/tenancy-start-date") + fill_in("lettings_log[startdate(1i)]", with: "202") + fill_in("lettings_log[startdate(2i)]", with: "32") + fill_in("lettings_log[startdate(3i)]", with: "0") + click_button("Save and continue") + + expect(page).not_to have_link("See all related answers") + end end end @@ -262,4 +272,21 @@ RSpec.describe "Form Page Routing" do end end end + + describe "composite validations" do + context "when error is added to multiple fields" do + before do + lettings_log.update(needstype: 1, declaration: 1, ecstat1: 10, hhmemb: 2, net_income_known: 0, incfreq: 1, earnings: 1000) + end + + it "does shows see all related answers link" do + visit("/lettings-logs/#{id}/income-amount") + fill_in("lettings-log-earnings-field", with: "100000") + click_button("Save and continue") + + expect(page).to have_current_path("/lettings-logs/#{id}/income-amount") + expect(page).to have_link("See all related answers", href: "/lettings-logs/#{id}/check-your-errors?original_page_id=income_amount&related_question_ids%5B%5D=earnings&related_question_ids%5B%5D=hhmemb&related_question_ids%5B%5D=ecstat1&related_question_ids%5B%5D=ecstat2") + end + end + end end diff --git a/spec/requests/check_your_errors_controller_spec.rb b/spec/requests/check_your_errors_controller_spec.rb index 7f219ba47..6914192ed 100644 --- a/spec/requests/check_your_errors_controller_spec.rb +++ b/spec/requests/check_your_errors_controller_spec.rb @@ -30,13 +30,13 @@ RSpec.describe CheckYourErrorsController, type: :request do context "with multiple error fields and answered questions" do before do sign_in user - get "/lettings-logs/#{lettings_log.id}/check-your-errors?related_question_ids[]=startdate&related_question_ids[]=needstype&original_question_id=startdate" + get "/lettings-logs/#{lettings_log.id}/check-your-errors?related_question_ids[]=startdate&related_question_ids[]=needstype&original_page_id=tenancy_start_date" end it "displays correct clear links" do - expect(page).to have_link("Clear", href: "/lettings-logs/#{lettings_log.id}/confirm-clear-answer?original_question_id=startdate&question_id=startdate&related_question_ids%5B%5D=startdate&related_question_ids%5B%5D=needstype") - expect(page).to have_link("Clear", href: "/lettings-logs/#{lettings_log.id}/confirm-clear-answer?original_question_id=startdate&question_id=needstype&related_question_ids%5B%5D=startdate&related_question_ids%5B%5D=needstype") - expect(page).to have_link("Clear all", href: "/lettings-logs/#{lettings_log.id}/confirm-clear-all-answers?original_question_id=startdate&related_question_ids%5B%5D=startdate&related_question_ids%5B%5D=needstype") + expect(page).to have_link("Clear", href: "/lettings-logs/#{lettings_log.id}/confirm-clear-answer?original_page_id=tenancy_start_date&question_id=startdate&related_question_ids%5B%5D=startdate&related_question_ids%5B%5D=needstype") + expect(page).to have_link("Clear", href: "/lettings-logs/#{lettings_log.id}/confirm-clear-answer?original_page_id=tenancy_start_date&question_id=needstype&related_question_ids%5B%5D=startdate&related_question_ids%5B%5D=needstype") + expect(page).to have_link("Clear all", href: "/lettings-logs/#{lettings_log.id}/confirm-clear-all-answers?original_page_id=tenancy_start_date&related_question_ids%5B%5D=startdate&related_question_ids%5B%5D=needstype") end end @@ -44,12 +44,12 @@ RSpec.describe CheckYourErrorsController, type: :request do before do lettings_log.update!(needstype: nil, startdate: nil) sign_in user - get "/lettings-logs/#{lettings_log.id}/check-your-errors?related_question_ids[]=startdate&related_question_ids[]=needstype&original_question_id=startdate" + get "/lettings-logs/#{lettings_log.id}/check-your-errors?related_question_ids[]=startdate&related_question_ids[]=needstype&original_page_id=tenancy_start_date" end it "displays correct clear links" do - expect(page).to have_link("Answer", href: "/lettings-logs/#{lettings_log.id}/needs-type?original_question_id=startdate&referrer=check_your_errors&related_question_ids%5B%5D=startdate&related_question_ids%5B%5D=needstype") - expect(page).to have_link("Answer", href: "/lettings-logs/#{lettings_log.id}/tenancy-start-date?original_question_id=startdate&referrer=check_your_errors&related_question_ids%5B%5D=startdate&related_question_ids%5B%5D=needstype") + expect(page).to have_link("Answer", href: "/lettings-logs/#{lettings_log.id}/needs-type?original_page_id=tenancy_start_date&referrer=check_your_errors&related_question_ids%5B%5D=startdate&related_question_ids%5B%5D=needstype") + expect(page).to have_link("Answer", href: "/lettings-logs/#{lettings_log.id}/tenancy-start-date?original_page_id=tenancy_start_date&referrer=check_your_errors&related_question_ids%5B%5D=startdate&related_question_ids%5B%5D=needstype") end end end