Browse Source

Update UPRN derived fields

pull/1432/head
Jack S 3 years ago
parent
commit
f738aefbaf
  1. 21
      app/models/derived_variables/lettings_log_variables.rb
  2. 5
      app/models/lettings_log.rb
  3. 1
      app/models/log.rb
  4. 57
      spec/models/lettings_log_spec.rb
  5. 10
      spec/models/sales_log_spec.rb

21
app/models/derived_variables/lettings_log_variables.rb

@ -94,6 +94,17 @@ module DerivedVariables::LettingsLogVariables
self.vacdays = property_vacant_days
set_housingneeds_fields if housingneeds?
if uprn_known&.zero?
self.uprn = nil
end
if uprn_confirmed&.zero?
self.uprn = nil
self.uprn_known = 0
end
reset_address_fields! if is_supported_housing?
end
private
@ -229,4 +240,14 @@ private
self.housingneeds_g = 0
self.housingneeds_h = 0
end
def reset_address_fields!
self.uprn = nil
self.uprn_known = nil
self.uprn_confirmed = nil
self.address_line1 = nil
self.address_line2 = nil
self.town_or_city = nil
self.county = nil
end
end

5
app/models/lettings_log.rb

@ -32,6 +32,7 @@ class LettingsLog < Log
before_validation :reset_location_fields!, unless: :postcode_known?
before_validation :reset_previous_location_fields!, unless: :previous_postcode_known?
before_validation :set_derived_fields!
after_validation :process_uprn_change!, if: :should_process_uprn_change?
belongs_to :scheme, optional: true
belongs_to :location, optional: true
@ -671,4 +672,8 @@ private
def unknown_housingneeds?
housingneeds == 3
end
def should_process_uprn_change?
uprn_changed? && startdate && startdate.year >= 2023
end
end

1
app/models/log.rb

@ -45,6 +45,7 @@ class Log < ApplicationRecord
self.address_line2 = presenter.address_line2
self.town_or_city = presenter.town_or_city
self.postcode_full = presenter.postcode
self.county = nil
process_postcode_changes!
end
end

57
spec/models/lettings_log_spec.rb

@ -1,6 +1,7 @@
require "rails_helper"
require "shared/shared_examples_for_derived_fields"
# rubocop:disable RSpec/AnyInstance
RSpec.describe LettingsLog do
let(:different_managing_organisation) { create(:organisation) }
let(:created_by_user) { create(:user) }
@ -2995,4 +2996,60 @@ RSpec.describe LettingsLog do
end
end
end
describe "#process_uprn_change!" do
context "when UPRN set to a value" do
let(:lettings_log) do
create(
:lettings_log,
uprn: "123456789",
uprn_confirmed: 1,
county: "county",
)
end
it "updates sales log fields" do
lettings_log.uprn = "1111111"
allow_any_instance_of(UprnClient).to receive(:call)
allow_any_instance_of(UprnClient).to receive(:result).and_return({
"UPRN" => "UPRN",
"UDPRN" => "UDPRN",
"ADDRESS" => "full address",
"SUB_BUILDING_NAME" => "0",
"BUILDING_NAME" => "building name",
"THOROUGHFARE_NAME" => "thoroughfare",
"POST_TOWN" => "posttown",
"POSTCODE" => "postcode",
})
expect { lettings_log.process_uprn_change! }.to change(lettings_log, :address_line1).from(nil).to("0, Building Name, Thoroughfare")
.and change(lettings_log, :town_or_city).from(nil).to("Posttown")
.and change(lettings_log, :postcode_full).from(nil).to("POSTCODE")
.and change(lettings_log, :uprn_confirmed).from(1).to(nil)
.and change(lettings_log, :county).from("county").to(nil)
end
end
context "when UPRN nil" do
let(:lettings_log) { create(:lettings_log, uprn: nil) }
it "does not update sales log" do
expect { lettings_log.process_uprn_change! }.not_to change(lettings_log, :attributes)
end
end
context "when service errors" do
let(:lettings_log) { create(:lettings_log, uprn: "123456789", uprn_confirmed: 1) }
let(:error_message) { "error" }
it "adds error to sales log" do
allow_any_instance_of(UprnClient).to receive(:call)
allow_any_instance_of(UprnClient).to receive(:error).and_return(error_message)
expect { lettings_log.process_uprn_change! }.to change { lettings_log.errors[:uprn] }.from([]).to([error_message])
end
end
end
end
# rubocop:enable RSpec/AnyInstance

10
spec/models/sales_log_spec.rb

@ -511,7 +511,14 @@ RSpec.describe SalesLog, type: :model do
describe "#process_uprn_change!" do
context "when UPRN set to a value" do
let(:sales_log) { create(:sales_log, uprn: "123456789", uprn_confirmed: 1) }
let(:sales_log) do
create(
:sales_log,
uprn: "123456789",
uprn_confirmed: 1,
county: "county",
)
end
it "updates sales log fields" do
sales_log.uprn = "1111111"
@ -532,6 +539,7 @@ RSpec.describe SalesLog, type: :model do
.and change(sales_log, :town_or_city).from(nil).to("Posttown")
.and change(sales_log, :postcode_full).from(nil).to("POSTCODE")
.and change(sales_log, :uprn_confirmed).from(1).to(nil)
.and change(sales_log, :county).from("county").to(nil)
end
end

Loading…
Cancel
Save