diff --git a/app/models/form.rb b/app/models/form.rb index f245334d1..cd4ad0af1 100644 --- a/app/models/form.rb +++ b/app/models/form.rb @@ -109,7 +109,7 @@ class Form return :check_answers if next_page.nil? return next_page.id if next_page.routed_to?(log, current_user) && (!ignore_answered || next_page.has_unanswered_questions?(log)) && - !next_page.skip_page_in_form_flow?(log) + next_page.questions.any? { |question| !question.skip_question_in_form_flow?(log) } next_page_id(next_page, log, current_user, ignore_answered:) end diff --git a/app/models/form/lettings/pages/person_lead_partner.rb b/app/models/form/lettings/pages/person_lead_partner.rb index b86b41ca6..72fa2a1c9 100644 --- a/app/models/form/lettings/pages/person_lead_partner.rb +++ b/app/models/form/lettings/pages/person_lead_partner.rb @@ -28,8 +28,4 @@ class Form::Lettings::Pages::PersonLeadPartner < ::Form::Page [{ "details_known_#{@person_index}" => 0 }] end end - - def skip_page_in_form_flow?(log) - form.start_year_2026_or_later? && log.is_any_person_partner? - end end diff --git a/app/models/form/lettings/questions/person_partner.rb b/app/models/form/lettings/questions/person_partner.rb index b2ca10e02..d70ed7123 100644 --- a/app/models/form/lettings/questions/person_partner.rb +++ b/app/models/form/lettings/questions/person_partner.rb @@ -37,4 +37,8 @@ class Form::Lettings::Questions::PersonPartner < ::Form::Question def derived?(log) form.start_year_2026_or_later? && log.is_person_under_16?(@person_index) end + + def skip_question_in_form_flow?(log) + form.start_year_2026_or_later? && log.is_any_person_partner? + end end diff --git a/app/models/form/page.rb b/app/models/form/page.rb index fda1d886b..6aa93d766 100644 --- a/app/models/form/page.rb +++ b/app/models/form/page.rb @@ -55,10 +55,6 @@ class Form::Page def skip_href(log = nil); end - def skip_page_in_form_flow?(_log) - false - end - private def conditional_question_ids diff --git a/app/models/form/question.rb b/app/models/form/question.rb index be90899f9..5b9e7a051 100644 --- a/app/models/form/question.rb +++ b/app/models/form/question.rb @@ -304,6 +304,10 @@ class Form::Question nil end + def skip_question_in_form_flow?(_log) + false + end + private def selected_answer_option_is_derived?(log) diff --git a/spec/models/form_spec.rb b/spec/models/form_spec.rb index 9166f55fb..206fb4270 100644 --- a/spec/models/form_spec.rb +++ b/spec/models/form_spec.rb @@ -19,21 +19,42 @@ RSpec.describe Form, type: :model do let(:previous_page_id) { form.get_page("person_1_age") } let(:value_check_previous_page) { form.get_page("net_income_value_check") } - it "returns the next page given the previous" do + it "returns the next page, given the previous" do expect(form.next_page_id(previous_page_id, lettings_log, user)).to eq("person_1_gender") end - context "when the next page's `skip_page_in_form_flow?` returns `true`" do - let(:next_page) { form.get_page("person_1_gender") } + context "when the next page has more than one question" do + let(:previous_page_id) { form.get_page("tenancy_start_date") } + let(:next_page) { form.get_page("rent_type") } + + context "when every question on the next page returns `true` from its `skip_question_in_form_flow?` method" do + before do + allow(next_page.questions.first).to receive(:skip_question_in_form_flow?) + .with(lettings_log) + .and_return(true) + allow(next_page.questions.second).to receive(:skip_question_in_form_flow?) + .with(lettings_log) + .and_return(true) + end - before do - allow(next_page).to receive(:skip_page_in_form_flow?) - .with(lettings_log) - .and_return(true) + it "returns the page after next, given the previous" do + expect(form.next_page_id(previous_page_id, lettings_log, user)).to eq("tenant_code") + end end - it "returns the page after next, given the previous" do - expect(form.next_page_id(previous_page_id, lettings_log, user)).to eq("person_1_working_situation") + context "when at least question on the next page returns `false` from its `skip_question_in_form_flow?` method" do + before do + allow(next_page.questions.first).to receive(:skip_question_in_form_flow?) + .with(lettings_log) + .and_return(true) + allow(next_page.questions.second).to receive(:skip_question_in_form_flow?) + .with(lettings_log) + .and_return(false) + end + + it "returns the next page, given the previous" do + expect(form.next_page_id(previous_page_id, lettings_log, user)).to eq("rent_type") + end end end