Browse Source

Merge remote-tracking branch 'origin/CLDC-3857-Add-new-questions-to-organisation-setup' into CLDC-3857-Add-new-questions-to-organisation-setup

pull/2971/head
Manny Dinssa 2 months ago
parent
commit
5e53086138
  1. 1
      app/models/derived_variables/lettings_log_variables.rb
  2. 2
      app/models/derived_variables/sales_log_variables.rb
  3. 6
      app/models/form/lettings/questions/address_search.rb
  4. 6
      app/models/form/sales/questions/address_search.rb
  5. 55
      app/models/log.rb
  6. 33
      spec/models/form/lettings/questions/address_search_spec.rb
  7. 33
      spec/models/form/sales/questions/address_search_spec.rb
  8. 7
      spec/services/bulk_upload/sales/year2024/row_parser_spec.rb
  9. 7
      spec/services/bulk_upload/sales/year2025/row_parser_spec.rb

1
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?

2
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

6
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)

6
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)

55
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

33
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) }

33
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) }

7
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

7
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

Loading…
Cancel
Save