Browse Source
* Fix rent_type 2024 BU mapping * Correct rent_type values * Reuse rent_type mapping * Track updated bulk uploads * Fix testpull/2532/head
kosiakkatrina
6 months ago
committed by
GitHub
11 changed files with 324 additions and 143 deletions
@ -0,0 +1,5 @@
|
||||
class AddRentFixStatus < ActiveRecord::Migration[7.0] |
||||
def change |
||||
add_column :bulk_uploads, :rent_type_fix_status, :string, default: "not_applied" |
||||
end |
||||
end |
@ -1,24 +0,0 @@
|
||||
desc "Alter noint values for bulk uploaded sales logs where these have not been set in the service" |
||||
task correct_noint_value: :environment do |
||||
update_counts = { |
||||
in_progress: 0, |
||||
completed: 0, |
||||
pending: 0, |
||||
deleted: 0, |
||||
} |
||||
affected_uploads = BulkUpload.where(log_type: "sales", noint_fix_status: BulkUpload.noint_fix_statuses[:not_applied]) |
||||
affected_uploads.each do |upload| |
||||
upload.logs.where(noint: 2).each do |log| |
||||
noint_at_upload = log.versions.length == 1 ? log.noint : log.versions.first.next.reify.noint |
||||
next unless noint_at_upload == 2 |
||||
|
||||
Rails.logger.info("Updating noint value on log #{log.id}, owning org #{log.owning_organisation_id}") |
||||
update_counts[log.status.to_sym] += 1 |
||||
log.noint = 1 |
||||
log.skip_update_status = true |
||||
log.save! |
||||
end |
||||
upload.update!(noint_fix_status: BulkUpload.noint_fix_statuses[:applied]) |
||||
end |
||||
Rails.logger.info("Logs updated; #{update_counts}") |
||||
end |
@ -0,0 +1,21 @@
|
||||
desc "Alter rent_type values for bulk uploaded lettings logs for 2024 where they were not mapped correctly" |
||||
task correct_rent_type_value: :environment do |
||||
affected_uploads = BulkUpload.where(log_type: "lettings", year: 2024, rent_type_fix_status: BulkUpload.rent_type_fix_statuses[:not_applied]) |
||||
affected_uploads.each do |upload| |
||||
upload.logs.where.not(rent_type: nil).each do |log| |
||||
current_rent_type = log.rent_type |
||||
rent_type_at_upload = log.versions.length == 1 ? log.rent_type : log.versions.first.next.reify.rent_type |
||||
next unless rent_type_at_upload == current_rent_type |
||||
|
||||
new_rent_type_value = BulkUpload::Lettings::Year2024::RowParser::RENT_TYPE_BU_MAPPING[rent_type_at_upload] |
||||
log.rent_type = new_rent_type_value |
||||
log.skip_update_status = true if log.status == "pending" |
||||
if log.save |
||||
Rails.logger.info("Log #{log.id} rent_type updated from #{rent_type_at_upload} to #{log.rent_type}") |
||||
else |
||||
Rails.logger.error("Log #{log.id} rent_type could not be updated from #{rent_type_at_upload} to #{log.rent_type}. Error: #{log.errors.full_messages.join(', ')}") |
||||
end |
||||
end |
||||
upload.update!(rent_type_fix_status: BulkUpload.rent_type_fix_statuses[:applied]) |
||||
end |
||||
end |
@ -1,87 +0,0 @@
|
||||
require "rails_helper" |
||||
require "rake" |
||||
|
||||
RSpec.describe "correct_noint_value" do |
||||
describe ":correct_noint_value", type: :task do |
||||
subject(:task) { Rake::Task["correct_noint_value"] } |
||||
|
||||
before do |
||||
Rake.application.rake_require("tasks/correct_noint_value") |
||||
Rake::Task.define_task(:environment) |
||||
task.reenable |
||||
end |
||||
|
||||
context "when the rake task is run" do |
||||
context "and there is a sales bulk upload with the fix needed" do |
||||
let(:bulk_upload) { create(:bulk_upload, :sales, noint_fix_status: BulkUpload.noint_fix_statuses[:not_applied]) } |
||||
|
||||
before do |
||||
bulk_upload.save! |
||||
end |
||||
|
||||
it "updates the noint value on a log with noint = 2 where it was set to 2 on create" do |
||||
log = create(:sales_log, :completed, noint: 2, bulk_upload:) |
||||
|
||||
task.invoke |
||||
log.reload |
||||
|
||||
expect(log.noint).to be(1) |
||||
end |
||||
|
||||
it "updates the noint value on a log with noint = 2 where it was set to 2 on create and other fields have since changed" do |
||||
log = create(:sales_log, :in_progress, noint: 2, bulk_upload:) |
||||
log.update!(status: Log.statuses[:completed]) |
||||
|
||||
task.invoke |
||||
log.reload |
||||
|
||||
expect(log.noint).to be(1) |
||||
end |
||||
|
||||
it "does not update the noint value on a log that has noint = 1" do |
||||
log = create(:sales_log, :completed, noint: 2, bulk_upload:) |
||||
log.update!(noint: 1) |
||||
|
||||
task.invoke |
||||
log.reload |
||||
|
||||
expect(log.noint).to be(1) |
||||
end |
||||
|
||||
it "does not update the noint value on a log with noint = 2 where noint was nil on create" do |
||||
log = create(:sales_log, :completed, noint: nil, bulk_upload:) |
||||
log.update!(noint: 2) |
||||
|
||||
task.invoke |
||||
log.reload |
||||
|
||||
expect(log.noint).to be(2) |
||||
end |
||||
|
||||
it "updates the noint_fix_status value on the bulk upload" do |
||||
task.invoke |
||||
bulk_upload.reload |
||||
|
||||
expect(bulk_upload.noint_fix_status).to eq(BulkUpload.noint_fix_statuses[:applied]) |
||||
end |
||||
end |
||||
|
||||
context "and there is a sales bulk upload with the fix marked as not needed" do |
||||
let(:bulk_upload) { create(:bulk_upload, :sales, noint_fix_status: BulkUpload.noint_fix_statuses[:not_needed]) } |
||||
|
||||
before do |
||||
bulk_upload.save! |
||||
end |
||||
|
||||
it "does not update the noint values on logs" do |
||||
log = create(:sales_log, :completed, noint: 2, bulk_upload:) |
||||
|
||||
task.invoke |
||||
log.reload |
||||
|
||||
expect(log.noint).to be(2) |
||||
end |
||||
end |
||||
end |
||||
end |
||||
end |
@ -0,0 +1,256 @@
|
||||
require "rails_helper" |
||||
require "rake" |
||||
|
||||
RSpec.describe "correct_rent_type_value" do |
||||
describe ":correct_rent_type_value", type: :task do |
||||
subject(:task) { Rake::Task["correct_rent_type_value"] } |
||||
|
||||
before do |
||||
Rake.application.rake_require("tasks/correct_rent_type_value") |
||||
Rake::Task.define_task(:environment) |
||||
task.reenable |
||||
end |
||||
|
||||
context "when the rake task is run" do |
||||
context "and rent_type is 1" do |
||||
let(:bulk_upload) { create(:bulk_upload, :lettings, year: 2024, rent_type_fix_status: BulkUpload.rent_type_fix_statuses[:not_applied]) } |
||||
let(:bulk_upload_2023) { create(:bulk_upload, :lettings, year: 2023, rent_type_fix_status: BulkUpload.rent_type_fix_statuses[:not_applied]) } |
||||
|
||||
before do |
||||
bulk_upload.save! |
||||
end |
||||
|
||||
it "updates the rent_type value on a log where it was set to 1 on create" do |
||||
log = create(:lettings_log, :completed, rent_type: 1, bulk_upload:) |
||||
initial_updated_at = log.updated_at |
||||
|
||||
task.invoke |
||||
log.reload |
||||
|
||||
expect(log.rent_type).to be(0) |
||||
expect(log.status).to eq("completed") |
||||
expect(log.updated_at).not_to eq(initial_updated_at) |
||||
expect(bulk_upload.reload.rent_type_fix_status).to eq(BulkUpload.rent_type_fix_statuses[:applied]) |
||||
end |
||||
|
||||
it "updates the rent_type value on a pending log where it was set to 1 on create" do |
||||
log = build(:lettings_log, :completed, rent_type: 1, bulk_upload:, status: "pending") |
||||
log.skip_update_status = true |
||||
log.save! |
||||
initial_updated_at = log.updated_at |
||||
expect(log.status).to eq("pending") |
||||
|
||||
task.invoke |
||||
log.reload |
||||
|
||||
expect(log.rent_type).to be(0) |
||||
expect(log.status).to eq("pending") |
||||
expect(log.updated_at).not_to eq(initial_updated_at) |
||||
expect(bulk_upload.reload.rent_type_fix_status).to eq(BulkUpload.rent_type_fix_statuses[:applied]) |
||||
end |
||||
|
||||
it "updates the rent_type value on a deleted log where it was set to 1 on create" do |
||||
log = create(:lettings_log, :completed, rent_type: 1, bulk_upload:, discarded_at: Time.zone.yesterday) |
||||
initial_updated_at = log.updated_at |
||||
expect(log.status).to eq("deleted") |
||||
|
||||
task.invoke |
||||
log.reload |
||||
|
||||
expect(log.rent_type).to be(0) |
||||
expect(log.status).to eq("deleted") |
||||
expect(log.updated_at).not_to eq(initial_updated_at) |
||||
expect(bulk_upload.reload.rent_type_fix_status).to eq(BulkUpload.rent_type_fix_statuses[:applied]) |
||||
end |
||||
|
||||
it "updates the rent_type value on a log where it was set to 1 on create and other fields have since changed" do |
||||
log = create(:lettings_log, :completed, rent_type: 1, bulk_upload:) |
||||
log.update!(tenancycode: "abc") |
||||
initial_updated_at = log.updated_at |
||||
|
||||
task.invoke |
||||
log.reload |
||||
|
||||
expect(log.rent_type).to be(0) |
||||
expect(log.status).to eq("completed") |
||||
expect(log.updated_at).not_to eq(initial_updated_at) |
||||
expect(bulk_upload.reload.rent_type_fix_status).to eq(BulkUpload.rent_type_fix_statuses[:applied]) |
||||
end |
||||
|
||||
it "does not update the rent_type value on a log if it has since been changed" do |
||||
log = create(:lettings_log, :completed, rent_type: 1, bulk_upload:) |
||||
log.update!(rent_type: 0) |
||||
initial_updated_at = log.updated_at |
||||
|
||||
task.invoke |
||||
log.reload |
||||
|
||||
expect(log.rent_type).to be(0) |
||||
expect(log.status).to eq("completed") |
||||
expect(log.updated_at).to eq(initial_updated_at) |
||||
end |
||||
|
||||
it "does not update the rent_type value on a 2023 log turned 2024" do |
||||
log = build(:lettings_log, :completed, startdate: Time.zone.local(2023, 6, 6), rent_type: 1, bulk_upload: bulk_upload_2023) |
||||
log.save!(validate: false) |
||||
log.address_line1_input = log.address_line1 |
||||
log.postcode_full_input = log.postcode_full |
||||
log.nationality_all_group = 826 |
||||
log.uprn = "10033558653" |
||||
log.uprn_selection = 1 |
||||
log.startdate = Time.zone.today |
||||
log.save! |
||||
|
||||
initial_updated_at = log.updated_at |
||||
|
||||
task.invoke |
||||
log.reload |
||||
|
||||
expect(log.rent_type).to be(1) |
||||
expect(log.updated_at).to eq(initial_updated_at) |
||||
end |
||||
|
||||
it "does not update and logs error if a validation triggers" do |
||||
log = build(:lettings_log, :completed, startdate: Time.zone.local(2021, 6, 6), rent_type: 1, bulk_upload:) |
||||
log.save!(validate: false) |
||||
initial_updated_at = log.updated_at |
||||
|
||||
expect(Rails.logger).to receive(:error).with(/Log #{log.id} rent_type could not be updated from 1 to 0. Error: /) |
||||
task.invoke |
||||
log.reload |
||||
|
||||
expect(log.rent_type).to be(1) |
||||
expect(log.updated_at).to eq(initial_updated_at) |
||||
end |
||||
|
||||
context "when the rent_type_fix_status is not_needed" do |
||||
let(:bulk_upload) { create(:bulk_upload, :lettings, year: 2024, rent_type_fix_status: BulkUpload.rent_type_fix_statuses[:not_needed]) } |
||||
|
||||
before do |
||||
bulk_upload.save! |
||||
end |
||||
|
||||
it "does not update the rent_type values on logs" do |
||||
log = create(:lettings_log, :completed, rent_type: 1, bulk_upload:) |
||||
initial_updated_at = log.updated_at |
||||
|
||||
task.invoke |
||||
log.reload |
||||
|
||||
expect(log.rent_type).to be(1) |
||||
expect(log.updated_at).to eq(initial_updated_at) |
||||
expect(bulk_upload.reload.rent_type_fix_status).to eq(BulkUpload.rent_type_fix_statuses[:not_needed]) |
||||
end |
||||
end |
||||
end |
||||
|
||||
context "and rent_type is 2" do |
||||
let(:bulk_upload) { create(:bulk_upload, :lettings, year: 2024, rent_type_fix_status: BulkUpload.rent_type_fix_statuses[:not_applied]) } |
||||
let(:bulk_upload_2023) { create(:bulk_upload, :lettings, year: 2023, rent_type_fix_status: BulkUpload.rent_type_fix_statuses[:not_applied]) } |
||||
|
||||
before do |
||||
bulk_upload.save! |
||||
end |
||||
|
||||
it "updates the rent_type value on a log where it was set to 2 on create" do |
||||
log = create(:lettings_log, :completed, rent_type: 2, bulk_upload:) |
||||
initial_updated_at = log.updated_at |
||||
|
||||
task.invoke |
||||
log.reload |
||||
|
||||
expect(log.rent_type).to be(1) |
||||
expect(log.status).to eq("completed") |
||||
expect(log.updated_at).not_to eq(initial_updated_at) |
||||
end |
||||
|
||||
it "updates the rent_type value on a pending log where it was set to 2 on create" do |
||||
log = build(:lettings_log, :completed, rent_type: 2, bulk_upload:, status: "pending") |
||||
log.skip_update_status = true |
||||
log.save! |
||||
initial_updated_at = log.updated_at |
||||
expect(log.status).to eq("pending") |
||||
|
||||
task.invoke |
||||
log.reload |
||||
|
||||
expect(log.rent_type).to be(1) |
||||
expect(log.status).to eq("pending") |
||||
expect(log.updated_at).not_to eq(initial_updated_at) |
||||
end |
||||
|
||||
it "updates the rent_type value on a deleted log where it was set to 2 on create" do |
||||
log = create(:lettings_log, :completed, rent_type: 2, bulk_upload:, discarded_at: Time.zone.yesterday) |
||||
initial_updated_at = log.updated_at |
||||
expect(log.status).to eq("deleted") |
||||
|
||||
task.invoke |
||||
log.reload |
||||
|
||||
expect(log.rent_type).to be(1) |
||||
expect(log.status).to eq("deleted") |
||||
expect(log.updated_at).not_to eq(initial_updated_at) |
||||
end |
||||
|
||||
it "updates the rent_type value on a log where it was set to 2 on create and other fields have since changed" do |
||||
log = create(:lettings_log, :completed, rent_type: 2, bulk_upload:) |
||||
log.update!(tenancycode: "abc") |
||||
initial_updated_at = log.updated_at |
||||
|
||||
task.invoke |
||||
log.reload |
||||
|
||||
expect(log.rent_type).to be(1) |
||||
expect(log.status).to eq("completed") |
||||
expect(log.updated_at).not_to eq(initial_updated_at) |
||||
end |
||||
|
||||
it "does not update the rent_type value on a log if it has since been changed" do |
||||
log = create(:lettings_log, :completed, rent_type: 2, bulk_upload:) |
||||
log.update!(rent_type: 0) |
||||
initial_updated_at = log.updated_at |
||||
|
||||
task.invoke |
||||
log.reload |
||||
|
||||
expect(log.rent_type).to be(0) |
||||
expect(log.status).to eq("completed") |
||||
expect(log.updated_at).to eq(initial_updated_at) |
||||
end |
||||
|
||||
it "does not update the rent_type value on a 2023 log turned 2024" do |
||||
log = build(:lettings_log, :completed, startdate: Time.zone.local(2023, 6, 6), rent_type: 2, bulk_upload: bulk_upload_2023) |
||||
log.save!(validate: false) |
||||
log.address_line1_input = log.address_line1 |
||||
log.postcode_full_input = log.postcode_full |
||||
log.nationality_all_group = 826 |
||||
log.uprn = "10033558653" |
||||
log.uprn_selection = 1 |
||||
log.startdate = Time.zone.today |
||||
log.save! |
||||
|
||||
initial_updated_at = log.updated_at |
||||
|
||||
task.invoke |
||||
log.reload |
||||
|
||||
expect(log.rent_type).to be(2) |
||||
expect(log.updated_at).to eq(initial_updated_at) |
||||
end |
||||
|
||||
it "does not update and logs error if a validation triggers" do |
||||
log = build(:lettings_log, :completed, startdate: Time.zone.local(2021, 6, 6), rent_type: 2, bulk_upload:) |
||||
log.save!(validate: false) |
||||
initial_updated_at = log.updated_at |
||||
|
||||
expect(Rails.logger).to receive(:error).with(/Log #{log.id} rent_type could not be updated from 2 to 1. Error: /) |
||||
task.invoke |
||||
log.reload |
||||
|
||||
expect(log.rent_type).to be(2) |
||||
expect(log.updated_at).to eq(initial_updated_at) |
||||
end |
||||
end |
||||
end |
||||
end |
||||
end |
Loading…
Reference in new issue