Browse Source

Add task to fix existing logs

pull/665/head
baarkerlounger 3 years ago
parent
commit
c6af6074b2
  1. 38
      app/services/imports/case_logs_field_import_service.rb
  2. 2
      spec/fixtures/softwire_imports/case_logs/166fc004-392e-47a8-acb8-1c018734882b.xml
  3. 91
      spec/services/imports/case_logs_field_import_service_spec.rb

38
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

2
spec/fixtures/softwire_imports/case_logs/166fc004-392e-47a8-acb8-1c018734882b.xml vendored

@ -2,7 +2,7 @@
<meta:metadata xmlns:es="http://www.ecmascript.org/" xmlns:xqx="http://www.w3.org/2005/XQueryX" xmlns:XSLT="http://www.w3.org/1999/XSL/Transform/compile">
<meta:form-name>2021-CORE-IR-GN</meta:form-name>
<meta:document-id>166fc004-392e-47a8-acb8-1c018734882b</meta:document-id>
<meta:owner-user-id>e29c492473446dca4d50224f2bb7cf965a261d6f</meta:owner-user-id>
<meta:owner-user-id>c3061a2e6ea0b702e6f6210d5c52d2a92612d2aa</meta:owner-user-id>
<meta:owner-institution-id>7c5bd5fb549c09a2c55d7cb90d7ba84927e64618</meta:owner-institution-id>
<meta:managing-institution-id>7c5bd5fb549c09a2c55d7cb90d7ba84927e64618</meta:managing-institution-id>
<meta:created-date>2022-04-12T14:10:59.953121Z</meta:created-date>

91
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" }

Loading…
Cancel
Save