diff --git a/app/models/form/lettings/pages/outstanding.rb b/app/models/form/lettings/pages/outstanding.rb index a7bfa9290..ee748cfa9 100644 --- a/app/models/form/lettings/pages/outstanding.rb +++ b/app/models/form/lettings/pages/outstanding.rb @@ -2,15 +2,15 @@ class Form::Lettings::Pages::Outstanding < ::Form::Page def initialize(id, hsh, subsection) super @id = "outstanding" - @depends_on = [ - { "hb" => 1, "household_charge" => 0 }, - { "hb" => 1, "household_charge" => nil }, - { "hb" => 6, "household_charge" => 0 }, - { "hb" => 6, "household_charge" => nil }, - ] end def questions @questions ||= [Form::Lettings::Questions::Hbrentshortfall.new(nil, nil, self)] end + + def routed_to?(log, _) + return false unless super && [1, 6].include?(log.hb) + + (log.household_charge.present? && log.household_charge.zero? || log.household_charge.nil?) + end end diff --git a/app/models/form/lettings/pages/person_working_situation.rb b/app/models/form/lettings/pages/person_working_situation.rb index ec475045a..bc521219d 100644 --- a/app/models/form/lettings/pages/person_working_situation.rb +++ b/app/models/form/lettings/pages/person_working_situation.rb @@ -2,20 +2,18 @@ class Form::Lettings::Pages::PersonWorkingSituation < ::Form::Page def initialize(id, hsh, subsection, person_index:) super(id, hsh, subsection) @id = "person_#{person_index}_working_situation" - @depends_on = [ - { - "details_known_#{person_index}" => 0, - "age#{person_index}" => { - "operator" => ">", - "operand" => 15, - }, - }, - { "details_known_#{person_index}" => 0, "age#{person_index}" => nil }, - ] + @person_index = person_index end def questions @questions ||= [Form::Lettings::Questions::PersonWorkingSituation.new(nil, nil, self, person_index: @person_index)] end + + def routed_to?(log, _) + return false unless super && log.send("details_known_#{@person_index}").zero? + + age = log.send("age#{@person_index}") + age.nil? || age > 15 + end end diff --git a/spec/models/form/lettings/pages/outstanding_spec.rb b/spec/models/form/lettings/pages/outstanding_spec.rb new file mode 100644 index 000000000..7dd0ceb17 --- /dev/null +++ b/spec/models/form/lettings/pages/outstanding_spec.rb @@ -0,0 +1,62 @@ +require "rails_helper" + +RSpec.describe Form::Lettings::Pages::Outstanding, type: :model do + subject(:page) { described_class.new(page_id, page_definition, subsection) } + + let(:page_id) { nil } + let(:page_definition) { nil } + let(:form) { Form.new(nil, 2024, [], "lettings") } + let(:subsection) { instance_double(Form::Subsection, enabled?: true, form:, depends_on: nil) } + + describe "#routed_to?" do + let(:log) { create(:lettings_log) } + + context "when hb is 1 and household_charge is 0" do + let(:log) { build(:lettings_log, hb: 1, household_charge: 0) } + + it "is routed to" do + expect(page.routed_to?(log, nil)).to eq(true) + end + end + + context "when hb is 6 and household_charge is 0" do + let(:log) { build(:lettings_log, hb: 6, household_charge: 0) } + + it "is routed to" do + expect(page.routed_to?(log, nil)).to eq(true) + end + end + + context "when hb is 1 and household_charge is nil" do + let(:log) { build(:lettings_log, hb: 1, household_charge: nil) } + + it "is routed to" do + expect(page.routed_to?(log, nil)).to eq(true) + end + end + + context "when hb is 6 and household_charge is nil" do + let(:log) { build(:lettings_log, hb: 6, household_charge: nil) } + + it "is routed to" do + expect(page.routed_to?(log, nil)).to eq(true) + end + end + + context "when hb is not 1 or 6" do + let(:log) { build(:lettings_log, hb: 2, household_charge: nil) } + + it "is routed to" do + expect(page.routed_to?(log, nil)).to eq(false) + end + end + + context "when household_charge is not nil or 0" do + let(:log) { build(:lettings_log, hb: 6, household_charge: 1) } + + it "is not routed to" do + expect(page.routed_to?(log, nil)).to eq(false) + end + end + end +end diff --git a/spec/models/form/lettings/pages/person_working_situation_spec.rb b/spec/models/form/lettings/pages/person_working_situation_spec.rb index 71ef0a8f2..ffdf39d55 100644 --- a/spec/models/form/lettings/pages/person_working_situation_spec.rb +++ b/spec/models/form/lettings/pages/person_working_situation_spec.rb @@ -4,7 +4,8 @@ RSpec.describe Form::Lettings::Pages::PersonWorkingSituation, type: :model do subject(:page) { described_class.new(nil, page_definition, subsection, person_index:) } let(:page_definition) { nil } - let(:subsection) { instance_double(Form::Subsection, form: instance_double(Form, start_date: Time.zone.local(2024, 4, 1))) } + let(:form) { Form.new(nil, 2024, [], "lettings") } + let(:subsection) { instance_double(Form::Subsection, enabled?: true, form:, depends_on: nil) } let(:person_index) { 2 } it "has correct subsection" do @@ -24,13 +25,38 @@ RSpec.describe Form::Lettings::Pages::PersonWorkingSituation, type: :model do expect(page.id).to eq("person_2_working_situation") end - it "has correct depends_on" do - expect(page.depends_on).to eq( - [ - { "age2" => { "operand" => 15, "operator" => ">" }, "details_known_2" => 0 }, - { "age2" => nil, "details_known_2" => 0 }, - ], - ) + describe "routed_to?" do + context "with details_known_2 = 0 and age2 > 15" do + let(:log) { build(:lettings_log, details_known_2: 0, age2: 16) } + + it "is routed to" do + expect(page.routed_to?(log, nil)).to eq(true) + end + end + + context "with details_known_2 = 0 and age2 = nil" do + let(:log) { build(:lettings_log, details_known_2: 0, age2: nil) } + + it "is routed to" do + expect(page.routed_to?(log, nil)).to eq(true) + end + end + + context "with details_known_2 not 0" do + let(:log) { build(:lettings_log, details_known_2: 1, age2: 16) } + + it "is not routed to" do + expect(page.routed_to?(log, nil)).to eq(false) + end + end + + context "with age2 < 15" do + let(:log) { build(:lettings_log, details_known_2: 0, age2: 15) } + + it "is not routed to" do + expect(page.routed_to?(log, nil)).to eq(false) + end + end end end @@ -44,14 +70,5 @@ RSpec.describe Form::Lettings::Pages::PersonWorkingSituation, type: :model do it "has the correct id" do expect(page.id).to eq("person_3_working_situation") end - - it "has correct depends_on" do - expect(page.depends_on).to eq( - [ - { "age3" => { "operand" => 15, "operator" => ">" }, "details_known_3" => 0 }, - { "age3" => nil, "details_known_3" => 0 }, - ], - ) - end end end