diff --git a/Gemfile.lock b/Gemfile.lock index bcd977d68..3d1a3f0d3 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -343,7 +343,7 @@ GEM activesupport (>= 3.0.0) raabro (1.4.0) racc (1.8.1) - rack (3.1.11) + rack (3.1.12) rack-attack (6.7.0) rack (>= 1.0, < 4) rack-mini-profiler (3.3.1) diff --git a/app/controllers/address_search_controller.rb b/app/controllers/address_search_controller.rb index 616d5b702..74cda65c2 100644 --- a/app/controllers/address_search_controller.rb +++ b/app/controllers/address_search_controller.rb @@ -5,7 +5,9 @@ class AddressSearchController < ApplicationController def index query = params[:query] - if query.match?(/\A\d+\z/) && query.length > 5 + if query.nil? + render json: { error: "Query cannot be blank." }, status: :bad_request + elsif query.match?(/\A\d+\z/) && query.length > 5 # Query is all numbers and greater than 5 digits, assume it's a UPRN service = UprnClient.new(query) service.call @@ -38,7 +40,7 @@ class AddressSearchController < ApplicationController address_service.call uprn_service.call - results = ([uprn_service.result] || []) + (address_service.result || []) + results = [uprn_service.result, *address_service.result].compact if address_service.error.present? && uprn_service.error.present? render json: { error: "Address and UPRN are not recognised." }, status: :not_found diff --git a/app/models/derived_variables/lettings_log_variables.rb b/app/models/derived_variables/lettings_log_variables.rb index 8cabf1ce5..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 @@ -375,6 +382,7 @@ private self.address_line2 = nil self.town_or_city = nil self.county = nil + self.postcode_full = nil end def address_answered_without_uprn? diff --git a/app/models/derived_variables/sales_log_variables.rb b/app/models/derived_variables/sales_log_variables.rb index a570abc35..18b26ad85 100644 --- a/app/models/derived_variables/sales_log_variables.rb +++ b/app/models/derived_variables/sales_log_variables.rb @@ -258,10 +258,10 @@ private self.address_line2 = nil self.town_or_city = nil self.county = nil + self.postcode_full = nil self.pcode1 = nil self.pcode2 = nil self.pcodenk = nil - self.postcode_full = nil self.is_la_inferred = nil self.la = nil end diff --git a/app/models/form/lettings/questions/address_search.rb b/app/models/form/lettings/questions/address_search.rb index ed7edf894..c6abe9a6c 100644 --- a/app/models/form/lettings/questions/address_search.rb +++ b/app/models/form/lettings/questions/address_search.rb @@ -12,11 +12,9 @@ class Form::Lettings::Questions::AddressSearch < ::Form::Question def answer_options(log = nil, _user = nil) return {} unless ActiveRecord::Base.connected? - return {} unless log&.address_options&.any? + return {} unless log&.address_search_options&.any? - log.address_options.each_with_object({}) do |option, hash| - hash[option[:uprn]] = { "value" => "#{option[:address]} (#{option[:uprn]})" } - end + { log.address_search_options.first[:uprn] => { "value" => "#{log.address_search_options.first[:address]} (#{log.address_search_options.first[:uprn]})" } } end def get_extra_check_answer_value(log) diff --git a/app/models/form/lettings/subsections/property_information.rb b/app/models/form/lettings/subsections/property_information.rb index 475ff0a8c..3b827bf48 100644 --- a/app/models/form/lettings/subsections/property_information.rb +++ b/app/models/form/lettings/subsections/property_information.rb @@ -56,6 +56,8 @@ class Form::Lettings::Subsections::PropertyInformation < ::Form::Subsection end def displayed_in_tasklist?(log) + return true if form.start_year_2025_or_later? + !(log.is_supported_housing? && log.is_renewal?) end end diff --git a/app/models/form/sales/questions/address_search.rb b/app/models/form/sales/questions/address_search.rb index d6acbaba1..c219f13f1 100644 --- a/app/models/form/sales/questions/address_search.rb +++ b/app/models/form/sales/questions/address_search.rb @@ -12,11 +12,9 @@ class Form::Sales::Questions::AddressSearch < ::Form::Question def answer_options(log = nil, _user = nil) return {} unless ActiveRecord::Base.connected? - return {} unless log&.address_options&.any? + return {} unless log&.address_search_options&.any? - log.address_options.each_with_object({}) do |option, hash| - hash[option[:uprn]] = { "value" => "#{option[:address]} (#{option[:uprn]})" } - end + { log.address_search_options.first[:uprn] => { "value" => "#{log.address_search_options.first[:address]} (#{log.address_search_options.first[:uprn]})" } } end def get_extra_check_answer_value(log) 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/app/models/log.rb b/app/models/log.rb index 4c4116a23..31072dc44 100644 --- a/app/models/log.rb +++ b/app/models/log.rb @@ -128,38 +128,40 @@ class Log < ApplicationRecord "#{address_line1_input}, #{postcode_full_input}" end - def address_options - if uprn.present? - service = UprnClient.new(uprn) - service.call - if service.result.blank? || service.error.present? - @address_options = [] - return @address_options - end + def address_search_options + return if uprn.blank? + + service = UprnClient.new(uprn) + service.call + if service.result.blank? || service.error.present? + @address_options = [] + return @address_options + end - presenter = UprnDataPresenter.new(service.result) - @address_options = [{ address: presenter.address, uprn: presenter.uprn }] - else - return @address_options if @address_options && @last_searched_address_string == address_string - return if address_string.blank? + presenter = UprnDataPresenter.new(service.result) + @address_options = [{ address: presenter.address, uprn: presenter.uprn }] + end - @last_searched_address_string = address_string + def address_options + return @address_options if @address_options && @last_searched_address_string == address_string + return if address_string.blank? - service = AddressClient.new(address_string) - service.call - if service.result.blank? || service.error.present? - @address_options = [] - return @address_options - end + @last_searched_address_string = address_string - address_opts = [] - service.result.first(10).each do |result| - presenter = AddressDataPresenter.new(result) - address_opts.append({ address: presenter.address, uprn: presenter.uprn }) - end + service = AddressClient.new(address_string) + service.call + if service.result.blank? || service.error.present? + @address_options = [] + return @address_options + end - @address_options = address_opts + address_opts = [] + service.result.first(10).each do |result| + presenter = AddressDataPresenter.new(result) + address_opts.append({ address: presenter.address, uprn: presenter.uprn }) end + + @address_options = address_opts end def collection_start_year @@ -415,6 +417,7 @@ private self.address_line2 = address_line2_as_entered self.county = county_as_entered self.town_or_city = town_or_city_as_entered + self.la = la_as_entered self.manual_address_entry_selected = true end end diff --git a/spec/models/form/lettings/questions/address_search_spec.rb b/spec/models/form/lettings/questions/address_search_spec.rb index d063a94dc..8635aa017 100644 --- a/spec/models/form/lettings/questions/address_search_spec.rb +++ b/spec/models/form/lettings/questions/address_search_spec.rb @@ -32,6 +32,39 @@ RSpec.describe Form::Lettings::Questions::AddressSearch, type: :model do end end + describe "#answer_options" do + before do + body = { + results: [ + { + DPA: { + "POSTCODE": "AA1 1AA", + "POST_TOWN": "Test Town", + "ORGANISATION_NAME": "1, Test Road", + "ADDRESS": "1 Test Street, Test City, AA1 1AA", + "UPRN": "123", + }, + }, + ], + }.to_json + + WebMock.stub_request(:get, "https://api.os.uk/search/places/v1/uprn?dataset=DPA,LPI&key=OS_DATA_KEY&uprn=123") + .to_return(status: 200, body:, headers: {}) + end + + let(:log_with_uprn) { build(:lettings_log, :completed, uprn: 123, manual_address_entry_selected: false, address_line1_input: "1, Test Road", postcode_full_input: "Test Town") } + + let(:log_without_uprn) { build(:lettings_log, :completed, uprn: nil, manual_address_entry_selected: false, address_line1_input: "1, Test Road", postcode_full_input: "Test Town") } + + it "returns an answer option when uprn is present" do + expect(question.answer_options(log_with_uprn)).to eq({ "123" => { "value" => "1 Test Street, Test City, AA1 1AA (123)" } }) + end + + it "does not return an answer option when uprn is not present" do + expect(question.answer_options(log_without_uprn)).to eq({ nil => { "value" => " ()" } }) + end + end + describe "get_extra_check_answer_value" do context "when address is not present" do let(:log) { build(:lettings_log, manual_address_entry_selected: false) } diff --git a/spec/models/form/lettings/subsections/property_information_spec.rb b/spec/models/form/lettings/subsections/property_information_spec.rb index 2630c83d4..ed0add494 100644 --- a/spec/models/form/lettings/subsections/property_information_spec.rb +++ b/spec/models/form/lettings/subsections/property_information_spec.rb @@ -84,6 +84,14 @@ RSpec.describe Form::Lettings::Subsections::PropertyInformation, type: :model do ], ) end + + context "when it is supported housing and a renewal" do + let(:log) { FactoryBot.build(:lettings_log, needstype: 2, renewal: 1) } + + it "is not displayed in tasklist" do + expect(property_information.displayed_in_tasklist?(log)).to eq(false) + end + end end context "when 2025" do @@ -118,6 +126,14 @@ RSpec.describe Form::Lettings::Subsections::PropertyInformation, type: :model do ], ) end + + context "when it is supported housing and a renewal" do + let(:log) { FactoryBot.build(:lettings_log, needstype: 2, renewal: 1) } + + it "is displayed in tasklist" do + expect(property_information.displayed_in_tasklist?(log)).to eq(true) + end + end end end diff --git a/spec/models/form/sales/questions/address_search_spec.rb b/spec/models/form/sales/questions/address_search_spec.rb index bb30cbfa0..a2a2b51c9 100644 --- a/spec/models/form/sales/questions/address_search_spec.rb +++ b/spec/models/form/sales/questions/address_search_spec.rb @@ -32,6 +32,39 @@ RSpec.describe Form::Sales::Questions::AddressSearch, type: :model do end end + describe "#answer_options" do + before do + body = { + results: [ + { + DPA: { + "POSTCODE": "AA1 1AA", + "POST_TOWN": "Test Town", + "ORGANISATION_NAME": "1, Test Road", + "ADDRESS": "1 Test Street, Test City, AA1 1AA", + "UPRN": "123", + }, + }, + ], + }.to_json + + WebMock.stub_request(:get, "https://api.os.uk/search/places/v1/uprn?dataset=DPA,LPI&key=OS_DATA_KEY&uprn=123") + .to_return(status: 200, body:, headers: {}) + end + + let(:log_with_uprn) { build(:sales_log, :completed, uprn: 123, manual_address_entry_selected: false, address_line1_input: "1, Test Road", postcode_full_input: "Test Town") } + + let(:log_without_uprn) { build(:sales_log, :completed, uprn: nil, manual_address_entry_selected: false, address_line1_input: "1, Test Road", postcode_full_input: "Test Town") } + + it "returns an answer option when uprn is present" do + expect(question.answer_options(log_with_uprn)).to eq({ "123" => { "value" => "1 Test Street, Test City, AA1 1AA (123)" } }) + end + + it "does not return an answer option when uprn is not present" do + expect(question.answer_options(log_without_uprn)).to eq({ nil => { "value" => " ()" } }) + end + end + describe "get_extra_check_answer_value" do context "when address is not present" do let(:log) { build(:sales_log, manual_address_entry_selected: false) } 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 diff --git a/spec/requests/address_search_controller_spec.rb b/spec/requests/address_search_controller_spec.rb index 5c2acd11a..7c8523abe 100644 --- a/spec/requests/address_search_controller_spec.rb +++ b/spec/requests/address_search_controller_spec.rb @@ -144,5 +144,45 @@ RSpec.describe AddressSearchController, type: :request do expect(sales_log.la).to eq(nil) end end + + context "when searching by address and UPRN" do + let(:sales_log) { create(:sales_log, :completed, manual_address_entry_selected: false, assigned_to: user) } + + context "and theres no uprn returned" do + before do + body = { results: [{ DPA: { "ADDRESS": "1, Test Street", "UPRN": "123" } }] }.to_json + uprn_body = { results: [{ DPA: nil }] }.to_json + WebMock.stub_request(:get, "https://api.os.uk/search/places/v1/find?key=OS_DATA_KEY&maxresults=10&minmatch=0.2&query=100") + .to_return(status: 200, body:, headers: {}) + WebMock.stub_request(:get, "https://api.os.uk/search/places/v1/uprn?dataset=DPA,LPI&key=OS_DATA_KEY&uprn=100") + .to_return(status: 200, body: uprn_body, headers: {}) + end + + it "returns the address results" do + get "/address-search?query=100" + + expect(response).to have_http_status(:ok) + expect(response.body).to eq([{ text: "1, Test Street", value: "123" }].to_json) + end + end + + context "and theres no address returned" do + before do + body = { results: [{ DPA: nil }] }.to_json + uprn_body = { results: [{ DPA: { "ADDRESS": "2, Test Street", UPRN: "321" } }] }.to_json + WebMock.stub_request(:get, "https://api.os.uk/search/places/v1/find?key=OS_DATA_KEY&maxresults=10&minmatch=0.2&query=100") + .to_return(status: 200, body:, headers: {}) + WebMock.stub_request(:get, "https://api.os.uk/search/places/v1/uprn?dataset=DPA,LPI&key=OS_DATA_KEY&uprn=100") + .to_return(status: 200, body: uprn_body, headers: {}) + end + + it "returns the address results" do + get "/address-search?query=100" + + expect(response).to have_http_status(:ok) + expect(response.body).to eq([{ text: "2, Test Street", value: "321" }].to_json) + end + end + end end end diff --git a/spec/services/bulk_upload/sales/year2024/row_parser_spec.rb b/spec/services/bulk_upload/sales/year2024/row_parser_spec.rb index 90bd87291..b4e9e1b49 100644 --- a/spec/services/bulk_upload/sales/year2024/row_parser_spec.rb +++ b/spec/services/bulk_upload/sales/year2024/row_parser_spec.rb @@ -1063,7 +1063,7 @@ RSpec.describe BulkUpload::Sales::Year2024::RowParser do end context "and all key address fields are present" do - let(:attributes) { setup_section_params.merge({ field_22: nil, field_23: "address line 1", field_25: "town or city", field_27: "AA1", field_28: "1AA" }) } + let(:attributes) { setup_section_params.merge({ field_22: nil, field_23: "address line 1", field_25: "town or city", field_27: "AA1", field_28: "1AA", field_29: "E06000023" }) } context "and an address can be found with a high enough match rating" do before do @@ -1073,7 +1073,7 @@ RSpec.describe BulkUpload::Sales::Year2024::RowParser do it "does not add errors" do parser.valid? - %i[field_22 field_23 field_24 field_25 field_26 field_27 field_28].each do |field| + %i[field_22 field_23 field_24 field_25 field_26 field_27 field_28 field_29].each do |field| expect(parser.errors[field]).to be_empty end end @@ -1092,7 +1092,7 @@ RSpec.describe BulkUpload::Sales::Year2024::RowParser do it "does not add errors" do parser.valid? - %i[field_22 field_23 field_24 field_25 field_26 field_27 field_28].each do |field| + %i[field_22 field_23 field_24 field_25 field_26 field_27 field_28 field_29].each do |field| expect(parser.errors[field]).to be_empty end end @@ -1103,6 +1103,7 @@ RSpec.describe BulkUpload::Sales::Year2024::RowParser do expect(parser.log.address_line1).to eq("address line 1") expect(parser.log.town_or_city).to eq("town or city") expect(parser.log.postcode_full).to eq("AA1 1AA") + expect(parser.log.la).to eq("E06000023") end end diff --git a/spec/services/bulk_upload/sales/year2025/row_parser_spec.rb b/spec/services/bulk_upload/sales/year2025/row_parser_spec.rb index 86f264401..28aac4fea 100644 --- a/spec/services/bulk_upload/sales/year2025/row_parser_spec.rb +++ b/spec/services/bulk_upload/sales/year2025/row_parser_spec.rb @@ -978,7 +978,7 @@ RSpec.describe BulkUpload::Sales::Year2025::RowParser do end context "and all key address fields are present" do - let(:attributes) { setup_section_params.merge({ field_16: nil, field_17: "address line 1", field_19: "town or city", field_21: "AA1", field_22: "1AA" }) } + let(:attributes) { setup_section_params.merge({ field_16: nil, field_17: "address line 1", field_19: "town or city", field_21: "AA1", field_22: "1AA", field_23: "E06000023" }) } context "and an address can be found with a high enough match rating" do before do @@ -988,7 +988,7 @@ RSpec.describe BulkUpload::Sales::Year2025::RowParser do it "does not add errors" do parser.valid? - %i[field_16 field_17 field_18 field_19 field_20 field_21 field_22].each do |field| + %i[field_16 field_17 field_18 field_19 field_20 field_21 field_22 field_23].each do |field| expect(parser.errors[field]).to be_empty end end @@ -1007,7 +1007,7 @@ RSpec.describe BulkUpload::Sales::Year2025::RowParser do it "does not add errors" do parser.valid? - %i[field_16 field_17 field_18 field_19 field_20 field_21 field_22].each do |field| + %i[field_16 field_17 field_18 field_19 field_20 field_21 field_22 field_23].each do |field| expect(parser.errors[field]).to be_empty end end @@ -1018,6 +1018,7 @@ RSpec.describe BulkUpload::Sales::Year2025::RowParser do expect(parser.log.address_line1).to eq("address line 1") expect(parser.log.town_or_city).to eq("town or city") expect(parser.log.postcode_full).to eq("AA1 1AA") + expect(parser.log.la).to eq("E06000023") end end