Browse Source

Route back to check answers after an interruption screen and back to previous page if no is selected on the interruption screen

Co-authored-by: baarkerlounger  <baarkerlounger@users.noreply.github.com>
pull/602/head
Kat 3 years ago
parent
commit
49d71f6f9c
  1. 23
      app/controllers/form_controller.rb
  2. 2
      app/models/validations/soft_validations.rb
  3. 37
      spec/requests/form_controller_spec.rb

23
app/controllers/form_controller.rb

@ -9,12 +9,7 @@ class FormController < ApplicationController
responses_for_page = responses_for_page(@page) responses_for_page = responses_for_page(@page)
if @case_log.update(responses_for_page) if @case_log.update(responses_for_page)
session[:errors] = nil session[:errors] = nil
if is_referrer_check_answers? && !@case_log.form.next_page(@page, @case_log).to_s.include?("value_check") redirect_to(successful_redirect_path)
redirect_to(send("case_log_#{@case_log.form.subsection_for_page(@page).id}_check_answers_path", @case_log))
else
redirect_path = @case_log.form.next_page_redirect_path(@page, @case_log)
redirect_to(send(redirect_path, @case_log))
end
else else
redirect_path = "case_log_#{@page.id}_path" redirect_path = "case_log_#{@page.id}_path"
session[:errors] = @case_log.errors.to_json session[:errors] = @case_log.errors.to_json
@ -108,4 +103,20 @@ private
referrer = request.headers["HTTP_REFERER"].presence || "" referrer = request.headers["HTTP_REFERER"].presence || ""
referrer.present? && CGI.parse(referrer.split("?")[-1]).present? && CGI.parse(referrer.split("?")[-1])["referrer"][0] == "check_answers" referrer.present? && CGI.parse(referrer.split("?")[-1]).present? && CGI.parse(referrer.split("?")[-1])["referrer"][0] == "check_answers"
end end
def successful_redirect_path
if is_referrer_check_answers?
page_ids = @case_log.form.subsection_for_page(@page).pages.map(&:id)
page_index = page_ids.index(@page.id)
next_page = @case_log.form.next_page(@page, @case_log)
previous_page = @case_log.form.previous_page(page_ids, page_index, @case_log)
if next_page.to_s.include?("value_check") || next_page == previous_page
return "/logs/#{@case_log.id}/#{next_page.dasherize}?referrer=check_answers"
else
return send("case_log_#{@case_log.form.subsection_for_page(@page).id}_check_answers_path", @case_log)
end
end
redirect_path = @case_log.form.next_page_redirect_path(@page, @case_log)
send(redirect_path, @case_log)
end
end end

2
app/models/validations/soft_validations.rb

@ -58,7 +58,7 @@ module Validations::SoftValidations
def all_tenants_age_and_gender_information_completed? def all_tenants_age_and_gender_information_completed?
(1..hhmemb).all? do |n| (1..hhmemb).all? do |n|
public_send("sex#{n}").present? && public_send("age#{n}").present? && details_known_or_lead_tenant?(n) && public_send("age#{n}_known") public_send("sex#{n}").present? && public_send("age#{n}").present? && details_known_or_lead_tenant?(n) && public_send("age#{n}_known").zero?
end end
end end

37
spec/requests/form_controller_spec.rb

@ -342,6 +342,43 @@ RSpec.describe FormController, type: :request do
end end
end end
context "when coming from check answers page" do
context "and navigating to an interruption screen" do
let(:interrupt_params) do
{
id: completed_case_log.id,
case_log: {
page: "net_income_value_check",
net_income_value_check: value,
},
}
end
let(:referrer) { "/logs/#{completed_case_log.id}/net-income-value-check?referrer=check_answers" }
before do
completed_case_log.update!(ecstat1: 1, earnings: 130, hhmemb: 1) # we're not routing to that page, so it gets cleared?§
allow(completed_case_log).to receive(:net_income_soft_validation_triggered?).and_return(true)
post "/logs/#{completed_case_log.id}/form", params: interrupt_params, headers: headers.merge({ "HTTP_REFERER" => referrer })
end
context "when yes is answered" do
let(:value) { 0 }
it "redirects back to check answers if 'yes' is selected" do
expect(response).to redirect_to("/logs/#{completed_case_log.id}/income-and-benefits/check-answers")
end
end
context "when no is answered" do
let(:value) { 1 }
it "redirects to the previous question if 'no' is selected" do
expect(response).to redirect_to("/logs/#{completed_case_log.id}/net-income?referrer=check_answers")
end
end
end
end
context "with case logs that are not owned or managed by your organisation" do context "with case logs that are not owned or managed by your organisation" do
let(:answer) { 25 } let(:answer) { 25 }
let(:other_organisation) { FactoryBot.create(:organisation) } let(:other_organisation) { FactoryBot.create(:organisation) }

Loading…
Cancel
Save