From e90376bac093884906e68b660b1a1c04e8f056d1 Mon Sep 17 00:00:00 2001 From: Kat Date: Tue, 21 Mar 2023 12:34:54 +0000 Subject: [PATCH] Don't clear type if it errors --- .../imports/sales_logs_import_service.rb | 6 +++-- .../imports/sales_logs_import_service_spec.rb | 27 +++++++++++++++++++ 2 files changed, 31 insertions(+), 2 deletions(-) diff --git a/app/services/imports/sales_logs_import_service.rb b/app/services/imports/sales_logs_import_service.rb index 37591f382..c04bbb291 100644 --- a/app/services/imports/sales_logs_import_service.rb +++ b/app/services/imports/sales_logs_import_service.rb @@ -189,8 +189,10 @@ module Imports def rescue_validation_or_raise(sales_log, attributes, previous_status, exception) if %w[saved submitted-invalid].include?(previous_status) sales_log.errors.each do |error| - @logger.warn("Log #{sales_log.old_id}: Removing field #{error.attribute} from log triggering validation: #{error.type}") - attributes.delete(error.attribute.to_s) + unless error.attribute == :type || error.attribute == :ownershipsch + @logger.warn("Log #{sales_log.old_id}: Removing field #{error.attribute} from log triggering validation: #{error.type}") + attributes.delete(error.attribute.to_s) + end attributes.delete("pcodenk") if error.attribute == :postcode_full attributes.delete("ppcodenk") if error.attribute == :ppostcode_full end diff --git a/spec/services/imports/sales_logs_import_service_spec.rb b/spec/services/imports/sales_logs_import_service_spec.rb index ff6e9ae2b..4458b59b9 100644 --- a/spec/services/imports/sales_logs_import_service_spec.rb +++ b/spec/services/imports/sales_logs_import_service_spec.rb @@ -422,6 +422,33 @@ RSpec.describe Imports::SalesLogsImportService do end end + context "and setup field has validation error in incomplete log" do + let(:sales_log_id) { "shared_ownership_sales_log" } + + before do + sales_log_xml.at_xpath("//meta:status").content = "saved" + sales_log_xml.at_xpath("//xmlns:Q17aStaircase").content = "1 Yes" + sales_log_xml.at_xpath("//xmlns:PercentBought").content = "5" + sales_log_xml.at_xpath("//xmlns:PercentOwns").content = "40" + sales_log_xml.at_xpath("//xmlns:Q17Resale").content = "" + sales_log_xml.at_xpath("//xmlns:EXDAY").content = "" + sales_log_xml.at_xpath("//xmlns:EXMONTH").content = "" + sales_log_xml.at_xpath("//xmlns:EXYEAR").content = "" + sales_log_xml.at_xpath("//xmlns:HODAY").content = "" + sales_log_xml.at_xpath("//xmlns:HOMONTH").content = "" + sales_log_xml.at_xpath("//xmlns:HOYEAR").content = "" + end + + it "intercepts the relevant validation error but does not clear setup fields" do + expect(logger).to receive(:warn).with(/Log shared_ownership_sales_log: Removing field stairbought from log triggering validation: The minimum increase in equity while staircasing is 10%/) + expect { sales_log_service.send(:create_log, sales_log_xml) } + .not_to raise_error + sales_log = SalesLog.find_by(old_id: sales_log_id) + + expect(sales_log.type).to eq(2) + end + end + context "and it has an invalid record with invalid postcodes" do let(:sales_log_id) { "discounted_ownership_sales_log" }