From 570859328041406bc152dda8d78c431357cb9688 Mon Sep 17 00:00:00 2001 From: Kat Date: Wed, 26 Apr 2023 09:44:57 +0100 Subject: [PATCH] Change how we route back to interruption screen --- app/controllers/form_controller.rb | 7 +++++-- app/helpers/interruption_screen_helper.rb | 4 ++-- .../_interruption_screen_question.html.erb | 2 +- app/views/form/page.html.erb | 1 + ...answers_summary_list_card_component_spec.rb | 6 +++--- spec/features/form/validations_spec.rb | 18 +++++++++--------- spec/helpers/form_page_helper_spec.rb | 12 ++++++++++++ spec/models/form/question_spec.rb | 5 ----- 8 files changed, 33 insertions(+), 22 deletions(-) create mode 100644 spec/helpers/form_page_helper_spec.rb diff --git a/app/controllers/form_controller.rb b/app/controllers/form_controller.rb index 12dfcebf5..a1c053efc 100644 --- a/app/controllers/form_controller.rb +++ b/app/controllers/form_controller.rb @@ -46,6 +46,10 @@ class FormController < ApplicationController end def show_page + if request.params["referrer"] == "interruption_screen" + @interruption_page_id = request.headers["HTTP_REFERER"].split("/")[-1].underscore + end + if @log page_id = request.path.split("/")[-1].underscore @page = form.get_page(page_id) @@ -122,8 +126,7 @@ private end def interruption_screen_referrer - referrer = request.headers["HTTP_REFERER"].presence || "" - return CGI.parse(referrer.split("?")[-1])["referrer"][0] if referrer.present? && CGI.parse(referrer.split("?")[-1]).present? + params[@log.model_name.param_key]["interruption_page_id"] end def successful_redirect_path diff --git a/app/helpers/interruption_screen_helper.rb b/app/helpers/interruption_screen_helper.rb index e8bb85379..de29ccfc6 100644 --- a/app/helpers/interruption_screen_helper.rb +++ b/app/helpers/interruption_screen_helper.rb @@ -33,8 +33,8 @@ module InterruptionScreenHelper question.page.affected_question_ids.map { |question_id| log.form.get_question(question_id, log) } end - def interruption_action_href(log, page_id, current_page_id) - send("#{log.model_name.param_key}_#{page_id}_path", log, referrer: current_page_id) + def interruption_action_href(log, page_id) + send("#{log.model_name.param_key}_#{page_id}_path", log, referrer: "interruption_screen") end private diff --git a/app/views/form/_interruption_screen_question.html.erb b/app/views/form/_interruption_screen_question.html.erb index 498618321..7e3625b7e 100644 --- a/app/views/form/_interruption_screen_question.html.erb +++ b/app/views/form/_interruption_screen_question.html.erb @@ -38,7 +38,7 @@ <% if @log.collection_period_open? %> <% row.action( text: affected_question.action_text(@log), - href: interruption_action_href(@log, affected_question.page.id, question.page.id), + href: interruption_action_href(@log, affected_question.page.id), visually_hidden_text: affected_question.check_answer_label.to_s.downcase, ) %> <% end %> diff --git a/app/views/form/page.html.erb b/app/views/form/page.html.erb index 2c135af98..7f7f9a683 100644 --- a/app/views/form/page.html.erb +++ b/app/views/form/page.html.erb @@ -59,6 +59,7 @@ <% end %> <%= f.hidden_field :page, value: @page.id %> + <%= f.hidden_field :interruption_page_id, value: @interruption_page_id %>
<% if !@page.interruption_screen? && if request.query_parameters["referrer"] != "check_answers" %> diff --git a/spec/components/check_answers_summary_list_card_component_spec.rb b/spec/components/check_answers_summary_list_card_component_spec.rb index 8bf9f4a45..4afe0fbc2 100644 --- a/spec/components/check_answers_summary_list_card_component_spec.rb +++ b/spec/components/check_answers_summary_list_card_component_spec.rb @@ -62,13 +62,13 @@ RSpec.describe CheckAnswersSummaryListCardComponent, type: :component do context "when in 23/24 collection" do context "when given a set of questions" do - let(:user) { build(:user) } - let(:log) { build(:lettings_log, :completed, age2: 99, startdate: Time.zone.local(2023, 5, 1)) } + let(:user) { create(:user) } + let(:log) { create(:lettings_log, :completed, age2: 99, startdate: Time.zone.local(2023, 5, 1)) } let(:subsection_id) { "household_characteristics" } let(:subsection) { log.form.get_subsection(subsection_id) } let(:questions) { subsection.applicable_questions(log) } - it "renders a summary list card includinq question numbers for the answers to those questions" do + it "renders a summary list card including question numbers for the answers to those questions" do expect(rendered).to have_content(questions.first.answer_label(log)) expect(rendered).to have_content("Q32 - Lead tenant’s age") end diff --git a/spec/features/form/validations_spec.rb b/spec/features/form/validations_spec.rb index c7c611266..201059655 100644 --- a/spec/features/form/validations_spec.rb +++ b/spec/features/form/validations_spec.rb @@ -150,17 +150,17 @@ RSpec.describe "validations" do expect(page).to have_content("Net income is outside the expected range based on the lead tenant’s working situation") expect(page).to have_content("You told us the lead tenant’s working situation is: full-time – 30 hours or more") expect(page).to have_content("The household income you have entered is £750.00 every week") - click_button("Save and continue") + click_button("Confirm and continue") expect(page).to have_current_path("/lettings-logs/#{lettings_log.id}/net-income-uc-proportion") end it "allows to fix the questions that trigger the soft validation" do expect(page).to have_current_path("/lettings-logs/#{lettings_log.id}/net-income-value-check") - expect(page).to have_link("Change", href: "/lettings-logs/#{lettings_log.id}/net-income?referrer=net_income_value_check").twice - expect(page).to have_link("Change", href: "/lettings-logs/#{lettings_log.id}/person-1-working-situation?referrer=net_income_value_check") + expect(page).to have_link("Change", href: "/lettings-logs/#{lettings_log.id}/net-income?referrer=interruption_screen").twice + expect(page).to have_link("Change", href: "/lettings-logs/#{lettings_log.id}/person-1-working-situation?referrer=interruption_screen") expect(page).to have_current_path("/lettings-logs/#{lettings_log.id}/net-income-value-check") - click_link("Change", href: "/lettings-logs/#{lettings_log.id}/net-income?referrer=net_income_value_check", match: :first) - expect(page).to have_current_path("/lettings-logs/#{lettings_log.id}/net-income?referrer=net_income_value_check") + click_link("Change", href: "/lettings-logs/#{lettings_log.id}/net-income?referrer=interruption_screen", match: :first) + expect(page).to have_current_path("/lettings-logs/#{lettings_log.id}/net-income?referrer=interruption_screen") fill_in("lettings-log-earnings-field", with: income_under_soft_limit) choose("lettings-log-incfreq-1-field", allow_label_click: true) click_button("Save and continue") @@ -171,11 +171,11 @@ RSpec.describe "validations" do it "allows to fix the questions from different sections" do expect(page).to have_current_path("/lettings-logs/#{lettings_log.id}/net-income-value-check") - expect(page).to have_link("Change", href: "/lettings-logs/#{lettings_log.id}/net-income?referrer=net_income_value_check").twice - expect(page).to have_link("Change", href: "/lettings-logs/#{lettings_log.id}/person-1-working-situation?referrer=net_income_value_check") + expect(page).to have_link("Change", href: "/lettings-logs/#{lettings_log.id}/net-income?referrer=interruption_screen").twice + expect(page).to have_link("Change", href: "/lettings-logs/#{lettings_log.id}/person-1-working-situation?referrer=interruption_screen") expect(page).to have_current_path("/lettings-logs/#{lettings_log.id}/net-income-value-check") - click_link("Change", href: "/lettings-logs/#{lettings_log.id}/person-1-working-situation?referrer=net_income_value_check") - expect(page).to have_current_path("/lettings-logs/#{lettings_log.id}/person-1-working-situation?referrer=net_income_value_check") + click_link("Change", href: "/lettings-logs/#{lettings_log.id}/person-1-working-situation?referrer=interruption_screen") + expect(page).to have_current_path("/lettings-logs/#{lettings_log.id}/person-1-working-situation?referrer=interruption_screen") choose("lettings-log-ecstat1-10-field", allow_label_click: true) click_button("Save and continue") expect(page).to have_current_path("/lettings-logs/#{lettings_log.id}/net-income-value-check") diff --git a/spec/helpers/form_page_helper_spec.rb b/spec/helpers/form_page_helper_spec.rb new file mode 100644 index 000000000..4e940d03b --- /dev/null +++ b/spec/helpers/form_page_helper_spec.rb @@ -0,0 +1,12 @@ +require "rails_helper" + +RSpec.describe FormPageHelper do + describe "#action_href" do + let(:lettings_log) { FactoryBot.build(:lettings_log) } + + it "has an update answer link href helper" do + lettings_log.id = 1 + expect(action_href(lettings_log, "net_income")).to eq("/lettings-logs/1/net-income?referrer=check_answers") + end + end +end diff --git a/spec/models/form/question_spec.rb b/spec/models/form/question_spec.rb index 0a2867e7f..751523d37 100644 --- a/spec/models/form/question_spec.rb +++ b/spec/models/form/question_spec.rb @@ -257,11 +257,6 @@ RSpec.describe Form::Question, type: :model do expect(question.action_text(lettings_log)).to match(/Change/) end - it "has an update answer link href helper" do - lettings_log.id = 1 - expect(action_href(lettings_log, page.id)).to eq("/lettings-logs/1/net-income?referrer=check_answers") - end - context "when the question has an inferred answer" do let(:section_id) { "tenancy_and_property" } let(:subsection_id) { "property_information" }