diff --git a/app/controllers/form_controller.rb b/app/controllers/form_controller.rb index 3014b685e..37ae45f6a 100644 --- a/app/controllers/form_controller.rb +++ b/app/controllers/form_controller.rb @@ -48,6 +48,7 @@ class FormController < ApplicationController def show_page if request.params["referrer"] == "interruption_screen" @interruption_page_id = URI.parse(request.headers["HTTP_REFERER"]).path.split("/").last.underscore + @interruption_page_referrer_type = referrer_from_query end if @log @@ -121,20 +122,30 @@ private end def is_referrer_type?(referrer_type) + referrer_from_query == referrer_type + end + + def referrer_from_query referrer = request.headers["HTTP_REFERER"] - return false unless referrer + return nil unless referrer query_params = URI.parse(referrer).query - return false unless query_params + return nil unless query_params parsed_params = CGI.parse(query_params) - parsed_params["referrer"].present? && parsed_params["referrer"][0] == referrer_type + return nil unless parsed_params["referrer"] + + parsed_params["referrer"][0] end def previous_interruption_screen_page_id params[@log.model_name.param_key]["interruption_page_id"] end + def previous_interruption_screen_referrer + params[@log.model_name.param_key]["interruption_page_referrer_type"] + end + def successful_redirect_path if is_referrer_type?("check_answers") next_page_id = form.next_page_id(@page, @log, current_user) @@ -148,7 +159,11 @@ private end end if previous_interruption_screen_page_id.present? - return send("#{@log.class.name.underscore}_#{previous_interruption_screen_page_id}_path", @log) + if previous_interruption_screen_referrer.present? + return send("#{@log.class.name.underscore}_#{previous_interruption_screen_page_id}_path", @log, referrer: previous_interruption_screen_referrer) + else + return send("#{@log.class.name.underscore}_#{previous_interruption_screen_page_id}_path", @log) + end end redirect_path = form.next_page_redirect_path(@page, @log, current_user) diff --git a/app/views/form/page.html.erb b/app/views/form/page.html.erb index 7f7f9a683..b5ce2ead7 100644 --- a/app/views/form/page.html.erb +++ b/app/views/form/page.html.erb @@ -60,6 +60,7 @@ <%= f.hidden_field :page, value: @page.id %> <%= f.hidden_field :interruption_page_id, value: @interruption_page_id %> + <%= f.hidden_field :interruption_page_referrer_type, value: @interruption_page_referrer_type %>
<% if !@page.interruption_screen? && if request.query_parameters["referrer"] != "check_answers" %> diff --git a/spec/features/form/validations_spec.rb b/spec/features/form/validations_spec.rb index 6c7afcfaa..420114129 100644 --- a/spec/features/form/validations_spec.rb +++ b/spec/features/form/validations_spec.rb @@ -180,6 +180,21 @@ RSpec.describe "validations" do expect(page).to have_current_path("/lettings-logs/#{lettings_log.id}/net-income-value-check") expect(page).to have_css(".govuk-notification-banner.govuk-notification-banner--success") end + + it "returns the user back to the check_your_answers after fixing a validation from check_your_anwers" do + lettings_log.update!(earnings: income_over_soft_limit, incfreq: 1) + visit("/lettings-logs/#{lettings_log.id}/income-and-benefits/check-answers") + click_link("Answer", href: "/lettings-logs/#{lettings_log.id}/net-income-value-check?referrer=check_answers") + expect(page).to have_current_path("/lettings-logs/#{lettings_log.id}/net-income-value-check?referrer=check_answers") + 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") + expect(page).to have_current_path("/lettings-logs/#{lettings_log.id}/net-income-value-check?referrer=check_answers") + click_button("Confirm and continue") + expect(page).to have_current_path("/lettings-logs/#{lettings_log.id}/income-and-benefits/check-answers") + end end end diff --git a/spec/fixtures/forms/2021_2022.json b/spec/fixtures/forms/2021_2022.json index 42b0bb959..5a400d095 100644 --- a/spec/fixtures/forms/2021_2022.json +++ b/spec/fixtures/forms/2021_2022.json @@ -768,7 +768,16 @@ "questions": { "net_income_value_check": { "check_answer_label": "Net income soft validation", - "hidden_in_check_answers": true, + "hidden_in_check_answers": { + "depends_on": [ + { + "net_income_value_check": 0 + }, + { + "net_income_value_check": 1 + } + ] + }, "header": "Are you sure this is correct?", "type": "interruption_screen", "answer_options": {