Browse Source

Add rake task to update LAs

pull/2449/head
Kat 2 years ago
parent
commit
35433a6a92
  1. 20
      app/models/lettings_log.rb
  2. 14
      lib/tasks/reinfer_local_authority.rake
  3. 88
      spec/lib/tasks/reinfer_local_authority_spec.rb

20
app/models/lettings_log.rb

@ -690,6 +690,16 @@ class LettingsLog < Log
address_line1_input.present? && postcode_full_input.present?
end
def process_postcode_changes!
self.postcode_full = upcase_and_remove_whitespace(postcode_full)
return if postcode_full.blank?
self.postcode_known = 1
inferred_la = get_inferred_la(postcode_full)
self.is_la_inferred = inferred_la.present?
self.la = inferred_la if inferred_la.present?
end
private
def reset_invalid_unresolved_log_fields!
@ -744,16 +754,6 @@ private
collection_start_year >= 2022 && !is_fixed_term_tenancy?
end
def process_postcode_changes!
self.postcode_full = upcase_and_remove_whitespace(postcode_full)
return if postcode_full.blank?
self.postcode_known = 1
inferred_la = get_inferred_la(postcode_full)
self.is_la_inferred = inferred_la.present?
self.la = inferred_la if inferred_la.present?
end
def process_previous_postcode_changes!
self.ppostcode_full = upcase_and_remove_whitespace(ppostcode_full)
return if ppostcode_full.blank?

14
lib/tasks/reinfer_local_authority.rake

@ -0,0 +1,14 @@
desc "Reinfers LA from postcode where it's missing"
task reinfer_local_authority: :environment do
LettingsLog.filter_by_year(2023).where(needstype: 1, la: nil).where.not(postcode_full: nil).find_each do |log|
log.process_postcode_changes!
Rails.logger.info "Invalid lettings log: #{log.id}" unless log.save
end
SalesLog.filter_by_year(2023).where(la: nil).where.not(postcode_full: nil).find_each do |log|
log.process_postcode_changes!
Rails.logger.info "Invalid sales log: #{log.id}" unless log.save
end
end

88
spec/lib/tasks/reinfer_local_authority_spec.rb

@ -0,0 +1,88 @@
require "rails_helper"
require "rake"
RSpec.describe "reinfer_local_authority" do
describe ":reinfer_local_authority", type: :task do
subject(:task) { Rake::Task["reinfer_local_authority"] }
before do
Rake.application.rake_require("tasks/reinfer_local_authority")
Rake::Task.define_task(:environment)
task.reenable
end
context "when the rake task is run" do
context "and there is a general needs type lettings log with postcode and without LA" do
let(:log) { create(:lettings_log, :completed, postcode_full: "AA1 1AA", status: "completed", startdate: Time.zone.local(2023, 4, 1)) }
it "updates the la if it can be inferred" do
log.la = nil
log.save!(validate: false)
task.invoke
log.reload
expect(log.la).to eq("E09000033")
expect(log.status).to eq("completed")
end
it "does not update the la if it cannot be inferred and sets status to in_progress" do
log.la = nil
log.postcode_full = "B11AB"
log.save!(validate: false)
task.invoke
log.reload
expect(log.la).to be_nil
expect(log.status).to eq("in_progress")
end
end
context "and the lettings log has a validation error" do
let(:log) { build(:lettings_log, :completed, postcode_full: "some fake postcode", la: nil, status: "completed", startdate: Time.zone.local(2023, 4, 1)) }
it "logs invalid log ID" do
log.save!(validate: false)
expect(Rails.logger).to receive(:info).with("Invalid lettings log: #{log.id}")
task.invoke
end
end
context "and there is a sales log with postcode and without LA" do
let(:log) { create(:sales_log, :completed, postcode_full: "AA1 1AA", status: "completed", saledate: Time.zone.local(2023, 4, 1)) }
it "updates the la if it can be inferred" do
log.la = nil
log.save!(validate: false)
task.invoke
log.reload
expect(log.la).to eq("E09000033")
expect(log.status).to eq("completed")
end
it "does not update the la if it cannot be inferred and sets status to in_progress" do
log.la = nil
log.postcode_full = "B11AB"
log.save!(validate: false)
task.invoke
log.reload
expect(log.la).to be_nil
expect(log.status).to eq("in_progress")
end
end
context "and the sales log has a validation error" do
let(:log) { build(:sales_log, :completed, postcode_full: "some fake postcode", la: nil, status: "completed", saledate: Time.zone.local(2023, 4, 1)) }
it "logs invalid log ID" do
log.save!(validate: false)
expect(Rails.logger).to receive(:info).with("Invalid sales log: #{log.id}")
task.invoke
end
end
end
end
end
Loading…
Cancel
Save