From c11d6ae663bd502765df66b1ac788b65338c5f33 Mon Sep 17 00:00:00 2001 From: natdeanlewissoftwire Date: Mon, 11 Sep 2023 14:21:47 +0100 Subject: [PATCH] feat: allow missing day/month/year values if CompletionDate exists as we don't always receive these from old core --- .../imports/sales_logs_import_service.rb | 4 +-- .../imports/sales_logs_import_service_spec.rb | 25 +++++++++++++++++++ 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/app/services/imports/sales_logs_import_service.rb b/app/services/imports/sales_logs_import_service.rb index 157e797b4..22e798a15 100644 --- a/app/services/imports/sales_logs_import_service.rb +++ b/app/services/imports/sales_logs_import_service.rb @@ -15,7 +15,7 @@ module Imports def create_log(xml_doc) # only import sales logs from 22/23 collection period onwards return unless meta_field_value(xml_doc, "form-name").include?("Sales") - return unless compose_date(xml_doc, "DAY", "MONTH", "YEAR") >= Time.zone.local(2022, 4, 1) + return unless (compose_date(xml_doc, "DAY", "MONTH", "YEAR") || Time.zone.parse(field_value(xml_doc, "xmlns", "CompletionDate"))) >= Time.zone.local(2022, 4, 1) attributes = {} @@ -24,7 +24,7 @@ module Imports # Required fields for status complete or logic to work # Note: order matters when we derive from previous values (attributes parameter) - attributes["saledate"] = compose_date(xml_doc, "DAY", "MONTH", "YEAR") + attributes["saledate"] = compose_date(xml_doc, "DAY", "MONTH", "YEAR") || Time.zone.parse(field_value(xml_doc, "xmlns", "CompletionDate")) attributes["owning_organisation_id"] = find_organisation_id(xml_doc, "OWNINGORGID") attributes["type"] = unsafe_string_as_integer(xml_doc, "DerSaleType") attributes["old_id"] = meta_field_value(xml_doc, "document-id") diff --git a/spec/services/imports/sales_logs_import_service_spec.rb b/spec/services/imports/sales_logs_import_service_spec.rb index df279e5d5..dc80ba6d2 100644 --- a/spec/services/imports/sales_logs_import_service_spec.rb +++ b/spec/services/imports/sales_logs_import_service_spec.rb @@ -228,6 +228,31 @@ RSpec.describe Imports::SalesLogsImportService do end end + context "and the log startdate is only present in the CompletionDate field" do + let(:sales_log_id) { "shared_ownership_sales_log" } + + before do + sales_log_xml.at_xpath("//xmlns:DAY").content = nil + sales_log_xml.at_xpath("//xmlns:MONTH").content = nil + sales_log_xml.at_xpath("//xmlns:YEAR").content = nil + sales_log_xml.at_xpath("//xmlns:CompletionDate").content = "2022-10-9" + sales_log_xml.at_xpath("//xmlns:HODAY").content = 9 + sales_log_xml.at_xpath("//xmlns:HOMONTH").content = 10 + sales_log_xml.at_xpath("//xmlns:HOYEAR").content = 2022 + sales_log_xml.at_xpath("//xmlns:EXDAY").content = 9 + sales_log_xml.at_xpath("//xmlns:EXMONTH").content = 10 + sales_log_xml.at_xpath("//xmlns:EXYEAR").content = 2022 + end + + it "creates the log with the correct saledate" do + expect(logger).not_to receive(:error) + expect(logger).not_to receive(:warn) + expect { sales_log_service.send(:create_log, sales_log_xml) } + .to change(SalesLog, :count).by(1) + expect(SalesLog.last.saledate).to eq(Time.zone.local(2022, 10, 9)) + end + end + context "when the log is valid" do let(:sales_log_id) { "shared_ownership_sales_log" }