diff --git a/app/models/derived_variables/lettings_log_variables.rb b/app/models/derived_variables/lettings_log_variables.rb index 8cabf1ce5..42dadf43c 100644 --- a/app/models/derived_variables/lettings_log_variables.rb +++ b/app/models/derived_variables/lettings_log_variables.rb @@ -375,6 +375,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/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/log.rb b/app/models/log.rb index 3ef95de5b..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 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/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) }