Browse Source

Move skip in form flow method from page to question

CLDC-4146-infer-no-other-partners
oscar-richardson-softwire 2 weeks ago
parent
commit
610c53545c
  1. 2
      app/models/form.rb
  2. 4
      app/models/form/lettings/pages/person_lead_partner.rb
  3. 4
      app/models/form/lettings/questions/person_partner.rb
  4. 4
      app/models/form/page.rb
  5. 4
      app/models/form/question.rb
  6. 39
      spec/models/form_spec.rb

2
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

4
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

4
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

4
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

4
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)

39
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

Loading…
Cancel
Save