Browse Source

Link to check your errors page

pull/2484/head
Kat 10 months ago
parent
commit
0a703bf630
  1. 4
      app/components/check_answers_summary_list_card_component.rb
  2. 8
      app/helpers/form_page_error_helper.rb
  3. 4
      app/views/check_your_errors/index.html.erb
  4. 7
      app/views/form/page.html.erb
  5. 27
      spec/features/form/page_routing_spec.rb
  6. 14
      spec/requests/check_your_errors_controller_spec.rb

4
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"

8
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

4
app/views/check_your_errors/index.html.erb

@ -2,10 +2,10 @@
<div class="govuk-grid-column-three-quarters-from-desktop">
<h1 class="govuk-heading-m govuk-!-margin-bottom-6">
<span class="govuk-grid-column-two-thirds">
Make sure these answers are correct:
Make sure these answers are correct:
</span>
<span class="govuk-body govuk-!-text-align-right govuk-grid-column-one-third">
<%= 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"]) %>
</span>
</h1>

7
app/views/form/page.html.erb

@ -16,6 +16,7 @@
<%= form_with model: @log, url: request.original_url, method: "post", local: true do |f| %>
<div class="govuk-grid-row">
<div class="govuk-grid-column-two-thirds-from-desktop">
<% 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 %>
<div class="govuk-button-group">
<%= check_your_errors_link(@log, all_questions_with_errors, @page.id) %>
</div>
<% end %>
<div class="govuk-button-group">
<% if !@page.interruption_screen? %>
<%= f.govuk_submit submit_button_text(@page, request.query_parameters["referrer"]) %>

27
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

14
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

Loading…
Cancel
Save