diff --git a/app/controllers/form_controller.rb b/app/controllers/form_controller.rb index b0468c875..265c8375e 100644 --- a/app/controllers/form_controller.rb +++ b/app/controllers/form_controller.rb @@ -129,20 +129,26 @@ private def successful_redirect_path if is_referrer_check_answers? - page_ids = @log.form.subsection_for_page(@page).pages.map(&:id) + page_ids = form.subsection_for_page(@page).pages.map(&:id) page_index = page_ids.index(@page.id) - next_page = @log.form.next_page(@page, @log, current_user) - previous_page = @log.form.previous_page(page_ids, page_index, @log, current_user) - if next_page.to_s.include?("value_check") || next_page == previous_page - return send("#{@log.class.name.underscore}_#{next_page}_path", @log, { referrer: "check_answers" }) + next_page_id = form.next_page(@page, @log, current_user) + next_page = form.get_page(next_page_id) + previous_page = form.previous_page(page_ids, page_index, @log, current_user) + + if next_page&.interruption_screen? || next_page_id == previous_page + return send("#{@log.class.name.underscore}_#{next_page_id}_path", @log, { referrer: "check_answers" }) else - return send("#{@log.model_name.param_key}_#{@log.form.subsection_for_page(@page).id}_check_answers_path", @log) + return send("#{@log.model_name.param_key}_#{form.subsection_for_page(@page).id}_check_answers_path", @log) end end - redirect_path = @log.form.next_page_redirect_path(@page, @log, current_user) + redirect_path = form.next_page_redirect_path(@page, @log, current_user) send(redirect_path, @log) end + def form + @log&.form + end + def mandatory_questions_with_no_response(responses_for_page) session["fields"] = {} calc_questions = @page.questions.map(&:result_field) diff --git a/app/models/form/page.rb b/app/models/form/page.rb index 33e944eed..ea57bac66 100644 --- a/app/models/form/page.rb +++ b/app/models/form/page.rb @@ -32,6 +32,10 @@ class Form::Page end end + def interruption_screen? + questions.all? { |question| question.type == "interruption_screen" } + end + private def conditional_question_ids diff --git a/spec/fixtures/forms/2021_2022.json b/spec/fixtures/forms/2021_2022.json index 486bc126c..ec13bdabb 100644 --- a/spec/fixtures/forms/2021_2022.json +++ b/spec/fixtures/forms/2021_2022.json @@ -208,7 +208,7 @@ "check_answer_label": "Retirement age soft validation", "hidden_in_check_answers": true, "header": "Are you sure this person is retired?", - "type": "radio", + "type": "interruption_screen", "answer_options": { "0": { "value": "Yes" diff --git a/spec/models/form/page_spec.rb b/spec/models/form/page_spec.rb index bb448aca6..4a870fe46 100644 --- a/spec/models/form/page_spec.rb +++ b/spec/models/form/page_spec.rb @@ -47,6 +47,22 @@ RSpec.describe Form::Page, type: :model do end end + describe "#interruption_screen?" do + context "when it has regular questions" do + it "returns false" do + expect(page.interruption_screen?).to be false + end + end + + context "when it has interruption_screen question" do + let(:page) { form.get_page("retirement_value_check") } + + it "returns true" do + expect(page.interruption_screen?).to be true + end + end + end + context "with a lettings log" do let(:lettings_log) { FactoryBot.build(:lettings_log, :in_progress) }