From 0e331511b0e6c0a93223690e1acaefd496ea7983 Mon Sep 17 00:00:00 2001 From: David May-Miller Date: Wed, 14 Dec 2022 14:19:12 +0000 Subject: [PATCH] CLDC-853 Add new tests for new page and refactor slightly --- .../sales/financial_validations.rb | 1 + .../sales/household_validations.rb | 1 + .../validations/sales/shared_validations.rb | 9 ++++++ .../sales/financial_validations_spec.rb | 30 +++++++++++++++++++ .../sales/shared_validations_spec.rb | 18 +++++++++++ 5 files changed, 59 insertions(+) create mode 100644 app/models/validations/sales/shared_validations.rb create mode 100644 spec/models/validations/sales/shared_validations_spec.rb diff --git a/app/models/validations/sales/financial_validations.rb b/app/models/validations/sales/financial_validations.rb index 6c4e84107..446a18f27 100644 --- a/app/models/validations/sales/financial_validations.rb +++ b/app/models/validations/sales/financial_validations.rb @@ -1,4 +1,5 @@ module Validations::Sales::FinancialValidations + include Validations::Sales::SharedValidations # Validations methods need to be called 'validate_' to run on model save # or 'validate_' to run on submit as well diff --git a/app/models/validations/sales/household_validations.rb b/app/models/validations/sales/household_validations.rb index 90e02995c..715df3dc7 100644 --- a/app/models/validations/sales/household_validations.rb +++ b/app/models/validations/sales/household_validations.rb @@ -1,5 +1,6 @@ module Validations::Sales::HouseholdValidations include Validations::SharedValidations + include Validations::Sales::SharedValidations def validate_household_number_of_other_members(record) (2..6).each do |n| diff --git a/app/models/validations/sales/shared_validations.rb b/app/models/validations/sales/shared_validations.rb new file mode 100644 index 000000000..801f0740e --- /dev/null +++ b/app/models/validations/sales/shared_validations.rb @@ -0,0 +1,9 @@ +module Validations::Sales::SharedValidations + def child_income_validation(record, field) + if record.relat2 && record.income2 + if record.relat2 == "C" && record.income2 > 0 + record.errors.add field, I18n.t("validations.financial.income.child_has_income") + end + end + end +end diff --git a/spec/models/validations/sales/financial_validations_spec.rb b/spec/models/validations/sales/financial_validations_spec.rb index d6c9dde3e..796144848 100644 --- a/spec/models/validations/sales/financial_validations_spec.rb +++ b/spec/models/validations/sales/financial_validations_spec.rb @@ -28,6 +28,14 @@ RSpec.describe Validations::Sales::FinancialValidations do expect(record.errors["postcode_full"]) .to include(match I18n.t("validations.financial.income1.over_hard_max", hard_max: 80_000)) end + + it "adds an error when buyer 2 income is over hard max for ecstat #{ecstat}" do + record.income1 = 85_000 + record.ecstat1 = ecstat + financial_validator.validate_income2(record) + expect(record.errors["income2"]) + .to include(match I18n.t("validations.financial.income.over_hard_max", hard_max: 80_000)) + end end it "validates that the income is within the expected range for the tenant’s employment status" do @@ -40,6 +48,17 @@ RSpec.describe Validations::Sales::FinancialValidations do expect(record.errors["la"]).to be_empty expect(record.errors["postcode_full"]).to be_empty end + + it "adds an error when combined income is over the limit" do + record.income1 = 45_000 + record.income2 = 40_000 + financial_validator.validate_income1(record) + financial_validator.validate_income2(record) + expect(record.errors["income1"]) + .to include(match I18n.t("validations.financial.income.combined_over_hard_max", hard_max: 80_000)) + expect(record.errors["income2"]) + .to include(match I18n.t("validations.financial.income.combined_over_hard_max", hard_max: 80_000)) + end end context "and a london borough" do @@ -78,6 +97,17 @@ RSpec.describe Validations::Sales::FinancialValidations do expect(record.errors["la"]).to be_empty expect(record.errors["postcode_full"]).to be_empty end + + it "adds an error when combined income is over the limit" do + record.income1 = 50_000 + record.income2 = 45_000 + financial_validator.validate_income1(record) + financial_validator.validate_income2(record) + expect(record.errors["income1"]) + .to include(match I18n.t("validations.financial.income.combined_over_hard_max", hard_max: 90_000)) + expect(record.errors["income2"]) + .to include(match I18n.t("validations.financial.income.combined_over_hard_max", hard_max: 90_000)) + end end end end diff --git a/spec/models/validations/sales/shared_validations_spec.rb b/spec/models/validations/sales/shared_validations_spec.rb new file mode 100644 index 000000000..a4b8ec939 --- /dev/null +++ b/spec/models/validations/sales/shared_validations_spec.rb @@ -0,0 +1,18 @@ +require "rails_helper" + +RSpec.describe Validations::Sales::SharedValidations do + subject(:household_validator) { validator_class.new } + + let(:validator_class) { Class.new { include Validations::Sales::HouseholdValidations } } + let(:record) { FactoryBot.create(:sales_log) } + + describe "child income validation" do + it "adds an error when a child has an income greater than 0" do + record.relat2 = "C" + record.income2 = 100 + household_validator.validate_relat2(record) + expect(record.errors["relat2"]) + .to include(match I18n.t("validations.financial.income.child_has_income")) + end + end +end