From cc565b6424911557ed15555e4035062685c06500 Mon Sep 17 00:00:00 2001 From: Nat Dean-Lewis Date: Tue, 15 Sep 2026 11:36:37 +0100 Subject: [PATCH 1/5] CLDC-4515: don't reset address fields when location was changed from nil (i.e. on bulk upload log creation) --- .../lettings_log_variables.rb | 2 +- .../lettings_log_derived_fields_spec.rb | 33 +++++++++++++++++++ 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/app/models/derived_variables/lettings_log_variables.rb b/app/models/derived_variables/lettings_log_variables.rb index 230b2a1dc..ea79a322a 100644 --- a/app/models/derived_variables/lettings_log_variables.rb +++ b/app/models/derived_variables/lettings_log_variables.rb @@ -176,7 +176,7 @@ module DerivedVariables::LettingsLogVariables if !form.start_year_2026_or_later? && is_supported_housing? reset_address_fields! - elsif form.start_year_2026_or_later? && location_changed? + elsif form.start_year_2026_or_later? && location_changed? && location_id_was.present? reset_address_fields! self.la = nil end diff --git a/spec/models/lettings_log_derived_fields_spec.rb b/spec/models/lettings_log_derived_fields_spec.rb index c418c13cf..e15f6980e 100644 --- a/spec/models/lettings_log_derived_fields_spec.rb +++ b/spec/models/lettings_log_derived_fields_spec.rb @@ -1583,6 +1583,39 @@ RSpec.describe LettingsLog, type: :model do end end end + + context "when it is 2026 and the log is new, with a location assigned for the first time (e.g. bulk upload)", metadata: { year: 26 } do + let(:startdate) { collection_start_date_for_year(2026) } + let(:location_a) { create(:location) } + let(:log) { build(:lettings_log, startdate:, assigned_to: user) } + let(:la) { "E09000003" } + + around do |example| + Timecop.freeze(collection_start_date_for_year(2026)) do + Singleton.__init__(FormHandler) + example.run + end + end + + before do + allow(location_a).to receive(:lookup_postcode!).and_return(nil) + + log.assign_attributes(location: location_a, uprn:, uprn_known:, uprn_confirmed:, address_line1:, address_line2:, town_or_city:, county:, postcode_full:, la:, manual_address_entry_selected:) + end + + it "does not reset the address fields" do + expect { log.set_derived_fields! } + .to not_change { log.read_attribute(:uprn) } + .and not_change { log.read_attribute(:uprn_known) } + .and not_change { log.read_attribute(:uprn_confirmed) } + .and not_change { log.read_attribute(:address_line1) } + .and not_change { log.read_attribute(:address_line2) } + .and not_change { log.read_attribute(:town_or_city) } + .and not_change { log.read_attribute(:county) } + .and(not_change { log.read_attribute(:postcode_full) }) + .and(not_change { log.read_attribute(:la) }) + end + end end describe "address field behaviour for confidential schemes", metadata: { year: 26 } do From 6853da4ea420a4994323d9e090fd623b1acf48f3 Mon Sep 17 00:00:00 2001 From: Nat Dean-Lewis Date: Tue, 15 Sep 2026 11:45:21 +0100 Subject: [PATCH 2/5] CLDC-4515: update lettings log controller and lettings cya tests --- spec/features/form/check_answers_page_lettings_logs_spec.rb | 1 + spec/requests/lettings_logs_controller_spec.rb | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/spec/features/form/check_answers_page_lettings_logs_spec.rb b/spec/features/form/check_answers_page_lettings_logs_spec.rb index 62f9fad52..33b740163 100644 --- a/spec/features/form/check_answers_page_lettings_logs_spec.rb +++ b/spec/features/form/check_answers_page_lettings_logs_spec.rb @@ -18,6 +18,7 @@ RSpec.describe "Lettings Log Check Answers Page" do needstype: 2, scheme:, location:, + postcode_full: nil, ) end let(:empty_lettings_log) do diff --git a/spec/requests/lettings_logs_controller_spec.rb b/spec/requests/lettings_logs_controller_spec.rb index 6fbe88515..260101792 100644 --- a/spec/requests/lettings_logs_controller_spec.rb +++ b/spec/requests/lettings_logs_controller_spec.rb @@ -1252,7 +1252,7 @@ RSpec.describe LettingsLogsController, type: :request do before do create_list(:lettings_log, further_unresolved_logs_count, unresolved: true, assigned_to: user) - lettings_log.update!(needstype: 2, scheme:, location:) + lettings_log.update!(needstype: 2, scheme:, location:, postcode_full: nil) get lettings_log_path(lettings_log) end From dae910df32d1eb3710bba1970887b4f6e993d3d6 Mon Sep 17 00:00:00 2001 From: Nat Dean-Lewis Date: Tue, 15 Sep 2026 12:06:55 +0100 Subject: [PATCH 3/5] CLDC-4515: update lettings log spec and use persisted? for cleanliness --- app/models/derived_variables/lettings_log_variables.rb | 2 +- spec/models/lettings_log_spec.rb | 4 ++-- spec/requests/lettings_logs_controller_spec.rb | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/models/derived_variables/lettings_log_variables.rb b/app/models/derived_variables/lettings_log_variables.rb index ea79a322a..ed10b6d72 100644 --- a/app/models/derived_variables/lettings_log_variables.rb +++ b/app/models/derived_variables/lettings_log_variables.rb @@ -176,7 +176,7 @@ module DerivedVariables::LettingsLogVariables if !form.start_year_2026_or_later? && is_supported_housing? reset_address_fields! - elsif form.start_year_2026_or_later? && location_changed? && location_id_was.present? + elsif form.start_year_2026_or_later? && location_changed? && persisted? reset_address_fields! self.la = nil end diff --git a/spec/models/lettings_log_spec.rb b/spec/models/lettings_log_spec.rb index 779b7be4a..d124a06cf 100644 --- a/spec/models/lettings_log_spec.rb +++ b/spec/models/lettings_log_spec.rb @@ -1965,8 +1965,8 @@ RSpec.describe LettingsLog do context "when there is a duplicate supported housing log" do let(:scheme) { create(:scheme, owning_organisation: organisation) } let(:location) { create(:location, scheme:) } - let!(:supported_housing_log) { create(:lettings_log, :duplicate, needstype: 2, location:, scheme:, owning_organisation: organisation) } - let!(:duplicate_supported_housing_log) { create(:lettings_log, :duplicate, needstype: 2, location:, scheme:, owning_organisation: organisation) } + let!(:supported_housing_log) { create(:lettings_log, :duplicate, needstype: 2, location:, scheme:, owning_organisation: organisation, postcode_full: nil) } + let!(:duplicate_supported_housing_log) { create(:lettings_log, :duplicate, needstype: 2, location:, scheme:, owning_organisation: organisation, postcode_full: nil) } it "returns the log as a duplicate" do expect(duplicate_sets).to contain_exactly( diff --git a/spec/requests/lettings_logs_controller_spec.rb b/spec/requests/lettings_logs_controller_spec.rb index 260101792..6fbe88515 100644 --- a/spec/requests/lettings_logs_controller_spec.rb +++ b/spec/requests/lettings_logs_controller_spec.rb @@ -1252,7 +1252,7 @@ RSpec.describe LettingsLogsController, type: :request do before do create_list(:lettings_log, further_unresolved_logs_count, unresolved: true, assigned_to: user) - lettings_log.update!(needstype: 2, scheme:, location:, postcode_full: nil) + lettings_log.update!(needstype: 2, scheme:, location:) get lettings_log_path(lettings_log) end From 386a93bb1a89c7a8a1019534b52e29346db0e558 Mon Sep 17 00:00:00 2001 From: Nat Dean-Lewis Date: Tue, 15 Sep 2026 17:32:22 +0100 Subject: [PATCH 4/5] CLDC-4507: align sales address reset with lettings --- app/models/derived_variables/sales_log_variables.rb | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/app/models/derived_variables/sales_log_variables.rb b/app/models/derived_variables/sales_log_variables.rb index b93acedb6..433ed6676 100644 --- a/app/models/derived_variables/sales_log_variables.rb +++ b/app/models/derived_variables/sales_log_variables.rb @@ -56,6 +56,8 @@ module DerivedVariables::SalesLogVariables self.uprn = nil if uprn_known_was == 1 reset_address_fields! + self.la = nil + self.is_la_inferred = false end end @@ -63,6 +65,8 @@ module DerivedVariables::SalesLogVariables reset_address_fields! self.uprn_known = 0 self.uprn_confirmed = nil + self.la = nil + self.is_la_inferred = false end if form.start_year_2024_or_later? @@ -275,7 +279,5 @@ private self.pcode1 = nil self.pcode2 = nil self.pcodenk = nil - self.is_la_inferred = nil - self.la = nil end end From daa6aec15435539acc2b9f6c858974357c4f0353 Mon Sep 17 00:00:00 2001 From: Nat Dean-Lewis Date: Thu, 17 Sep 2026 17:22:11 +0100 Subject: [PATCH 5/5] feat: use location.postcode rather than nil --- spec/features/form/check_answers_page_lettings_logs_spec.rb | 2 +- spec/models/lettings_log_spec.rb | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/spec/features/form/check_answers_page_lettings_logs_spec.rb b/spec/features/form/check_answers_page_lettings_logs_spec.rb index 33b740163..3b6bc69a3 100644 --- a/spec/features/form/check_answers_page_lettings_logs_spec.rb +++ b/spec/features/form/check_answers_page_lettings_logs_spec.rb @@ -18,7 +18,7 @@ RSpec.describe "Lettings Log Check Answers Page" do needstype: 2, scheme:, location:, - postcode_full: nil, + postcode_full: location.postcode, ) end let(:empty_lettings_log) do diff --git a/spec/models/lettings_log_spec.rb b/spec/models/lettings_log_spec.rb index d124a06cf..166011ecb 100644 --- a/spec/models/lettings_log_spec.rb +++ b/spec/models/lettings_log_spec.rb @@ -1965,8 +1965,8 @@ RSpec.describe LettingsLog do context "when there is a duplicate supported housing log" do let(:scheme) { create(:scheme, owning_organisation: organisation) } let(:location) { create(:location, scheme:) } - let!(:supported_housing_log) { create(:lettings_log, :duplicate, needstype: 2, location:, scheme:, owning_organisation: organisation, postcode_full: nil) } - let!(:duplicate_supported_housing_log) { create(:lettings_log, :duplicate, needstype: 2, location:, scheme:, owning_organisation: organisation, postcode_full: nil) } + let!(:supported_housing_log) { create(:lettings_log, :duplicate, needstype: 2, location:, scheme:, owning_organisation: organisation, postcode_full: location.postcode) } + let!(:duplicate_supported_housing_log) { create(:lettings_log, :duplicate, needstype: 2, location:, scheme:, owning_organisation: organisation, postcode_full: location.postcode) } it "returns the log as a duplicate" do expect(duplicate_sets).to contain_exactly(