Browse Source

feat: add field import service and test

pull/1850/head
natdeanlewissoftwire 3 years ago
parent
commit
e3a97acd77
  1. 2
      app/services/imports/lettings_logs_field_import_service.rb
  2. 23
      app/services/imports/sales_logs_field_import_service.rb
  3. 39
      spec/services/imports/sales_logs_field_import_service_spec.rb

2
app/services/imports/lettings_logs_field_import_service.rb

@ -39,6 +39,8 @@ module Imports
end end
def update_creation_method(xml_doc) 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") old_id = meta_field_value(xml_doc, "document-id")
log = LettingsLog.find_by(old_id:) log = LettingsLog.find_by(old_id:)

23
app/services/imports/sales_logs_field_import_service.rb

@ -4,6 +4,8 @@ module Imports
case field case field
when "creation_method" when "creation_method"
import_from(folder, :update_creation_method) import_from(folder, :update_creation_method)
when "owning_organisation_id"
import_from(folder, :update_owning_organisation_id)
else else
raise "Updating #{field} is not supported by the field import service" raise "Updating #{field} is not supported by the field import service"
end end
@ -12,6 +14,8 @@ module Imports
private private
def update_creation_method(xml_doc) 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") old_id = meta_field_value(xml_doc, "document-id")
log = SalesLog.find_by(old_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" @logger.info "sales log #{log.id} creation method set to bulk upload"
end end
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
end end

39
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(:fixture_directory) { "spec/fixtures/imports/sales_logs" }
let(:sales_log_filename) { "shared_ownership_sales_log" } let(:sales_log_filename) { "shared_ownership_sales_log" }
let(:sales_log_file) { File.open("#{fixture_directory}/#{sales_log_filename}.xml") } 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(:old_user_id) { "c3061a2e6ea0b702e6f6210d5c52d2a92612d2aa" }
let(:remote_folder) { "sales_logs" } let(:remote_folder) { "sales_logs" }
@ -73,4 +73,41 @@ RSpec.describe Imports::SalesLogsFieldImportService do
end end
end 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 end

Loading…
Cancel
Save