diff --git a/app/models/derived_variables/lettings_log_variables.rb b/app/models/derived_variables/lettings_log_variables.rb index 42dadf43c..1808aaab8 100644 --- a/app/models/derived_variables/lettings_log_variables.rb +++ b/app/models/derived_variables/lettings_log_variables.rb @@ -83,12 +83,19 @@ module DerivedVariables::LettingsLogVariables end set_housingneeds_fields if housingneeds? + if form.start_year_2025_or_later? && is_general_needs? + if changed_to_newbuild? && uprn.nil? + self.manual_address_entry_selected = true + end + + self.manual_address_entry_selected = address_answered_without_uprn? if changed_from_newbuild? + end self.uprn_known = 0 if address_answered_without_uprn? if uprn_known&.zero? self.uprn = nil - if uprn_known_was == 1 + if uprn_known_was == 1 && (rsnvac != 15 || !form.start_year_2025_or_later?) self.address_line1 = nil self.address_line2 = nil self.town_or_city = nil diff --git a/app/models/lettings_log.rb b/app/models/lettings_log.rb index 920aed628..47ca80705 100644 --- a/app/models/lettings_log.rb +++ b/app/models/lettings_log.rb @@ -740,6 +740,14 @@ class LettingsLog < Log "lettings_log" end + def changed_to_newbuild? + rsnvac == 15 && rsnvac_was != 15 + end + + def changed_from_newbuild? + rsnvac != 15 && rsnvac_was == 15 + end + private def reset_invalid_unresolved_log_fields! diff --git a/spec/models/lettings_log_spec.rb b/spec/models/lettings_log_spec.rb index e9493a017..9f0ddec42 100644 --- a/spec/models/lettings_log_spec.rb +++ b/spec/models/lettings_log_spec.rb @@ -849,6 +849,192 @@ RSpec.describe LettingsLog do expect(lettings_log.reload.is_la_inferred).to eq(false) end end + + context "when the log changes from new build to not new build" do + before do + allow(FormHandler.instance).to receive(:current_lettings_form).and_call_original + Timecop.freeze(2025, 5, 1) + Singleton.__init__(FormHandler) + end + + after do + Timecop.unfreeze + end + + context "and the address is entered" do + let(:address_lettings_log) do + create(:lettings_log, + :setup_completed, + startdate: Time.zone.yesterday, + mrcdate: nil, + rsnvac: 15, + manual_address_entry_selected: true, + first_time_property_let_as_social_housing: 1, + address_line1: "Address line 1", + address_line2: "Address line 2", + town_or_city: "Town", + postcode_full: "AA1 1AA") + end + + it "keeps the manually entered address" do + expect(address_lettings_log.manual_address_entry_selected).to eq(true) + expect(address_lettings_log.uprn_selection).to eq(nil) + expect(address_lettings_log.uprn_known).to eq(0) + expect(address_lettings_log.uprn).to eq(nil) + expect(address_lettings_log.address_line1).to eq("Address line 1") + expect(address_lettings_log.address_line2).to eq("Address line 2") + expect(address_lettings_log.town_or_city).to eq("Town") + expect(address_lettings_log.postcode_full).to eq("AA1 1AA") + + address_lettings_log.update!(rsnvac: 16) + expect(address_lettings_log.manual_address_entry_selected).to eq(true) + expect(address_lettings_log.address_line1).to eq("Address line 1") + expect(address_lettings_log.address_line2).to eq("Address line 2") + expect(address_lettings_log.town_or_city).to eq("Town") + expect(address_lettings_log.postcode_full).to eq("AA1 1AA") + end + end + + context "and the address is not entered" do + let(:address_lettings_log) do + create(:lettings_log, + :setup_completed, + startdate: Time.zone.yesterday, + mrcdate: nil, + rsnvac: 15, + manual_address_entry_selected: true, + first_time_property_let_as_social_housing: 1, + address_line1: nil, + address_line2: nil, + town_or_city: nil, + postcode_full: nil) + end + + it "routes to the uprn question" do + expect(address_lettings_log.manual_address_entry_selected).to eq(true) + expect(address_lettings_log.uprn_selection).to eq(nil) + expect(address_lettings_log.uprn_known).to eq(0) + expect(address_lettings_log.uprn).to eq(nil) + expect(address_lettings_log.address_line1).to eq(nil) + expect(address_lettings_log.address_line2).to eq(nil) + expect(address_lettings_log.town_or_city).to eq(nil) + expect(address_lettings_log.postcode_full).to eq(nil) + + address_lettings_log.update!(rsnvac: 16) + expect(address_lettings_log.manual_address_entry_selected).to eq(false) + expect(address_lettings_log.uprn_selection).to eq(nil) + expect(address_lettings_log.uprn_known).to eq(nil) + end + end + end + + context "when the log changes from not new build to new build" do + before do + allow(FormHandler.instance).to receive(:current_lettings_form).and_call_original + Timecop.freeze(2025, 5, 1) + Singleton.__init__(FormHandler) + end + + after do + Timecop.unfreeze + end + + context "and the uprn is selected" do + let(:address_lettings_log) do + create(:lettings_log, + :setup_completed, + startdate: Time.zone.yesterday, + mrcdate: nil, + rsnvac: 17, + manual_address_entry_selected: false, + first_time_property_let_as_social_housing: 1, + uprn_selection: "1", + uprn_confirmed: "1", + uprn_known: "1", + uprn: "1") + end + + it "keeps the uprn" do + expect(address_lettings_log.manual_address_entry_selected).to eq(false) + expect(address_lettings_log.uprn).to eq("1") + expect(address_lettings_log.address_line1).to eq("1, Test Street") + expect(address_lettings_log.town_or_city).to eq("Test Town") + expect(address_lettings_log.postcode_full).to eq("AA1 1AA") + + address_lettings_log.update!(rsnvac: 15) + expect(address_lettings_log.manual_address_entry_selected).to eq(false) + expect(address_lettings_log.address_line1).to eq("1, Test Street") + expect(address_lettings_log.town_or_city).to eq("Test Town") + expect(address_lettings_log.postcode_full).to eq("AA1 1AA") + expect(address_lettings_log.uprn_selection).to eq("1") + expect(address_lettings_log.uprn).to eq("1") + expect(address_lettings_log.uprn_known).to eq(1) + end + end + + context "and the address is manually entered" do + let(:address_lettings_log) do + create(:lettings_log, + :setup_completed, + startdate: Time.zone.yesterday, + mrcdate: nil, + rsnvac: 16, + manual_address_entry_selected: true, + first_time_property_let_as_social_housing: 1, + uprn_selection: "uprn_not_listed", + address_line1: "Address line 1", + address_line2: "Address line 2", + town_or_city: "Town", + postcode_full: "AA1 1AA") + end + + it "keeps the manually entered address" do + expect(address_lettings_log.manual_address_entry_selected).to eq(true) + expect(address_lettings_log.address_line1).to eq("Address line 1") + expect(address_lettings_log.address_line2).to eq("Address line 2") + expect(address_lettings_log.town_or_city).to eq("Town") + expect(address_lettings_log.postcode_full).to eq("AA1 1AA") + + address_lettings_log.update!(rsnvac: 15) + expect(address_lettings_log.manual_address_entry_selected).to eq(true) + expect(address_lettings_log.address_line1).to eq("Address line 1") + expect(address_lettings_log.address_line2).to eq("Address line 2") + expect(address_lettings_log.town_or_city).to eq("Town") + expect(address_lettings_log.postcode_full).to eq("AA1 1AA") + end + end + + context "and the address is not entered" do + let(:address_lettings_log) do + create(:lettings_log, + :setup_completed, + startdate: Time.zone.yesterday, + mrcdate: nil, + rsnvac: 17, + manual_address_entry_selected: false, + first_time_property_let_as_social_housing: 1, + address_line1: nil, + address_line2: nil, + town_or_city: nil, + postcode_full: nil) + end + + it "routes to the manual address questions" do + expect(address_lettings_log.manual_address_entry_selected).to eq(false) + expect(address_lettings_log.uprn_selection).to eq(nil) + expect(address_lettings_log.address_line1).to eq(nil) + expect(address_lettings_log.address_line2).to eq(nil) + expect(address_lettings_log.town_or_city).to eq(nil) + expect(address_lettings_log.postcode_full).to eq(nil) + + address_lettings_log.update!(rsnvac: 15) + expect(address_lettings_log.manual_address_entry_selected).to eq(true) + expect(address_lettings_log.uprn_selection).to eq(nil) + expect(address_lettings_log.uprn).to eq(nil) + expect(address_lettings_log.uprn_known).to eq(0) + end + end + end end describe "optional fields" do