Browse Source

Clears invalidated fields for in progress logs

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

11
app/services/imports/sales_logs_import_service.rb

@ -185,7 +185,15 @@ 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)
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)
end
@logs_overridden << sales_log.old_id
save_sales_log(attributes, previous_status)
else
@logger.error("Log #{sales_log.old_id}: Failed to import") @logger.error("Log #{sales_log.old_id}: Failed to import")
sales_log.errors.each do |error| sales_log.errors.each do |error|
@logger.error("Validation error: Field #{error.attribute}:") @logger.error("Validation error: Field #{error.attribute}:")
@ -197,6 +205,7 @@ module Imports
end end
raise exception raise exception
end end
end
def compute_differences(sales_log, attributes) def compute_differences(sales_log, attributes)
differences = [] differences = []

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