From e3a97acd77b9c3d65e6177c213844d574c8768b2 Mon Sep 17 00:00:00 2001 From: natdeanlewissoftwire Date: Thu, 17 Aug 2023 13:05:39 +0100 Subject: [PATCH] feat: add field import service and test --- .../lettings_logs_field_import_service.rb | 2 + .../sales_logs_field_import_service.rb | 23 +++++++++++ .../sales_logs_field_import_service_spec.rb | 39 ++++++++++++++++++- 3 files changed, 63 insertions(+), 1 deletion(-) diff --git a/app/services/imports/lettings_logs_field_import_service.rb b/app/services/imports/lettings_logs_field_import_service.rb index e65625445..4e10c7e1c 100644 --- a/app/services/imports/lettings_logs_field_import_service.rb +++ b/app/services/imports/lettings_logs_field_import_service.rb @@ -39,6 +39,8 @@ module Imports end def update_creation_method(xml_doc) + return if meta_field_value(xml_doc, "form-name").include?("Sales") + old_id = meta_field_value(xml_doc, "document-id") log = LettingsLog.find_by(old_id:) diff --git a/app/services/imports/sales_logs_field_import_service.rb b/app/services/imports/sales_logs_field_import_service.rb index 4da19dbc3..e186bb765 100644 --- a/app/services/imports/sales_logs_field_import_service.rb +++ b/app/services/imports/sales_logs_field_import_service.rb @@ -4,6 +4,8 @@ module Imports case field when "creation_method" import_from(folder, :update_creation_method) + when "owning_organisation_id" + import_from(folder, :update_owning_organisation_id) else raise "Updating #{field} is not supported by the field import service" end @@ -12,6 +14,8 @@ module Imports private def update_creation_method(xml_doc) + return if meta_field_value(xml_doc, "form-name").include?("Lettings") + old_id = meta_field_value(xml_doc, "document-id") log = SalesLog.find_by(old_id:) @@ -28,5 +32,24 @@ module Imports @logger.info "sales log #{log.id} creation method set to bulk upload" end end + + def update_owning_organisation_id(xml_doc) + return if meta_field_value(xml_doc, "form-name").include?("Lettings") + + old_id = meta_field_value(xml_doc, "document-id") + record = SalesLog.find_by(old_id:) + + if record.present? + if record.owning_organisation_id.present? + @logger.info("sales log #{record.id} has a value for owning_organisation_id, skipping update") + else + owning_organisation_id = safe_string_as_integer(xml_doc, "OWNINGORGID") + record.update!(owning_organisation_id:) + @logger.info("sales log #{record.id}'s owning_organisation_id value has been set to #{owning_organisation_id}") + end + else + @logger.warn("sales log with old id #{old_id} not found") + end + end end end diff --git a/spec/services/imports/sales_logs_field_import_service_spec.rb b/spec/services/imports/sales_logs_field_import_service_spec.rb index b5bdb22a4..b30d1aec1 100644 --- a/spec/services/imports/sales_logs_field_import_service_spec.rb +++ b/spec/services/imports/sales_logs_field_import_service_spec.rb @@ -9,7 +9,7 @@ RSpec.describe Imports::SalesLogsFieldImportService do let(:fixture_directory) { "spec/fixtures/imports/sales_logs" } let(:sales_log_filename) { "shared_ownership_sales_log" } let(:sales_log_file) { File.open("#{fixture_directory}/#{sales_log_filename}.xml") } - let(:organisation) { create(:organisation, old_visible_id: "1") } + let(:organisation) { create(:organisation, old_visible_id: "1", id: "1") } let(:old_user_id) { "c3061a2e6ea0b702e6f6210d5c52d2a92612d2aa" } let(:remote_folder) { "sales_logs" } @@ -73,4 +73,41 @@ RSpec.describe Imports::SalesLogsFieldImportService do end end end + + context "when updating owning_organisation_id" do + let(:field) { "owning_organisation_id" } + let(:sales_log_filename) { "shared_ownership_sales_log" } + + context "when the sales log has no offered value" do + let(:sales_log) { SalesLog.find_by(old_id: sales_log_filename) } + + before do + Imports::SalesLogsImportService.new(storage_service, logger).create_logs(fixture_directory) + sales_log_file.rewind + sales_log.update!(owning_organisation_id: nil) + end + + it "updates the sales_log owning_organisation_id value" do + expect(logger).to receive(:info).with(/sales log \d+'s owning_organisation_id value has been set to 1/) + expect { import_service.send(:update_field, field, remote_folder) } + .to(change { sales_log.reload.owning_organisation_id }.from(nil).to(1)) + end + end + + context "when the sales log has a different offered value" do + let(:sales_log) { SalesLog.find_by(old_id: sales_log_filename) } + + before do + Imports::SalesLogsImportService.new(storage_service, logger).create_logs(fixture_directory) + sales_log_file.rewind + sales_log.update!(owning_organisation_id: organisation.id) + end + + it "does not update the sales_log owning_organisation_id value" do + expect(logger).to receive(:info).with(/sales log \d+ has a value for owning_organisation_id, skipping update/) + expect { import_service.send(:update_field, field, remote_folder) } + .not_to(change { sales_log.reload.owning_organisation_id }) + end + end + end end