From 36fede356d1eff03e64793671f7ab46c0511007d Mon Sep 17 00:00:00 2001 From: Kat Date: Tue, 9 May 2023 12:57:30 +0100 Subject: [PATCH] Clear invalid format previous postcode --- .../local_authority_validations.rb | 2 +- .../imports/lettings_logs_import_service.rb | 4 +-- .../imports/sales_logs_import_service.rb | 6 +++++ .../imports/sales_logs_import_service_spec.rb | 27 +++++++++++++++++++ 4 files changed, 36 insertions(+), 3 deletions(-) diff --git a/app/models/validations/local_authority_validations.rb b/app/models/validations/local_authority_validations.rb index c895880bd..3bdd79166 100644 --- a/app/models/validations/local_authority_validations.rb +++ b/app/models/validations/local_authority_validations.rb @@ -3,7 +3,7 @@ module Validations::LocalAuthorityValidations postcode = record.ppostcode_full if record.previous_postcode_known? && (postcode.blank? || !postcode.match(POSTCODE_REGEXP)) error_message = I18n.t("validations.postcode") - record.errors.add :ppostcode_full, error_message + record.errors.add :ppostcode_full, :wrong_format, message: error_message end end end diff --git a/app/services/imports/lettings_logs_import_service.rb b/app/services/imports/lettings_logs_import_service.rb index b1487a0b7..75d7f1737 100644 --- a/app/services/imports/lettings_logs_import_service.rb +++ b/app/services/imports/lettings_logs_import_service.rb @@ -467,11 +467,11 @@ module Imports def previous_postcode_known(xml_doc, previous_postcode, prevloc) previous_postcode_known = string_or_nil(xml_doc, "Q12bnot") if previous_postcode_known == "Temporary_or_Unknown" || (previous_postcode.nil? && prevloc.present?) - 0 + 0 # not known elsif previous_postcode.nil? nil else - 1 + 1 # known end end diff --git a/app/services/imports/sales_logs_import_service.rb b/app/services/imports/sales_logs_import_service.rb index 565c16512..6f79ca6f0 100644 --- a/app/services/imports/sales_logs_import_service.rb +++ b/app/services/imports/sales_logs_import_service.rb @@ -249,6 +249,12 @@ module Imports attributes.delete("postcode_full") attributes["pcodenk"] = attributes["la"].present? ? 1 : nil save_sales_log(attributes, previous_status) + elsif sales_log.errors.of_kind?(:ppostcode_full, :wrong_format) + @logger.warn("Log #{sales_log.old_id}: Removing previous postcode as the postcode is invalid") + @logs_overridden << sales_log.old_id + attributes.delete("ppostcode_full") + attributes["ppcodenk"] = attributes["prevloc"].present? ? 1 : nil + save_sales_log(attributes, previous_status) elsif sales_log.errors.of_kind?(:uprn, :uprn_error) @logger.warn("Log #{sales_log.old_id}: Setting uprn_known to no with error: #{sales_log.errors[:uprn].join(', ')}") @logs_overridden << sales_log.old_id diff --git a/spec/services/imports/sales_logs_import_service_spec.rb b/spec/services/imports/sales_logs_import_service_spec.rb index f169dbd78..15c7df654 100644 --- a/spec/services/imports/sales_logs_import_service_spec.rb +++ b/spec/services/imports/sales_logs_import_service_spec.rb @@ -595,6 +595,33 @@ RSpec.describe Imports::SalesLogsImportService do end end + context "and it has a record with previous postcode in invalid format" do + let(:sales_log_id) { "shared_ownership_sales_log" } + + before do + sales_log_xml.at_xpath("//xmlns:Q7Postcode").content = "L3132AF" + sales_log_xml.at_xpath("//xmlns:Q7ONSLACode").content = "E07000223" + end + + it "intercepts the relevant validation error" do + expect(logger).to receive(:warn).with(/Log shared_ownership_sales_log: Removing previous postcode as the postcode is invalid/) + expect { sales_log_service.send(:create_log, sales_log_xml) } + .not_to raise_error + end + + it "clears out the invalid answers and sets correct prevloc" do + allow(logger).to receive(:warn) + + sales_log_service.send(:create_log, sales_log_xml) + sales_log = SalesLog.find_by(old_id: sales_log_id) + + expect(sales_log).not_to be_nil + expect(sales_log.ppostcode_full).to be_nil + expect(sales_log.ppcodenk).to eq(1) # not known + expect(sales_log.prevloc).to eq("E07000223") # not known + end + end + context "and setup field has validation error in incomplete log" do let(:sales_log_id) { "shared_ownership_sales_log" }