Browse Source

Clear income on over_hard_max_for_london validation

pull/1605/head
Kat 3 years ago
parent
commit
3dea3c2a10
  1. 4
      app/models/validations/sales/financial_validations.rb
  2. 7
      app/services/imports/sales_logs_import_service.rb
  3. 52
      spec/services/imports/sales_logs_import_service_spec.rb

4
app/models/validations/sales/financial_validations.rb

@ -7,7 +7,7 @@ module Validations::Sales::FinancialValidations
relevant_fields = %i[income1 ownershipsch uprn la postcode_full] relevant_fields = %i[income1 ownershipsch uprn la postcode_full]
if record.london_property? && record.income1 > 90_000 if record.london_property? && record.income1 > 90_000
relevant_fields.each { |field| record.errors.add field, I18n.t("validations.financial.income.over_hard_max_for_london") } relevant_fields.each { |field| record.errors.add field, :over_hard_max_for_london, message: I18n.t("validations.financial.income.over_hard_max_for_london") }
elsif record.property_not_in_london? && record.income1 > 80_000 elsif record.property_not_in_london? && record.income1 > 80_000
relevant_fields.each { |field| record.errors.add field, :over_hard_max_for_outside_london, message: I18n.t("validations.financial.income.over_hard_max_for_outside_london") } relevant_fields.each { |field| record.errors.add field, :over_hard_max_for_outside_london, message: I18n.t("validations.financial.income.over_hard_max_for_outside_london") }
end end
@ -18,7 +18,7 @@ module Validations::Sales::FinancialValidations
relevant_fields = %i[income2 ownershipsch uprn la postcode_full] relevant_fields = %i[income2 ownershipsch uprn la postcode_full]
if record.london_property? && record.income2 > 90_000 if record.london_property? && record.income2 > 90_000
relevant_fields.each { |field| record.errors.add field, I18n.t("validations.financial.income.over_hard_max_for_london") } relevant_fields.each { |field| record.errors.add field, :over_hard_max_for_london, message: I18n.t("validations.financial.income.over_hard_max_for_london") }
elsif record.property_not_in_london? && record.income2 > 80_000 elsif record.property_not_in_london? && record.income2 > 80_000
relevant_fields.each { |field| record.errors.add field, I18n.t("validations.financial.income.over_hard_max_for_outside_london") } relevant_fields.each { |field| record.errors.add field, I18n.t("validations.financial.income.over_hard_max_for_outside_london") }
end end

7
app/services/imports/sales_logs_import_service.rb

@ -229,11 +229,16 @@ module Imports
@logs_overridden << sales_log.old_id @logs_overridden << sales_log.old_id
attributes.delete("exdate") attributes.delete("exdate")
save_sales_log(attributes, previous_status) save_sales_log(attributes, previous_status)
elsif sales_log.errors.of_kind?(:income1, :over_hard_max_for_outside_london) elsif sales_log.errors.of_kind?(:income1, :over_hard_max_for_outside_london) || sales_log.errors.of_kind?(:income1, :over_hard_max_for_london)
@logger.warn("Log #{sales_log.old_id}: Removing income1 as the income1 is invalid") @logger.warn("Log #{sales_log.old_id}: Removing income1 as the income1 is invalid")
@logs_overridden << sales_log.old_id @logs_overridden << sales_log.old_id
attributes.delete("income1") attributes.delete("income1")
save_sales_log(attributes, previous_status) save_sales_log(attributes, previous_status)
elsif sales_log.errors.of_kind?(:income2, :over_hard_max_for_london)
@logger.warn("Log #{sales_log.old_id}: Removing income2 as the income2 is invalid")
@logs_overridden << sales_log.old_id
attributes.delete("income2")
save_sales_log(attributes, previous_status)
elsif sales_log.errors.of_kind?(:equity, :over_max) || sales_log.errors.of_kind?(:equity, :under_min) elsif sales_log.errors.of_kind?(:equity, :over_max) || sales_log.errors.of_kind?(:equity, :under_min)
@logger.warn("Log #{sales_log.old_id}: Removing equity as the equity is invalid") @logger.warn("Log #{sales_log.old_id}: Removing equity as the equity is invalid")
@logs_overridden << sales_log.old_id @logs_overridden << sales_log.old_id

52
spec/services/imports/sales_logs_import_service_spec.rb

@ -742,7 +742,7 @@ RSpec.describe Imports::SalesLogsImportService do
end end
end end
context "and it has an invalid income" do context "and it has an invalid income 1" do
let(:sales_log_id) { "shared_ownership_sales_log" } let(:sales_log_id) { "shared_ownership_sales_log" }
before do before do
@ -767,6 +767,56 @@ RSpec.describe Imports::SalesLogsImportService do
end end
end end
context "and it has an invalid income 1 for london" do
let(:sales_log_id) { "shared_ownership_sales_log" }
before do
sales_log_xml.at_xpath("//xmlns:Q2Person1Income").content = "95000"
sales_log_xml.at_xpath("//xmlns:Q14ONSLACode").content = "E09000012"
end
it "intercepts the relevant validation error" do
expect(logger).to receive(:warn).with(/Removing income1 as the income1 is invalid/)
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.income1).to be_nil
end
end
context "and it has an invalid income 2 for london" do
let(:sales_log_id) { "shared_ownership_sales_log" }
before do
sales_log_xml.at_xpath("//xmlns:Q2Person2Income").content = "95000"
sales_log_xml.at_xpath("//xmlns:Q14ONSLACode").content = "E09000012"
end
it "intercepts the relevant validation error" do
expect(logger).to receive(:warn).with(/Removing income2 as the income2 is invalid/)
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.income2).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