Browse Source

Discard void date during import if after tenancy start date

pull/604/head
Stéphane Meny 3 years ago
parent
commit
319eb3a910
No known key found for this signature in database
GPG Key ID: 9D0AFEA988527923
  1. 15
      app/services/imports/case_logs_import_service.rb
  2. 72
      spec/services/imports/case_logs_import_service_spec.rb

15
app/services/imports/case_logs_import_service.rb

@ -138,6 +138,8 @@ module Imports
0 0
end end
apply_date_consistency!(attributes)
attributes["offered"] = safe_string_as_integer(xml_doc, "Q20") attributes["offered"] = safe_string_as_integer(xml_doc, "Q20")
attributes["propcode"] = string_or_nil(xml_doc, "Q21a") attributes["propcode"] = string_or_nil(xml_doc, "Q21a")
attributes["beds"] = safe_string_as_integer(xml_doc, "Q22") attributes["beds"] = safe_string_as_integer(xml_doc, "Q22")
@ -309,11 +311,8 @@ module Imports
def find_organisation_id(xml_doc, id_field) def find_organisation_id(xml_doc, id_field)
old_visible_id = unsafe_string_as_integer(xml_doc, id_field) old_visible_id = unsafe_string_as_integer(xml_doc, id_field)
organisation = Organisation.find_by(old_visible_id:) organisation = Organisation.find_by(old_visible_id:)
# Quick hack: should be removed when all organisations are imported raise "Organisation not found with legacy ID #{old_visible_id}" if organisation.nil?
# Will fail in the future if the organisation is missing
if organisation.nil?
raise "Organisation not found with legacy ID #{old_visible_id}"
end
organisation.id organisation.id
end end
@ -519,5 +518,11 @@ module Imports
0 0
end end
end end
def apply_date_consistency!(attributes)
if attributes["voiddate"] > attributes["startdate"]
attributes.delete("voiddate")
end
end
end end
end end

72
spec/services/imports/case_logs_import_service_spec.rb

@ -1,22 +1,40 @@
require "rails_helper" require "rails_helper"
RSpec.describe Imports::CaseLogsImportService do RSpec.describe Imports::CaseLogsImportService do
let(:remote_folder) { "case_logs" } subject(:case_log_service) { described_class.new(storage_service, logger) }
let(:fixture_directory) { "spec/fixtures/softwire_imports/case_logs" }
let(:case_log_id) { "0ead17cb-1668-442d-898c-0d52879ff592" }
let(:case_log_id2) { "166fc004-392e-47a8-acb8-1c018734882b" }
let(:case_log_id3) { "00d2343e-d5fa-4c89-8400-ec3854b0f2b4" }
let(:storage_service) { instance_double(StorageService) } let(:storage_service) { instance_double(StorageService) }
let(:logger) { instance_double(ActiveSupport::Logger) }
let(:real_2021_2022_form) { Form.new("config/forms/2021_2022.json", "2021_2022") } let(:real_2021_2022_form) { Form.new("config/forms/2021_2022.json", "2021_2022") }
let(:real_2022_2023_form) { Form.new("config/forms/2022_2023.json", "2022_2023") } let(:real_2022_2023_form) { Form.new("config/forms/2022_2023.json", "2022_2023") }
let(:logger) { instance_double(ActiveSupport::Logger) } let(:fixture_directory) { "spec/fixtures/softwire_imports/case_logs" }
context "when importing users" do def open_file(directory, filename)
subject(:case_log_service) { described_class.new(storage_service, logger) } File.open("#{directory}/#{filename}.xml")
end
def open_file(directory, filename) before do
File.open("#{directory}/#{filename}.xml") # Owning and Managing organisations
end FactoryBot.create(:organisation, old_visible_id: "1", provider_type: "PRP")
# Created by users
FactoryBot.create(:user, old_user_id: "c3061a2e6ea0b702e6f6210d5c52d2a92612d2aa")
FactoryBot.create(:user, old_user_id: "e29c492473446dca4d50224f2bb7cf965a261d6f")
# Stub the form handler to use the real form
allow(FormHandler.instance).to receive(:get_form).with("2021_2022").and_return(real_2021_2022_form)
allow(FormHandler.instance).to receive(:get_form).with("2022_2023").and_return(real_2022_2023_form)
WebMock.stub_request(:get, /api.postcodes.io\/postcodes\/LS166FT/)
.to_return(status: 200, body: '{"status":200,"result":{"codes":{"admin_district":"E08000035"}}}', headers: {})
end
context "when importing users" do
let(:remote_folder) { "case_logs" }
let(:case_log_id) { "0ead17cb-1668-442d-898c-0d52879ff592" }
let(:case_log_id2) { "166fc004-392e-47a8-acb8-1c018734882b" }
let(:case_log_id3) { "00d2343e-d5fa-4c89-8400-ec3854b0f2b4" }
before do before do
# Stub the S3 file listing and download # Stub the S3 file listing and download
@ -31,16 +49,6 @@ RSpec.describe Imports::CaseLogsImportService do
allow(storage_service).to receive(:get_file_io) allow(storage_service).to receive(:get_file_io)
.with("#{remote_folder}/#{case_log_id3}.xml") .with("#{remote_folder}/#{case_log_id3}.xml")
.and_return(open_file(fixture_directory, case_log_id3), open_file(fixture_directory, case_log_id3)) .and_return(open_file(fixture_directory, case_log_id3), open_file(fixture_directory, case_log_id3))
# Stub the form handler to use the real form
allow(FormHandler.instance).to receive(:get_form).with("2021_2022").and_return(real_2021_2022_form)
allow(FormHandler.instance).to receive(:get_form).with("2022_2023").and_return(real_2022_2023_form)
WebMock.stub_request(:get, /api.postcodes.io\/postcodes\/LS166FT/)
.to_return(status: 200, body: '{"status":200,"result":{"codes":{"admin_district":"E08000035"}}}', headers: {})
FactoryBot.create(:user, old_user_id: "c3061a2e6ea0b702e6f6210d5c52d2a92612d2aa")
FactoryBot.create(:user, old_user_id: "e29c492473446dca4d50224f2bb7cf965a261d6f")
FactoryBot.create(:organisation, old_visible_id: "1", provider_type: "PRP")
end end
it "successfully create all case logs" do it "successfully create all case logs" do
@ -59,4 +67,26 @@ RSpec.describe Imports::CaseLogsImportService do
.to change(CaseLog, :count).by(3) .to change(CaseLog, :count).by(3)
end end
end end
context "when import a specific log" do
let(:case_log_id) { "0ead17cb-1668-442d-898c-0d52879ff592" }
let(:case_log_file) { open_file(fixture_directory, case_log_id) }
context "and the void date is after the start date" do
let(:case_log_xml) do
xml_doc = Nokogiri::XML(case_log_file)
xml_doc.at_xpath("//xmlns:VYEAR").content = 2023
xml_doc
end
it "does not import the voiddate" do
allow(logger).to receive(:warn).with(/is not completed/)
case_log_service.send(:create_log, case_log_xml)
case_log = CaseLog.where(old_id: case_log_id).first
expect(case_log).not_to be_nil
expect(case_log.voiddate).to be_nil
end
end
end
end end

Loading…
Cancel
Save