From 39b6c4ddd8fc61d80e9a392e662f3355c8a308eb Mon Sep 17 00:00:00 2001 From: natdeanlewissoftwire <94526761+natdeanlewissoftwire@users.noreply.github.com> Date: Mon, 12 Feb 2024 12:31:12 +0000 Subject: [PATCH] CLDC-3135 Infer beds for 24/25 bedsits (#2167) * feat: for 24/25 onwards, infer beds = 1 for bedsits, change hint text and remove validation * feat: add tests * feat: update bulk upload inferral * feat: update tests * refactor: rename file * refactor: nest 2024 changes for future DRYness * refactor: lint --- .../lettings_log_variables.rb | 6 ++ .../pages/property_number_of_bedrooms.rb | 2 +- app/models/form/lettings/questions/beds.rb | 5 +- app/models/lettings_log.rb | 4 ++ .../validations/property_validations.rb | 2 +- .../lettings/year2024/row_parser.rb | 2 +- .../pages/property_number_of_bedrooms_spec.rb | 33 ++++++++++ .../form/lettings/questions/beds_spec.rb | 65 +++++++++++++++++++ .../lettings/year2024/row_parser_spec.rb | 18 +++++ 9 files changed, 133 insertions(+), 4 deletions(-) create mode 100644 spec/models/form/lettings/pages/property_number_of_bedrooms_spec.rb create mode 100644 spec/models/form/lettings/questions/beds_spec.rb diff --git a/app/models/derived_variables/lettings_log_variables.rb b/app/models/derived_variables/lettings_log_variables.rb index d0aab14cb..ac17e0219 100644 --- a/app/models/derived_variables/lettings_log_variables.rb +++ b/app/models/derived_variables/lettings_log_variables.rb @@ -91,6 +91,9 @@ module DerivedVariables::LettingsLogVariables self.prevten = 30 if owning_organisation&.provider_type == "LA" end end + if form.start_year_after_2024? && is_bedsit? + self.beds = 1 + end child_under_16_constraints! @@ -179,6 +182,9 @@ private self.wchair = nil self.location_id = nil end + if form.start_year_after_2024? && (unittype_gn_changed? && unittype_gn_was == 2) + self.beds = nil + end end def get_totelder diff --git a/app/models/form/lettings/pages/property_number_of_bedrooms.rb b/app/models/form/lettings/pages/property_number_of_bedrooms.rb index c3a1a2365..8ed9dc37a 100644 --- a/app/models/form/lettings/pages/property_number_of_bedrooms.rb +++ b/app/models/form/lettings/pages/property_number_of_bedrooms.rb @@ -2,7 +2,7 @@ class Form::Lettings::Pages::PropertyNumberOfBedrooms < ::Form::Page def initialize(id, hsh, subsection) super @id = "property_number_of_bedrooms" - @depends_on = [{ "is_general_needs?" => true }] + @depends_on = [{ "is_general_needs?" => true, "is_beds_inferred?" => false }] end def questions diff --git a/app/models/form/lettings/questions/beds.rb b/app/models/form/lettings/questions/beds.rb index 6fa6c7c2b..e75e688bb 100644 --- a/app/models/form/lettings/questions/beds.rb +++ b/app/models/form/lettings/questions/beds.rb @@ -9,8 +9,11 @@ class Form::Lettings::Questions::Beds < ::Form::Question @check_answers_card_number = 0 @max = 12 @min = 1 - @hint_text = "If shared accommodation, enter the number of bedrooms occupied by this household. A bedsit has 1 bedroom." @step = 1 @question_number = 22 end + + def hint_text + form.start_year_after_2024? ? "If shared accommodation, enter the number of bedrooms occupied by this household." : "If shared accommodation, enter the number of bedrooms occupied by this household. A bedsit has 1 bedroom." + end end diff --git a/app/models/lettings_log.rb b/app/models/lettings_log.rb index 03405a12d..cc8c7d58b 100644 --- a/app/models/lettings_log.rb +++ b/app/models/lettings_log.rb @@ -356,6 +356,10 @@ class LettingsLog < Log unittype_gn == 2 end + def is_beds_inferred? + form.start_year_after_2024? && is_bedsit? + end + def is_shared_housing? # 4: Shared flat or maisonette # 9: Shared house diff --git a/app/models/validations/property_validations.rb b/app/models/validations/property_validations.rb index 2f2d8d6b8..ba8318282 100644 --- a/app/models/validations/property_validations.rb +++ b/app/models/validations/property_validations.rb @@ -34,7 +34,7 @@ module Validations::PropertyValidations def validate_shared_housing_rooms(record) unless record.unittype_gn.nil? - if record.is_bedsit? && record.beds != 1 && record.beds.present? + if record.is_bedsit? && record.beds != 1 && record.beds.present? && !record.form.start_year_after_2024? record.errors.add :unittype_gn, I18n.t("validations.property.unittype_gn.one_bedroom_bedsit") record.errors.add :beds, I18n.t("validations.property.unittype_gn.one_bedroom_bedsit") end diff --git a/app/services/bulk_upload/lettings/year2024/row_parser.rb b/app/services/bulk_upload/lettings/year2024/row_parser.rb index c87cd0c03..5f05b6e10 100644 --- a/app/services/bulk_upload/lettings/year2024/row_parser.rb +++ b/app/services/bulk_upload/lettings/year2024/row_parser.rb @@ -1036,7 +1036,7 @@ private attributes["unittype_gn"] = field_26 attributes["builtype"] = field_27 attributes["wchair"] = field_28 - attributes["beds"] = field_29 + attributes["beds"] = field_26 == 2 ? 1 : field_29 attributes["joint"] = field_36 attributes["startertenancy"] = field_37 attributes["tenancy"] = field_38 diff --git a/spec/models/form/lettings/pages/property_number_of_bedrooms_spec.rb b/spec/models/form/lettings/pages/property_number_of_bedrooms_spec.rb new file mode 100644 index 000000000..f6cec39e8 --- /dev/null +++ b/spec/models/form/lettings/pages/property_number_of_bedrooms_spec.rb @@ -0,0 +1,33 @@ +require "rails_helper" + +RSpec.describe Form::Lettings::Pages::PropertyNumberOfBedrooms, type: :model do + subject(:page) { described_class.new(page_id, page_definition, subsection) } + + let(:page_id) { nil } + let(:page_definition) { nil } + let(:subsection) { instance_double(Form::Subsection) } + + it "has correct subsection" do + expect(page.subsection).to eq(subsection) + end + + it "has correct questions" do + expect(page.questions.map(&:id)).to eq(%w[beds]) + end + + it "has the correct id" do + expect(page.id).to eq("property_number_of_bedrooms") + end + + it "has the correct header" do + expect(page.header).to be_nil + end + + it "has the correct description" do + expect(page.description).to be_nil + end + + it "has the correct depends_on" do + expect(page.depends_on).to eq([{ "is_general_needs?" => true, "is_beds_inferred?" => false }]) + end +end diff --git a/spec/models/form/lettings/questions/beds_spec.rb b/spec/models/form/lettings/questions/beds_spec.rb new file mode 100644 index 000000000..77340f5d5 --- /dev/null +++ b/spec/models/form/lettings/questions/beds_spec.rb @@ -0,0 +1,65 @@ +require "rails_helper" + +RSpec.describe Form::Lettings::Questions::Beds, type: :model do + subject(:question) { described_class.new(question_id, question_definition, page) } + + let(:question_id) { nil } + let(:question_definition) { nil } + let(:page) { instance_double(Form::Page) } + let(:subsection) { instance_double(Form::Subsection) } + let(:form) { instance_double(Form) } + + before do + allow(form).to receive(:start_year_after_2024?).and_return(false) + allow(page).to receive(:subsection).and_return(subsection) + allow(subsection).to receive(:form).and_return(form) + end + + it "has correct page" do + expect(question.page).to eq(page) + end + + it "has the correct id" do + expect(question.id).to eq("beds") + end + + it "has the correct header" do + expect(question.header).to eq("How many bedrooms does the property have?") + end + + it "has the correct check_answer_label" do + expect(question.check_answer_label).to eq("Number of bedrooms") + end + + it "has the correct type" do + expect(question.type).to eq("numeric") + end + + it "is not marked as derived" do + expect(question.derived?).to be false + end + + it "has the correct min" do + expect(question.min).to eq(1) + end + + it "has the correct max" do + expect(question.max).to eq(12) + end + + context "with 2023/24 form" do + it "has the correct hint_text" do + expect(question.hint_text).to eq("If shared accommodation, enter the number of bedrooms occupied by this household. A bedsit has 1 bedroom.") + end + end + + context "with 2024/25 form" do + before do + allow(form).to receive(:start_year_after_2024?).and_return(true) + end + + it "has the correct hint_text" do + expect(question.hint_text).to eq("If shared accommodation, enter the number of bedrooms occupied by this household.") + end + end +end diff --git a/spec/services/bulk_upload/lettings/year2024/row_parser_spec.rb b/spec/services/bulk_upload/lettings/year2024/row_parser_spec.rb index a37110785..58be059fc 100644 --- a/spec/services/bulk_upload/lettings/year2024/row_parser_spec.rb +++ b/spec/services/bulk_upload/lettings/year2024/row_parser_spec.rb @@ -1816,6 +1816,24 @@ RSpec.describe BulkUpload::Lettings::Year2024::RowParser do end end + describe "#beds" do + context "when property is a bedsit" do + let(:attributes) { setup_section_params.merge({ field_26: 2, field_29: 2 }) } + + it "sets value to 1 even if field_29 contradicts this" do + expect(parser.log.beds).to be(1) + end + end + + context "when property is not a bedsit" do + let(:attributes) { setup_section_params.merge({ field_26: 1, field_29: 2 }) } + + it "sets value to field_29" do + expect(parser.log.beds).to be(2) + end + end + end + describe "#cbl" do context "when field_112 is yes ie 1" do let(:attributes) { { bulk_upload:, field_112: 1 } }