From e98922511e2764164dfddcbb06e9ec07949fc860 Mon Sep 17 00:00:00 2001 From: natdeanlewissoftwire <94526761+natdeanlewissoftwire@users.noreply.github.com> Date: Thu, 29 Jun 2023 14:01:22 +0100 Subject: [PATCH] Reimport offered (#1734) * Add method for importing the 'offered' field into already imported lettings logs * Add minimal tests * feat: update tests * feat: update take task * feat: update rake task * feat: update rake task * feat: update rake task spec * feat: update rake task and tests --------- Co-authored-by: Rachael Booth --- lib/tasks/data_import_field.rake | 11 ++++-- spec/lib/tasks/date_import_field_spec.rb | 43 ++++++++++++++---------- 2 files changed, 34 insertions(+), 20 deletions(-) diff --git a/lib/tasks/data_import_field.rake b/lib/tasks/data_import_field.rake index 29512761d..54d25517b 100644 --- a/lib/tasks/data_import_field.rake +++ b/lib/tasks/data_import_field.rake @@ -5,12 +5,17 @@ namespace :core do path = args[:path] raise "Usage: rake core:data_import_field['field','path/to/xml_files']" if path.blank? || field.blank? - storage_service = Storage::S3Service.new(Configuration::PaasConfigurationService.new, ENV["IMPORT_PAAS_INSTANCE"]) - # We only allow a reduced list of known fields to be updatable case field when "tenancycode", "major_repairs", "lettings_allocation", "offered" - Imports::LettingsLogsFieldImportService.new(storage_service).update_field(field, path) + s3_service = Storage::S3Service.new(Configuration::PaasConfigurationService.new, ENV["IMPORT_PAAS_INSTANCE"]) + archive_io = s3_service.get_file_io(path) + archive_service = Storage::ArchiveService.new(archive_io) + if archive_service.folder_present?("logs") + Rails.logger.info("Start importing field from folder logs") + Imports::LettingsLogsFieldImportService.new(archive_service).update_field(field, "logs") + Rails.logger.info("Imported") + end else raise "Field #{field} cannot be updated by data_import_field" end diff --git a/spec/lib/tasks/date_import_field_spec.rb b/spec/lib/tasks/date_import_field_spec.rb index 1ed2d0073..a30920694 100644 --- a/spec/lib/tasks/date_import_field_spec.rb +++ b/spec/lib/tasks/date_import_field_spec.rb @@ -17,27 +17,28 @@ describe "rake core:data_import_field", type: :task do allow(Configuration::PaasConfigurationService).to receive(:new).and_return(paas_config_service) allow(ENV).to receive(:[]) allow(ENV).to receive(:[]).with("IMPORT_PAAS_INSTANCE").and_return(instance_name) + allow(Imports::LettingsLogsFieldImportService).to receive(:new).and_return(import_service) end context "when importing a lettings log field" do let(:import_service) { instance_double(Imports::LettingsLogsFieldImportService) } - let(:fixture_path) { "spec/fixtures/imports/lettings_logs" } + let(:fixture_path) { "spec/fixtures/imports/logs" } + let(:archive_service) { instance_double(Storage::ArchiveService) } before do - allow(Imports::LettingsLogsFieldImportService).to receive(:new).and_return(import_service) allow(import_service).to receive(:update_field) + allow(Storage::ArchiveService).to receive(:new).and_return(archive_service) + allow(archive_service).to receive(:folder_present?).with("logs").and_return(true) end context "and we update the tenancycode field" do let(:field) { "tenancycode" } - it "properly configures the storage service" do + it "updates the logs from the given XML file" do expect(Storage::S3Service).to receive(:new).with(paas_config_service, instance_name) - task.invoke(field, fixture_path) - end - - it "calls the expected update method with parameters" do - expect(import_service).to receive(:update_field).with(field, fixture_path) + expect(storage_service).to receive(:get_file_io).with("spec/fixtures/imports/logs") + expect(Imports::LettingsLogsFieldImportService).to receive(:new).with(archive_service) + expect(import_service).to receive(:update_field).with(field, "logs") task.invoke(field, fixture_path) end end @@ -45,13 +46,11 @@ describe "rake core:data_import_field", type: :task do context "and we update the lettings_allocation fields" do let(:field) { "lettings_allocation" } - it "properly configures the storage service" do + it "updates the logs from the given XML file" do expect(Storage::S3Service).to receive(:new).with(paas_config_service, instance_name) - task.invoke(field, fixture_path) - end - - it "calls the expected update method with parameters" do - expect(import_service).to receive(:update_field).with(field, fixture_path) + expect(storage_service).to receive(:get_file_io).with("spec/fixtures/imports/logs") + expect(Imports::LettingsLogsFieldImportService).to receive(:new).with(archive_service) + expect(import_service).to receive(:update_field).with(field, "logs") task.invoke(field, fixture_path) end end @@ -59,13 +58,23 @@ describe "rake core:data_import_field", type: :task do context "and we update the major repairs fields" do let(:field) { "major_repairs" } - it "properly configures the storage service" do + it "updates the logs from the given XML file" do expect(Storage::S3Service).to receive(:new).with(paas_config_service, instance_name) + expect(storage_service).to receive(:get_file_io).with("spec/fixtures/imports/logs") + expect(Imports::LettingsLogsFieldImportService).to receive(:new).with(archive_service) + expect(import_service).to receive(:update_field).with(field, "logs") task.invoke(field, fixture_path) end + end - it "calls the expected update method with parameters" do - expect(import_service).to receive(:update_field).with(field, fixture_path) + context "and we update the offered fields" do + let(:field) { "offered" } + + it "updates the logs from the given XML file" do + expect(Storage::S3Service).to receive(:new).with(paas_config_service, instance_name) + expect(storage_service).to receive(:get_file_io).with("spec/fixtures/imports/logs") + expect(Imports::LettingsLogsFieldImportService).to receive(:new).with(archive_service) + expect(import_service).to receive(:update_field).with(field, "logs") task.invoke(field, fixture_path) end end