From c6af6074b22b542913b7ff3b1293614341bbbde1 Mon Sep 17 00:00:00 2001 From: baarkerlounger Date: Wed, 15 Jun 2022 12:10:15 +0100 Subject: [PATCH] Add task to fix existing logs --- .../imports/case_logs_field_import_service.rb | 38 ++++++++ .../166fc004-392e-47a8-acb8-1c018734882b.xml | 2 +- .../case_logs_field_import_service_spec.rb | 91 +++++++++++++++++++ 3 files changed, 130 insertions(+), 1 deletion(-) diff --git a/app/services/imports/case_logs_field_import_service.rb b/app/services/imports/case_logs_field_import_service.rb index e1c88454c..30871af56 100644 --- a/app/services/imports/case_logs_field_import_service.rb +++ b/app/services/imports/case_logs_field_import_service.rb @@ -6,6 +6,8 @@ module Imports import_from(folder, :update_tenant_code) when "major_repairs" import_from(folder, :update_major_repairs) + when "lettings_allocation" + import_from(folder, :update_lettings_allocation) else raise "Updating #{field} is not supported by the field import service" end @@ -13,6 +15,32 @@ module Imports private + def update_lettings_allocation(xml_doc) + old_id = field_value(xml_doc, "meta", "document-id") + previous_status = field_value(xml_doc, "meta", "status") + record = CaseLog.find_by(old_id:) + + if record.present? && previous_status.include?("submitted") + cbl = unsafe_string_as_integer(xml_doc, "Q15CBL") + chr = unsafe_string_as_integer(xml_doc, "Q15CHR") + cap = unsafe_string_as_integer(xml_doc, "Q15CAP") + if cbl == 2 && record.cbl == 1 + record.update!(cbl: 0) + @logger.info("Case Log #{record.id}'s cbl value has been updated'") + end + if chr == 2 && record.chr == 1 + record.update!(chr: 0) + @logger.info("Case Log #{record.id}'s chr value has been updated'") + end + if cap == 2 && record.cap == 1 + record.update!(cap: 0) + @logger.info("Case Log #{record.id}'s cap value has been updated'") + end + else + @logger.warn("Could not find record matching legacy ID #{old_id}") + end + end + def update_major_repairs(xml_doc) old_id = field_value(xml_doc, "meta", "document-id") record = CaseLog.find_by(old_id:) @@ -67,5 +95,15 @@ module Imports str = field_value(xml_doc, "xmlns", attribute) str.presence end + + # Unsafe: A string that has more than just the integer value + def unsafe_string_as_integer(xml_doc, attribute) + str = string_or_nil(xml_doc, attribute) + if str.nil? + nil + else + str.to_i + end + end end end diff --git a/spec/fixtures/softwire_imports/case_logs/166fc004-392e-47a8-acb8-1c018734882b.xml b/spec/fixtures/softwire_imports/case_logs/166fc004-392e-47a8-acb8-1c018734882b.xml index 25fbb2283..0ddca74c3 100644 --- a/spec/fixtures/softwire_imports/case_logs/166fc004-392e-47a8-acb8-1c018734882b.xml +++ b/spec/fixtures/softwire_imports/case_logs/166fc004-392e-47a8-acb8-1c018734882b.xml @@ -2,7 +2,7 @@ 2021-CORE-IR-GN 166fc004-392e-47a8-acb8-1c018734882b - e29c492473446dca4d50224f2bb7cf965a261d6f + c3061a2e6ea0b702e6f6210d5c52d2a92612d2aa 7c5bd5fb549c09a2c55d7cb90d7ba84927e64618 7c5bd5fb549c09a2c55d7cb90d7ba84927e64618 2022-04-12T14:10:59.953121Z diff --git a/spec/services/imports/case_logs_field_import_service_spec.rb b/spec/services/imports/case_logs_field_import_service_spec.rb index 3233d6706..8d3062bb0 100644 --- a/spec/services/imports/case_logs_field_import_service_spec.rb +++ b/spec/services/imports/case_logs_field_import_service_spec.rb @@ -74,6 +74,97 @@ RSpec.describe Imports::CaseLogsFieldImportService do end end + context "when updating letings allocation values" do + let(:field) { "lettings_allocation" } + let(:case_log) { CaseLog.find_by(old_id: case_log_id) } + + before do + Imports::CaseLogsImportService.new(storage_service, logger).create_logs(fixture_directory) + case_log_file.rewind + end + + context "when cbl" do + let(:case_log_id) { "166fc004-392e-47a8-acb8-1c018734882b" } + + context "when it was incorrectly set" do + before do + case_log.update!(cbl: 1) + end + + it "updates the value" do + expect(logger).to receive(:info).with(/Case Log \d+'s cbl value has been updated/) + expect { import_service.send(:update_field, field, remote_folder) } + .to(change { case_log.reload.cbl }.from(1).to(0)) + end + end + + context "when it was correctly set" do + before do + case_log.update!(cbl: 0) + end + + it "does not update the value" do + expect { import_service.send(:update_field, field, remote_folder) } + .not_to(change { case_log.reload.cbl }) + end + end + end + + context "when chr" do + let(:case_log_id) { "166fc004-392e-47a8-acb8-1c018734882b" } + + context "when it was incorrectly set" do + before do + case_log.update!(chr: 1) + end + + it "updates the value" do + expect(logger).to receive(:info).with(/Case Log \d+'s chr value has been updated/) + expect { import_service.send(:update_field, field, remote_folder) } + .to(change { case_log.reload.chr }.from(1).to(0)) + end + end + + context "when it was correctly set" do + before do + case_log.update!(chr: 0) + end + + it "does not update the value" do + expect { import_service.send(:update_field, field, remote_folder) } + .not_to(change { case_log.reload.chr }) + end + end + end + + context "when cap" do + let(:case_log_id) { "0ead17cb-1668-442d-898c-0d52879ff592" } + + context "when it was incorrectly set" do + before do + case_log.update!(cap: 1) + end + + it "updates the value" do + expect(logger).to receive(:info).with(/Case Log \d+'s cap value has been updated/) + expect { import_service.send(:update_field, field, remote_folder) } + .to(change { case_log.reload.cap }.from(1).to(0)) + end + end + + context "when it was correctly set" do + before do + case_log.update!(cap: 0) + end + + it "does not update the value" do + expect { import_service.send(:update_field, field, remote_folder) } + .not_to(change { case_log.reload.cap }) + end + end + end + end + context "when updating major repairs" do let(:field) { "major_repairs" }