Browse Source

Clears invalidated fields for in progress logs

pull/1384/head
Kat 3 years ago
parent
commit
4f99f896e7
  1. 29
      app/services/imports/sales_logs_import_service.rb
  2. 31
      spec/services/imports/sales_logs_import_service_spec.rb

29
app/services/imports/sales_logs_import_service.rb

@ -185,17 +185,26 @@ module Imports
end end
end end
def rescue_validation_or_raise(sales_log, attributes, _previous_status, exception) def rescue_validation_or_raise(sales_log, attributes, previous_status, exception)
@logger.error("Log #{sales_log.old_id}: Failed to import") if %w[saved submitted-invalid].include?(previous_status)
sales_log.errors.each do |error| sales_log.errors.each do |error|
@logger.error("Validation error: Field #{error.attribute}:") @logger.warn("Log #{sales_log.old_id}: Removing field #{error.attribute} from log triggering validation: #{error.type}")
@logger.error("\tOwning Organisation: #{sales_log.owning_organisation&.name}") attributes.delete(error.attribute.to_s)
@logger.error("\tOld CORE ID: #{sales_log.old_id}") end
@logger.error("\tOld CORE: #{attributes[error.attribute.to_s]&.inspect}") @logs_overridden << sales_log.old_id
@logger.error("\tNew CORE: #{sales_log.read_attribute(error.attribute)&.inspect}") save_sales_log(attributes, previous_status)
@logger.error("\tError message: #{error.type}") else
@logger.error("Log #{sales_log.old_id}: Failed to import")
sales_log.errors.each do |error|
@logger.error("Validation error: Field #{error.attribute}:")
@logger.error("\tOwning Organisation: #{sales_log.owning_organisation&.name}")
@logger.error("\tOld CORE ID: #{sales_log.old_id}")
@logger.error("\tOld CORE: #{attributes[error.attribute.to_s]&.inspect}")
@logger.error("\tNew CORE: #{sales_log.read_attribute(error.attribute)&.inspect}")
@logger.error("\tError message: #{error.type}")
end
raise exception
end end
raise exception
end end
def compute_differences(sales_log, attributes) def compute_differences(sales_log, attributes)

31
spec/services/imports/sales_logs_import_service_spec.rb

@ -363,6 +363,37 @@ RSpec.describe Imports::SalesLogsImportService do
end end
end end
context "and it has an invalid record with invalid child, student and 16-19 age combination" do
let(:sales_log_id) { "discounted_ownership_sales_log" }
before do
sales_log_xml.at_xpath("//meta:status").content = "submitted-invalid"
sales_log_xml.at_xpath("//xmlns:P2Age").content = 16
sales_log_xml.at_xpath("//xmlns:P2Eco").content = 7
sales_log_xml.at_xpath("//xmlns:P2Rel").content = "X"
end
it "intercepts the relevant validation error" do
expect(logger).to receive(:warn).with(/Removing field age2 from log triggering validation: Person cannot be aged 16-19 if they are a student but don't have relationship ‘child’/)
expect(logger).to receive(:warn).with(/Removing field relat2 from log triggering validation: Answer must be ‘child’ if the person is aged 16-19 and a student/)
expect(logger).to receive(:warn).with(/Removing field ecstat2 from log triggering validation: Person cannot be a student if they are aged 16-19 but don‘t have relationship ‘child’/)
expect { sales_log_service.send(:create_log, sales_log_xml) }
.not_to raise_error
end
it "clears out the invalid answers" 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.age2).to be_nil
expect(sales_log.relat2).to be_nil
expect(sales_log.ecstat2).to be_nil
end
end
context "when inferring default answers for completed sales logs" do context "when inferring default answers for completed sales logs" do
context "when the armedforcesspouse is not answered" do context "when the armedforcesspouse is not answered" do
let(:sales_log_id) { "discounted_ownership_sales_log" } let(:sales_log_id) { "discounted_ownership_sales_log" }

Loading…
Cancel
Save