Browse Source

CLDC-4074: Fix model tests

CLDC-4074-update-tests-for-edit-closing
Samuel Young 7 days ago
parent
commit
99e5c53136
  1. 6
      spec/models/log_spec.rb
  2. 2
      spec/models/scheme_spec.rb
  3. 4
      spec/models/validations/date_validations_spec.rb
  4. 164
      spec/models/validations/household_validations_spec.rb
  5. 343
      spec/models/validations/sales/financial_validations_spec.rb
  6. 389
      spec/models/validations/sales/household_validations_spec.rb
  7. 75
      spec/models/validations/sales/property_validations_spec.rb
  8. 793
      spec/models/validations/sales/sale_information_validations_spec.rb
  9. 93
      spec/models/validations/sales/soft_validations_spec.rb

6
spec/models/log_spec.rb

@ -1,6 +1,8 @@
require "rails_helper" require "rails_helper"
RSpec.describe Log, type: :model do RSpec.describe Log, type: :model do
include CollectionTimeHelper
it "has two child log classes" do it "has two child log classes" do
expect(SalesLog).to be < described_class expect(SalesLog).to be < described_class
expect(LettingsLog).to be < described_class expect(LettingsLog).to be < described_class
@ -62,12 +64,12 @@ RSpec.describe Log, type: :model do
end end
context "when a non setup field is invalid for a lettings log" do context "when a non setup field is invalid for a lettings log" do
subject(:model) { build_stubbed(:lettings_log, :completed, startdate: Time.zone.local(2023, 12, 12), offered: 234) } subject(:model) { build_stubbed(:lettings_log, :completed, startdate: current_collection_start_date, age1: 234) }
it "blanks it" do it "blanks it" do
model.valid? model.valid?
model.blank_invalid_non_setup_fields! model.blank_invalid_non_setup_fields!
expect(model.offered).to be_nil expect(model.age1).to be_nil
end end
end end

2
spec/models/scheme_spec.rb

@ -472,7 +472,7 @@ RSpec.describe Scheme, type: :model do
context "when the most recently created deactivation is not the current one" do context "when the most recently created deactivation is not the current one" do
before do before do
FactoryBot.create(:scheme_deactivation_period, deactivation_date: Time.zone.today - 300.days, reactivation_date: Time.zone.today - 200.days, scheme:) FactoryBot.create(:scheme_deactivation_period, deactivation_date: Time.zone.today - 5.days, reactivation_date: Time.zone.today - 4.days, scheme:)
end end
it "returns reactivating_soon" do it "returns reactivating_soon" do

4
spec/models/validations/date_validations_spec.rb

@ -56,7 +56,7 @@ RSpec.describe Validations::DateValidations do
context "with 2024 logs or earlier" do context "with 2024 logs or earlier" do
it "cannot be more than 10 years before the tenancy start date" do it "cannot be more than 10 years before the tenancy start date" do
record.startdate = Time.zone.local(2024, 2, 1) record.startdate = Time.zone.local(2024, 4, 1)
record.mrcdate = Time.zone.local(2014, 1, 31) record.mrcdate = Time.zone.local(2014, 1, 31)
date_validator.validate_property_major_repairs(record) date_validator.validate_property_major_repairs(record)
expect(record.errors["mrcdate"]) expect(record.errors["mrcdate"])
@ -150,7 +150,7 @@ RSpec.describe Validations::DateValidations do
context "with 2024 logs or earlier" do context "with 2024 logs or earlier" do
it "cannot be more than 10 years before the tenancy start date" do it "cannot be more than 10 years before the tenancy start date" do
record.startdate = Time.zone.local(2024, 2, 1) record.startdate = Time.zone.local(2024, 4, 1)
record.voiddate = Time.zone.local(2014, 1, 31) record.voiddate = Time.zone.local(2014, 1, 31)
date_validator.validate_property_void_date(record) date_validator.validate_property_void_date(record)
expect(record.errors["voiddate"]) expect(record.errors["voiddate"])

164
spec/models/validations/household_validations_spec.rb

@ -50,17 +50,6 @@ RSpec.describe Validations::HouseholdValidations do
expect(record.errors["reasonother"]).to be_empty expect(record.errors["reasonother"]).to be_empty
end end
context "when form year is before 2024" do
let(:startdate) { Time.zone.local(2024, 1, 1) }
it "does not validate the content of reasonother for phrases indicating homelessness" do
record.reason = 20
record.reasonother = "Temp accommodation"
household_validator.validate_reason_for_leaving_last_settled_home(record)
expect(record.errors["reason"]).to be_empty
end
end
context "when form year is >= 2024" do context "when form year is >= 2024" do
let(:startdate) { Time.zone.local(2024, 4, 1) } let(:startdate) { Time.zone.local(2024, 4, 1) }
@ -273,53 +262,7 @@ RSpec.describe Validations::HouseholdValidations do
end end
end end
describe "#validate_partner_count" do
let(:startdate) { Time.zone.local(2023, 4, 1) }
it "validates that only 1 partner exists" do
record.relat2 = "P"
record.relat3 = "P"
household_validator.validate_partner_count(record)
expect(record.errors["relat2"])
.to include(match I18n.t("validations.lettings.household.relat.one_partner"))
expect(record.errors["relat3"])
.to include(match I18n.t("validations.lettings.household.relat.one_partner"))
expect(record.errors["relat4"])
.not_to include(match I18n.t("validations.lettings.household.relat.one_partner"))
end
it "expects that a tenant can have a partner" do
record.relat3 = "P"
household_validator.validate_partner_count(record)
expect(record.errors["base"]).to be_empty
end
end
describe "#validate_person_age_matches_relationship" do describe "#validate_person_age_matches_relationship" do
context "with 2023 logs" do
let(:startdate) { Time.zone.local(2023, 4, 1) }
context "when the household contains a person under 16" do
it "validates that person must be a child of the tenant" do
record.age2 = 14
record.relat2 = "P"
household_validator.validate_person_age_matches_relationship(record)
expect(record.errors["relat2"])
.to include(match I18n.t("validations.lettings.household.relat.child_under_16", person_num: 2))
expect(record.errors["age2"])
.to include(match I18n.t("validations.lettings.household.age.child_under_16_relat", person_num: 2))
end
it "expects that person is a child of the tenant" do
record.age2 = 14
record.relat2 = "C"
household_validator.validate_person_age_matches_relationship(record)
expect(record.errors["relat2"]).to be_empty
expect(record.errors["age2"]).to be_empty
end
end
end
context "with 2024 logs" do context "with 2024 logs" do
let(:startdate) { Time.zone.local(2024, 4, 1) } let(:startdate) { Time.zone.local(2024, 4, 1) }
@ -342,41 +285,6 @@ RSpec.describe Validations::HouseholdValidations do
end end
describe "#validate_person_age_matches_economic_status" do describe "#validate_person_age_matches_economic_status" do
context "with 2023 logs" do
let(:startdate) { Time.zone.local(2023, 4, 1) }
context "when the household contains a person under 16" do
it "validates that person's economic status must be Child" do
record.age2 = 14
record.ecstat2 = 1
household_validator.validate_person_age_matches_economic_status(record)
expect(record.errors["ecstat2"])
.to include(match I18n.t("validations.lettings.household.ecstat.child_under_16", person_num: 2))
expect(record.errors["age2"])
.to include(match I18n.t("validations.lettings.household.age.child_under_16_ecstat", person_num: 2))
end
it "expects that person's economic status is Child" do
record.age2 = 14
record.ecstat2 = 9
household_validator.validate_person_age_matches_economic_status(record)
expect(record.errors["ecstat2"]).to be_empty
expect(record.errors["age2"]).to be_empty
end
it "validates that a person with economic status 'child' must be under 16" do
record.age2 = 21
record.relat2 = "C"
record.ecstat2 = 9
household_validator.validate_person_age_matches_economic_status(record)
expect(record.errors["ecstat2"])
.to include(match I18n.t("validations.lettings.household.ecstat.child_over_16", person_num: 2))
expect(record.errors["age2"])
.to include(match I18n.t("validations.lettings.household.age.child_over_16", person_num: 2))
end
end
end
context "with 2024 logs" do context "with 2024 logs" do
let(:startdate) { Time.zone.local(2024, 4, 1) } let(:startdate) { Time.zone.local(2024, 4, 1) }
@ -393,78 +301,6 @@ RSpec.describe Validations::HouseholdValidations do
end end
describe "#validate_person_age_and_relationship_matches_economic_status" do describe "#validate_person_age_and_relationship_matches_economic_status" do
context "with 2023 logs" do
let(:startdate) { Time.zone.local(2023, 4, 1) }
context "when the household contains a tenant’s child between the ages of 16 and 19" do
it "validates that person's economic status must be full time student or refused" do
record.age2 = 17
record.relat2 = "C"
record.ecstat2 = 1
household_validator.validate_person_age_and_relationship_matches_economic_status(record)
expect(record.errors["ecstat2"])
.to include(match I18n.t("validations.lettings.household.ecstat.student_16_19.must_be_student", person_num: 2))
expect(record.errors["age2"])
.to include(match I18n.t("validations.lettings.household.age.student_16_19.cannot_be_16_19.child_not_student", person_num: 2))
expect(record.errors["relat2"])
.to include(match I18n.t("validations.lettings.household.relat.student_16_19.cannot_be_child.16_19_not_student", person_num: 2))
end
it "expects that person can be a full time student" do
record.age2 = 17
record.relat2 = "C"
record.ecstat2 = 7
household_validator.validate_person_age_and_relationship_matches_economic_status(record)
expect(record.errors["ecstat2"]).to be_empty
expect(record.errors["age2"]).to be_empty
expect(record.errors["relat2"]).to be_empty
end
it "expects that person can refuse to share their work status" do
record.age2 = 17
record.relat2 = "C"
record.ecstat2 = 10
household_validator.validate_person_age_and_relationship_matches_economic_status(record)
expect(record.errors["ecstat2"]).to be_empty
expect(record.errors["age2"]).to be_empty
expect(record.errors["relat2"]).to be_empty
end
end
it "does not add an error for a person aged 16-19 who is a student but not a child of the lead tenant" do
record.age2 = 18
record.ecstat2 = "7"
record.relat2 = "P"
household_validator.validate_person_age_and_relationship_matches_economic_status(record)
expect(record.errors["relat2"]).to be_empty
expect(record.errors["ecstat2"]).to be_empty
expect(record.errors["age2"]).to be_empty
end
it "does not add an error for a person not aged 16-19 who is a student but not a child of the lead tenant" do
record.age2 = 20
record.ecstat2 = "7"
record.relat2 = "P"
household_validator.validate_person_age_and_relationship_matches_economic_status(record)
expect(record.errors["relat2"]).to be_empty
expect(record.errors["ecstat2"]).to be_empty
expect(record.errors["age2"]).to be_empty
end
it "adds errors for a person who is a child of the lead tenant and a student but not aged 16-19" do
record.age2 = 14
record.ecstat2 = "7"
record.relat2 = "C"
household_validator.validate_person_age_and_relationship_matches_economic_status(record)
expect(record.errors["relat2"])
.to include(match I18n.t("validations.lettings.household.relat.student_16_19.cannot_be_child.student_not_16_19"))
expect(record.errors["age2"])
.to include(match I18n.t("validations.lettings.household.age.student_16_19.must_be_16_19"))
expect(record.errors["ecstat2"])
.to include(match I18n.t("validations.lettings.household.ecstat.student_16_19.cannot_be_student.child_not_16_19"))
end
end
context "with 2024 logs" do context "with 2024 logs" do
let(:startdate) { Time.zone.local(2024, 4, 1) } let(:startdate) { Time.zone.local(2024, 4, 1) }

343
spec/models/validations/sales/financial_validations_spec.rb

@ -1,6 +1,8 @@
require "rails_helper" require "rails_helper"
RSpec.describe Validations::Sales::FinancialValidations do RSpec.describe Validations::Sales::FinancialValidations do
include CollectionTimeHelper
subject(:financial_validator) { validator_class.new } subject(:financial_validator) { validator_class.new }
let(:validator_class) { Class.new { include Validations::Sales::FinancialValidations } } let(:validator_class) { Class.new { include Validations::Sales::FinancialValidations } }
@ -208,47 +210,28 @@ RSpec.describe Validations::Sales::FinancialValidations do
end end
describe "#validate_percentage_bought_not_equal_percentage_owned" do describe "#validate_percentage_bought_not_equal_percentage_owned" do
let(:record) { FactoryBot.build(:sales_log) } let(:record) { FactoryBot.build(:sales_log, :saledate_today) }
context "with 24/25 logs" do
before do
record.saledate = Time.zone.local(2024, 4, 3)
end
it "does not add an error if the percentage bought is less than the percentage owned" do
record.stairbought = 20
record.stairowned = 40
financial_validator.validate_percentage_bought_not_equal_percentage_owned(record)
expect(record.errors).to be_empty
end
it "adds an error if the percentage bought is equal to the percentage owned" do
record.stairbought = 30
record.stairowned = 30
financial_validator.validate_percentage_bought_not_equal_percentage_owned(record)
expect(record.errors["stairowned"]).to eq([I18n.t("validations.sales.financial.stairowned.percentage_bought_equal_percentage_owned", stairbought: 30, stairowned: 30)])
expect(record.errors["stairbought"]).to eq([I18n.t("validations.sales.financial.stairbought.percentage_bought_equal_percentage_owned", stairbought: 30, stairowned: 30)])
end
it "does not add an error to stairowned and not stairbought if the percentage bought is more than the percentage owned" do it "does not add an error if the percentage bought is less than the percentage owned" do
record.stairbought = 50 record.stairbought = 20
record.stairowned = 40 record.stairowned = 40
financial_validator.validate_percentage_bought_not_equal_percentage_owned(record) financial_validator.validate_percentage_bought_not_equal_percentage_owned(record)
expect(record.errors).to be_empty expect(record.errors).to be_empty
end
end end
context "with 23/24 logs" do it "adds an error if the percentage bought is equal to the percentage owned" do
before do record.stairbought = 30
record.saledate = Time.zone.local(2023, 4, 3) record.stairowned = 30
end financial_validator.validate_percentage_bought_not_equal_percentage_owned(record)
expect(record.errors["stairowned"]).to eq([I18n.t("validations.sales.financial.stairowned.percentage_bought_equal_percentage_owned", stairbought: 30, stairowned: 30)])
expect(record.errors["stairbought"]).to eq([I18n.t("validations.sales.financial.stairbought.percentage_bought_equal_percentage_owned", stairbought: 30, stairowned: 30)])
end
it "does not add an error if the percentage bought is equal to the percentage owned" do it "does not add an error to stairowned and not stairbought if the percentage bought is more than the percentage owned" do
record.stairbought = 30 record.stairbought = 50
record.stairowned = 30 record.stairowned = 40
financial_validator.validate_percentage_bought_not_equal_percentage_owned(record) financial_validator.validate_percentage_bought_not_equal_percentage_owned(record)
expect(record.errors).to be_empty expect(record.errors).to be_empty
end
end end
end end
@ -348,195 +331,151 @@ RSpec.describe Validations::Sales::FinancialValidations do
describe "#validate_equity_in_range_for_year_and_type" do describe "#validate_equity_in_range_for_year_and_type" do
let(:record) { FactoryBot.build(:sales_log, saledate:, resale: nil) } let(:record) { FactoryBot.build(:sales_log, saledate:, resale: nil) }
context "with a log in the 22/23 collection year" do let(:saledate) { current_collection_start_date }
let(:saledate) { Time.zone.local(2023, 1, 1) }
it "adds an error for type 2, equity below min with the correct percentage" do
record.type = 2
record.equity = 1
financial_validator.validate_equity_in_range_for_year_and_type(record)
expect(record.errors["equity"]).to include(match I18n.t("validations.sales.financial.equity.equity_under_min", min_equity: 25))
expect(record.errors["type"]).to include(match I18n.t("validations.sales.financial.type.equity_under_min", min_equity: 25))
end
it "adds an error for type 30, equity below min with the correct percentage" do
record.type = 30
record.equity = 1
financial_validator.validate_equity_in_range_for_year_and_type(record)
expect(record.errors["equity"]).to include(match I18n.t("validations.sales.financial.equity.equity_under_min", min_equity: 10))
expect(record.errors["type"]).to include(match I18n.t("validations.sales.financial.type.equity_under_min", min_equity: 10))
end
it "does not add an error for equity in range with the correct percentage" do
record.type = 2
record.equity = 50
financial_validator.validate_equity_in_range_for_year_and_type(record)
expect(record.errors).to be_empty
end
it "adds an error for equity above max with the correct percentage" do
record.type = 2
record.equity = 90
financial_validator.validate_equity_in_range_for_year_and_type(record)
expect(record.errors["equity"]).to include(match I18n.t("validations.sales.financial.equity.equity_over_max", max_equity: 75))
expect(record.errors["type"]).to include(match I18n.t("validations.sales.financial.type.equity_over_max", max_equity: 75))
end
it "does not add an error if it's a resale" do it "adds an error for type 2, equity below min with the correct percentage" do
record.type = 2 record.type = 2
record.equity = 90 record.equity = 1
record.resale = 1 financial_validator.validate_equity_in_range_for_year_and_type(record)
financial_validator.validate_equity_in_range_for_year_and_type(record) expect(record.errors["equity"]).to include(match I18n.t("validations.sales.financial.equity.equity_under_min", min_equity: 25))
expect(record.errors).to be_empty expect(record.errors["type"]).to include(match I18n.t("validations.sales.financial.type.equity_under_min", min_equity: 25))
end
end end
context "with a log in 23/24 collection year" do it "adds an error for type 30, equity below min with the correct percentage" do
let(:saledate) { Time.zone.local(2024, 1, 1) } record.type = 30
record.equity = 1
financial_validator.validate_equity_in_range_for_year_and_type(record)
expect(record.errors["equity"]).to include(match I18n.t("validations.sales.financial.equity.equity_under_min", min_equity: 10))
expect(record.errors["type"]).to include(match I18n.t("validations.sales.financial.type.equity_under_min", min_equity: 10))
end
it "adds an error for type 2, equity below min with the correct percentage" do it "adds an error for type 18, low equity below min with the correct percentage" do
record.type = 2 record.type = 18
record.equity = 1 record.equity = 10
financial_validator.validate_equity_in_range_for_year_and_type(record) financial_validator.validate_equity_in_range_for_year_and_type(record)
expect(record.errors["equity"]).to include(match I18n.t("validations.sales.financial.equity.equity_under_min", min_equity: 25)) expect(record.errors["equity"]).to include(match I18n.t("validations.sales.financial.equity.equity_under_min", min_equity: 25))
expect(record.errors["type"]).to include(match I18n.t("validations.sales.financial.type.equity_under_min", min_equity: 25)) expect(record.errors["type"]).to include(match I18n.t("validations.sales.financial.type.equity_under_min", min_equity: 25))
end end
it "adds an error for type 30, equity below min with the correct percentage" do it "does not add an error for type 30, low equity in range with the correct percentage" do
record.type = 30 record.type = 30
record.equity = 1 record.equity = 10
financial_validator.validate_equity_in_range_for_year_and_type(record) financial_validator.validate_equity_in_range_for_year_and_type(record)
expect(record.errors["equity"]).to include(match I18n.t("validations.sales.financial.equity.equity_under_min", min_equity: 10)) expect(record.errors).to be_empty
expect(record.errors["type"]).to include(match I18n.t("validations.sales.financial.type.equity_under_min", min_equity: 10)) end
end
it "does not add an error for equity in range with the correct percentage" do it "does not add an error for equity in range with the correct percentage" do
record.type = 2 record.type = 2
record.equity = 50 record.equity = 50
financial_validator.validate_equity_in_range_for_year_and_type(record) financial_validator.validate_equity_in_range_for_year_and_type(record)
expect(record.errors).to be_empty expect(record.errors).to be_empty
end end
it "adds an error for equity above max with the correct percentage" do it "adds an error for equity above max with the correct percentage" do
record.type = 2 record.type = 2
record.equity = 90 record.equity = 90
financial_validator.validate_equity_in_range_for_year_and_type(record) financial_validator.validate_equity_in_range_for_year_and_type(record)
expect(record.errors["equity"]).to include(match I18n.t("validations.sales.financial.equity.equity_over_max", max_equity: 75)) expect(record.errors["equity"]).to include(match I18n.t("validations.sales.financial.equity.equity_over_max", max_equity: 75))
expect(record.errors["type"]).to include(match I18n.t("validations.sales.financial.type.equity_over_max", max_equity: 75)) expect(record.errors["type"]).to include(match I18n.t("validations.sales.financial.type.equity_over_max", max_equity: 75))
end
end end
end end
describe "#validate_staircase_difference" do describe "#validate_staircase_difference" do
let(:record) { FactoryBot.build(:sales_log, saledate:) } let(:record) { FactoryBot.build(:sales_log, saledate:) }
context "with a log in the 23/24 collection year" do let(:saledate) { current_collection_start_date }
let(:saledate) { Time.zone.local(2023, 4, 1) }
it "does not add an error" do it "adds errors if equity is more than stairowned - stairbought for joint purchase" do
record.stairbought = 2 record.stairbought = 2.5
record.stairowned = 3 record.stairowned = 3
record.equity = 2 record.equity = 2
financial_validator.validate_staircase_difference(record) record.jointpur = 1
expect(record.errors).to be_empty financial_validator.validate_staircase_difference(record)
end expect(record.errors["equity"]).to include(I18n.t("validations.sales.financial.equity.equity_over_stairowned_minus_stairbought.joint_purchase", equity: 2, staircase_difference: 0.5))
expect(record.errors["stairowned"]).to include(I18n.t("validations.sales.financial.stairowned.equity_over_stairowned_minus_stairbought.joint_purchase", equity: 2, staircase_difference: 0.5))
expect(record.errors["stairbought"]).to include(I18n.t("validations.sales.financial.stairbought.equity_over_stairowned_minus_stairbought.joint_purchase", equity: 2, staircase_difference: 0.5))
end end
context "with a log in 24/25 collection year" do it "adds errors if equity is more than stairowned - stairbought for non joint purchase" do
let(:saledate) { Time.zone.local(2024, 4, 1) } record.stairbought = 2
record.stairowned = 3
it "adds errors if equity is more than stairowned - stairbought for joint purchase" do record.equity = 2.5
record.stairbought = 2.5 record.jointpur = 2
record.stairowned = 3 financial_validator.validate_staircase_difference(record)
record.equity = 2 expect(record.errors["equity"]).to include(I18n.t("validations.sales.financial.equity.equity_over_stairowned_minus_stairbought.not_joint_purchase", equity: 2.5, staircase_difference: 1.0))
record.jointpur = 1 expect(record.errors["stairowned"]).to include(I18n.t("validations.sales.financial.stairowned.equity_over_stairowned_minus_stairbought.not_joint_purchase", equity: 2.5, staircase_difference: 1.0))
financial_validator.validate_staircase_difference(record) expect(record.errors["stairbought"]).to include(I18n.t("validations.sales.financial.stairbought.equity_over_stairowned_minus_stairbought.not_joint_purchase", equity: 2.5, staircase_difference: 1.0))
expect(record.errors["equity"]).to include(I18n.t("validations.sales.financial.equity.equity_over_stairowned_minus_stairbought.joint_purchase", equity: 2, staircase_difference: 0.5)) end
expect(record.errors["stairowned"]).to include(I18n.t("validations.sales.financial.stairowned.equity_over_stairowned_minus_stairbought.joint_purchase", equity: 2, staircase_difference: 0.5))
expect(record.errors["stairbought"]).to include(I18n.t("validations.sales.financial.stairbought.equity_over_stairowned_minus_stairbought.joint_purchase", equity: 2, staircase_difference: 0.5))
end
it "adds errors if equity is more than stairowned - stairbought for non joint purchase" do
record.stairbought = 2
record.stairowned = 3
record.equity = 2.5
record.jointpur = 2
financial_validator.validate_staircase_difference(record)
expect(record.errors["equity"]).to include(I18n.t("validations.sales.financial.equity.equity_over_stairowned_minus_stairbought.not_joint_purchase", equity: 2.5, staircase_difference: 1.0))
expect(record.errors["stairowned"]).to include(I18n.t("validations.sales.financial.stairowned.equity_over_stairowned_minus_stairbought.not_joint_purchase", equity: 2.5, staircase_difference: 1.0))
expect(record.errors["stairbought"]).to include(I18n.t("validations.sales.financial.stairbought.equity_over_stairowned_minus_stairbought.not_joint_purchase", equity: 2.5, staircase_difference: 1.0))
end
it "does not add errors if equity is less than stairowned - stairbought and stairnum is nil" do it "does not add errors if equity is less than stairowned - stairbought and stairnum is nil" do
record.stairbought = 2 record.stairbought = 2
record.stairowned = 10 record.stairowned = 10
record.equity = 2 record.equity = 2
financial_validator.validate_staircase_difference(record) financial_validator.validate_staircase_difference(record)
expect(record.errors).to be_empty expect(record.errors).to be_empty
end end
it "does not add errors if equity is equal stairowned - stairbought and stairnum is nil" do it "does not add errors if equity is equal stairowned - stairbought and stairnum is nil" do
record.stairbought = 2 record.stairbought = 2
record.stairowned = 10 record.stairowned = 10
record.equity = 8 record.equity = 8
financial_validator.validate_staircase_difference(record) financial_validator.validate_staircase_difference(record)
expect(record.errors).to be_empty expect(record.errors).to be_empty
end end
it "does not add errors if stairbought is not given" do it "does not add errors if stairbought is not given" do
record.stairbought = nil record.stairbought = nil
record.stairowned = 10 record.stairowned = 10
record.equity = 2 record.equity = 2
financial_validator.validate_staircase_difference(record) financial_validator.validate_staircase_difference(record)
expect(record.errors).to be_empty expect(record.errors).to be_empty
end end
it "does not add errors if stairowned is not given" do it "does not add errors if stairowned is not given" do
record.stairbought = 2 record.stairbought = 2
record.stairowned = nil record.stairowned = nil
record.equity = 2 record.equity = 2
financial_validator.validate_staircase_difference(record) financial_validator.validate_staircase_difference(record)
expect(record.errors).to be_empty expect(record.errors).to be_empty
end end
it "does not add errors if equity is not given" do it "does not add errors if equity is not given" do
record.stairbought = 2 record.stairbought = 2
record.stairowned = 10 record.stairowned = 10
record.equity = 0 record.equity = 0
financial_validator.validate_staircase_difference(record) financial_validator.validate_staircase_difference(record)
expect(record.errors).to be_empty expect(record.errors).to be_empty
end end
it "adds errors if stairnum is present and stairowned is not enough more than stairbought + equity" do it "adds errors if stairnum is present and stairowned is not enough more than stairbought + equity" do
record.stairowned = 20 record.stairowned = 20
record.stairbought = 10 record.stairbought = 10
record.equity = 9 record.equity = 9
record.numstair = 3 record.numstair = 3
financial_validator.validate_staircase_difference(record) financial_validator.validate_staircase_difference(record)
expect(record.errors["equity"]).to include(I18n.t("validations.sales.financial.equity.more_than_stairowned_minus_stairbought_minus_prev_staircasing", equity: 9, bought: 10, numprevstair: 2, equity_sum: 21, stair_total: 20)) expect(record.errors["equity"]).to include(I18n.t("validations.sales.financial.equity.more_than_stairowned_minus_stairbought_minus_prev_staircasing", equity: 9, bought: 10, numprevstair: 2, equity_sum: 21, stair_total: 20))
expect(record.errors["stairowned"]).to include(I18n.t("validations.sales.financial.stairowned.less_than_stairbought_plus_equity_plus_prev_staircasing", equity: 9, bought: 10, numprevstair: 2, equity_sum: 21, stair_total: 20)) expect(record.errors["stairowned"]).to include(I18n.t("validations.sales.financial.stairowned.less_than_stairbought_plus_equity_plus_prev_staircasing", equity: 9, bought: 10, numprevstair: 2, equity_sum: 21, stair_total: 20))
expect(record.errors["stairbought"]).to include(I18n.t("validations.sales.financial.stairbought.more_than_stairowned_minus_equity_minus_prev_staircasing", equity: 9, bought: 10, numprevstair: 2, equity_sum: 21, stair_total: 20)) expect(record.errors["stairbought"]).to include(I18n.t("validations.sales.financial.stairbought.more_than_stairowned_minus_equity_minus_prev_staircasing", equity: 9, bought: 10, numprevstair: 2, equity_sum: 21, stair_total: 20))
expect(record.errors["numstair"]).to include(I18n.t("validations.sales.financial.numstair.too_high_for_stairowned_minus_stairbought_minus_equity", equity: 9, bought: 10, numprevstair: 2, equity_sum: 21, stair_total: 20)) expect(record.errors["numstair"]).to include(I18n.t("validations.sales.financial.numstair.too_high_for_stairowned_minus_stairbought_minus_equity", equity: 9, bought: 10, numprevstair: 2, equity_sum: 21, stair_total: 20))
expect(record.errors["firststair"]).to include(I18n.t("validations.sales.financial.firststair.invalid_for_stairowned_minus_stairbought_minus_equity", equity: 9, bought: 10, numprevstair: 2, equity_sum: 21, stair_total: 20)) expect(record.errors["firststair"]).to include(I18n.t("validations.sales.financial.firststair.invalid_for_stairowned_minus_stairbought_minus_equity", equity: 9, bought: 10, numprevstair: 2, equity_sum: 21, stair_total: 20))
end end
it "does not add errors if stairnum is present and stairowned is enough more than stairbought + equity" do it "does not add errors if stairnum is present and stairowned is enough more than stairbought + equity" do
record.stairowned = 25 record.stairowned = 25
record.stairbought = 10 record.stairbought = 10
record.equity = 9 record.equity = 9
record.numstair = 3 record.numstair = 3
financial_validator.validate_staircase_difference(record) financial_validator.validate_staircase_difference(record)
expect(record.errors).to be_empty expect(record.errors).to be_empty
end end
it "does not add errors if stairnum is present and stairowned exactly equals minimum" do it "does not add errors if stairnum is present and stairowned exactly equals minimum" do
record.stairowned = 20 record.stairowned = 20
record.stairbought = 10 record.stairbought = 10
record.equity = 9 record.equity = 9
record.numstair = 2 record.numstair = 2
financial_validator.validate_staircase_difference(record) financial_validator.validate_staircase_difference(record)
expect(record.errors).to be_empty expect(record.errors).to be_empty
end
end end
end end
end end

389
spec/models/validations/sales/household_validations_spec.rb

@ -1,6 +1,8 @@
require "rails_helper" require "rails_helper"
RSpec.describe Validations::Sales::HouseholdValidations do RSpec.describe Validations::Sales::HouseholdValidations do
include CollectionTimeHelper
subject(:household_validator) { validator_class.new } subject(:household_validator) { validator_class.new }
let(:validator_class) { Class.new { include Validations::Sales::HouseholdValidations } } let(:validator_class) { Class.new { include Validations::Sales::HouseholdValidations } }
@ -8,272 +10,112 @@ RSpec.describe Validations::Sales::HouseholdValidations do
let(:saledate) { Time.zone.now } let(:saledate) { Time.zone.now }
describe "#validate_partner_count" do describe "#validate_partner_count" do
let(:saledate) { Time.zone.local(2023, 4, 1) } let(:saledate) { current_collection_start_date }
it "validates that only 1 partner exists" do it "does not validate" do
record.relat2 = "P" record.relat2 = "P"
record.relat3 = "P" record.relat3 = "P"
household_validator.validate_partner_count(record) household_validator.validate_partner_count(record)
expect(record.errors["relat2"]) expect(record.errors["relat2"]).to be_empty
.to include(match I18n.t("validations.sales.household.relat.one_partner")) expect(record.errors["relat3"]).to be_empty
expect(record.errors["relat3"]) expect(record.errors["relat4"]).to be_empty
.to include(match I18n.t("validations.sales.household.relat.one_partner"))
expect(record.errors["relat4"])
.not_to include(match I18n.t("validations.sales.household.relat.one_partner"))
end
it "expects that a tenant can have a partner" do
record.relat3 = "P"
household_validator.validate_partner_count(record)
expect(record.errors["base"]).to be_empty
end end
end end
describe "#validate_person_age_matches_relationship" do describe "#validate_person_age_matches_relationship" do
context "with 2023 logs" do let(:saledate) { current_collection_start_date }
let(:saledate) { Time.zone.local(2023, 4, 1) }
context "when the household contains a person under 16" do
it "expects that person is a child of the tenant" do
record.age2 = 14
record.relat2 = "C"
household_validator.validate_person_age_matches_relationship(record)
expect(record.errors["relat2"]).to be_empty
expect(record.errors["age2"]).to be_empty
end
it "validates that a person under 16 must not be a partner of the buyer" do it "does not add error if person under 16 is a partner" do
record.age2 = 14 record.age2 = 14
record.relat2 = "P" record.relat2 = "P"
household_validator.validate_person_age_matches_relationship(record) household_validator.validate_person_age_matches_relationship(record)
expect(record.errors["relat2"]) expect(record.errors["relat2"]).to be_empty
.to include(match I18n.t("validations.sales.household.relat.child_under_16", person_num: 2)) expect(record.errors["age2"]).to be_empty
expect(record.errors["age2"])
.to include(match I18n.t("validations.sales.household.age.child_under_16", person_num: 2))
end
end
it "validates that a person over 20 must not be a child of the buyer" do
record.age2 = 21
record.relat2 = "C"
household_validator.validate_person_age_matches_relationship(record)
expect(record.errors["relat2"])
.to include(match I18n.t("validations.sales.household.relat.child_over_20"))
expect(record.errors["age2"])
.to include(match I18n.t("validations.sales.household.age.child_over_20"))
end
end end
context "with 2024 logs" do it "does not add error if person over 19 is a child" do
let(:saledate) { Time.zone.local(2024, 4, 1) } record.age2 = 20
record.relat2 = "C"
it "does not add error if person under 16 is a partner" do household_validator.validate_person_age_matches_relationship(record)
record.age2 = 14 expect(record.errors["age2"]).to be_empty
record.relat2 = "P" expect(record.errors["relat2"]).to be_empty
household_validator.validate_person_age_matches_relationship(record)
expect(record.errors["relat2"]).to be_empty
expect(record.errors["age2"]).to be_empty
end
it "does not add error if person over 19 is a child" do
record.age2 = 20
record.relat2 = "C"
household_validator.validate_person_age_matches_relationship(record)
expect(record.errors["age2"]).to be_empty
expect(record.errors["relat2"]).to be_empty
end
end end
end end
describe "#validate_person_age_matches_economic_status" do describe "#validate_person_age_matches_economic_status" do
context "with 2023 logs" do let(:saledate) { current_collection_start_date }
let(:saledate) { Time.zone.local(2023, 4, 1) }
it "validates that person's economic status must be Child" do it "validates that a person with economic status 'child' must be under 16" do
record.age2 = 14 record.age2 = 21
record.ecstat2 = 1 record.ecstat2 = 9
household_validator.validate_person_age_matches_economic_status(record) household_validator.validate_person_age_matches_economic_status(record)
expect(record.errors["ecstat2"]) expect(record.errors["ecstat2"])
.to include(match I18n.t("validations.sales.household.ecstat.child_under_16", person_num: 2)) .to include(match I18n.t("validations.sales.household.ecstat.child_over_16", person_num: 2))
expect(record.errors["age2"]) expect(record.errors["age2"])
.to include(match I18n.t("validations.sales.household.age.child_under_16_ecstat", person_num: 2)) .to include(match I18n.t("validations.sales.household.age.child_over_16", person_num: 2))
end
it "expects that person's economic status is Child" do
record.age2 = 14
record.ecstat2 = 9
household_validator.validate_person_age_matches_economic_status(record)
expect(record.errors["ecstat2"]).to be_empty
expect(record.errors["age2"]).to be_empty
end
it "validates that a person with economic status 'child' must be under 16" do
record.age2 = 21
record.ecstat2 = 9
household_validator.validate_person_age_matches_economic_status(record)
expect(record.errors["ecstat2"])
.to include(match I18n.t("validations.sales.household.ecstat.child_over_16", person_num: 2))
expect(record.errors["age2"])
.to include(match I18n.t("validations.sales.household.age.child_over_16", person_num: 2))
end
end
context "with 2024 logs" do
let(:saledate) { Time.zone.local(2024, 4, 1) }
it "does not run the validation" do
record.age2 = 14
record.ecstat2 = 1
household_validator.validate_person_age_matches_economic_status(record)
expect(record.errors["ecstat2"])
.not_to include(match I18n.t("validations.sales.household.ecstat.child_under_16", person_num: 2))
expect(record.errors["age2"])
.not_to include(match I18n.t("validations.sales.household.age.child_under_16_ecstat", person_num: 2))
end
end end
end end
describe "#validate_child_12_years_younger" do describe "#validate_child_12_years_younger" do
context "with 2023 logs" do let(:saledate) { current_collection_start_date }
let(:saledate) { Time.zone.local(2023, 4, 1) }
it "validates the child is at least 12 years younger than buyer 1" do
record.age1 = 30
record.age2 = record.age1 - 11
record.relat2 = "C"
household_validator.validate_child_12_years_younger(record)
expect(record.errors["age1"])
.to include(match I18n.t("validations.sales.household.age.child_12_years_younger", person_num: 2))
expect(record.errors["age2"])
.to include(match I18n.t("validations.sales.household.age.child_12_years_younger", person_num: 2))
expect(record.errors["relat2"])
.to include(match I18n.t("validations.sales.household.age.child_12_years_younger", person_num: 2))
end
it "expects the child is at least 12 years younger than buyer 1" do
record.age1 = 30
record.age2 = record.age1 - 12
record.relat2 = "C"
household_validator.validate_child_12_years_younger(record)
expect(record.errors["age1"]).to be_empty
expect(record.errors["age2"]).to be_empty
expect(record.errors["relate2"]).to be_empty
end
end
context "with 2024 logs" do
let(:saledate) { Time.zone.local(2024, 4, 1) }
it "does not validate that child is at least 12 year younger than buyer" do it "does not validate that child is at least 12 year younger than buyer" do
record.age1 = 20 record.age1 = 20
record.age2 = 17 record.age2 = 17
record.relat2 = "C" record.relat2 = "C"
household_validator.validate_child_12_years_younger(record) household_validator.validate_child_12_years_younger(record)
expect(record.errors["age1"]).to be_empty expect(record.errors["age1"]).to be_empty
expect(record.errors["age2"]).to be_empty expect(record.errors["age2"]).to be_empty
expect(record.errors["relat2"]).to be_empty expect(record.errors["relat2"]).to be_empty
end
end end
end end
describe "#validate_person_age_and_relationship_matches_economic_status" do describe "#validate_person_age_and_relationship_matches_economic_status" do
context "with 2023 logs" do let(:saledate) { current_collection_start_date }
let(:saledate) { Time.zone.local(2023, 4, 1) }
it "does not add an error for a person aged 16-19 who is a student but not a child of the buyer" do context "when the household contains a tenant’s child between the ages of 16 and 19" do
record.age2 = 18 it "does not add an error" do
record.ecstat2 = "7"
record.relat2 = "P"
household_validator.validate_person_age_and_relationship_matches_economic_status(record)
expect(record.errors["relat2"]).to be_empty
expect(record.errors["ecstat2"]).to be_empty
expect(record.errors["age2"]).to be_empty
end
it "does not add an error for a person not aged 16-19 who is a student but not a child of the buyer" do
record.age2 = 20
record.ecstat2 = "7"
record.relat2 = "P"
household_validator.validate_person_age_and_relationship_matches_economic_status(record)
expect(record.errors["relat2"]).to be_empty
expect(record.errors["ecstat2"]).to be_empty
expect(record.errors["age2"]).to be_empty
end
it "adds errors for a person aged 16-19 who is a child of the buyer but not a student" do
record.age2 = 17 record.age2 = 17
record.ecstat2 = "1"
record.relat2 = "C" record.relat2 = "C"
record.ecstat2 = 1
household_validator.validate_person_age_and_relationship_matches_economic_status(record) household_validator.validate_person_age_and_relationship_matches_economic_status(record)
expect(record.errors["relat2"])
.to include(match I18n.t("validations.sales.household.relat.student_16_19.cannot_be_child.16_19_not_student"))
expect(record.errors["age2"])
.to include(match I18n.t("validations.sales.household.age.student_16_19.cannot_be_16_19.child_not_student"))
expect(record.errors["ecstat2"]) expect(record.errors["ecstat2"])
.to include(match I18n.t("validations.sales.household.ecstat.student_16_19.must_be_student")) .to be_empty
end
it "adds errors for a person who is a child of the buyer and a student but not aged 16-19" do
record.age2 = 14
record.ecstat2 = "7"
record.relat2 = "C"
household_validator.validate_person_age_and_relationship_matches_economic_status(record)
expect(record.errors["relat2"])
.to include(match I18n.t("validations.sales.household.relat.student_16_19.cannot_be_child.student_not_16_19"))
expect(record.errors["age2"]) expect(record.errors["age2"])
.to include(match I18n.t("validations.sales.household.age.student_16_19.must_be_16_19")) .to be_empty
expect(record.errors["ecstat2"]) expect(record.errors["relat2"])
.to include(match I18n.t("validations.sales.household.ecstat.student_16_19.cannot_be_student.child_not_16_19")) .to be_empty
end end
end end
context "with 2024 logs" do it "does not add an error for a person not aged 16-19 who is a student but not a child of the buyer" do
let(:saledate) { Time.zone.local(2024, 4, 1) } record.age2 = 20
record.ecstat2 = "7"
context "when the household contains a tenant’s child between the ages of 16 and 19" do record.relat2 = "P"
it "does not add an error" do household_validator.validate_person_age_and_relationship_matches_economic_status(record)
record.age2 = 17 expect(record.errors["relat2"]).to be_empty
record.relat2 = "C" expect(record.errors["ecstat2"]).to be_empty
record.ecstat2 = 1 expect(record.errors["age2"]).to be_empty
household_validator.validate_person_age_and_relationship_matches_economic_status(record) end
expect(record.errors["ecstat2"])
.to be_empty it "does not add errors" do
expect(record.errors["age2"]) record.age2 = 14
.to be_empty record.ecstat2 = "7"
expect(record.errors["relat2"]) record.relat2 = "C"
.to be_empty household_validator.validate_person_age_and_relationship_matches_economic_status(record)
end expect(record.errors["relat2"]).to be_empty
end expect(record.errors["ecstat2"]).to be_empty
expect(record.errors["age2"]).to be_empty
it "does not add an error for a person not aged 16-19 who is a student but not a child of the buyer" do end
record.age2 = 20
record.ecstat2 = "7" it "does not add errors for a person who is a student and aged 16-19 but not child" do
record.relat2 = "P" record.age2 = 17
household_validator.validate_person_age_and_relationship_matches_economic_status(record) record.ecstat2 = "7"
expect(record.errors["relat2"]).to be_empty record.relat2 = "X"
expect(record.errors["ecstat2"]).to be_empty household_validator.validate_person_age_and_relationship_matches_economic_status(record)
expect(record.errors["age2"]).to be_empty expect(record.errors["relat2"]).to be_empty
end expect(record.errors["ecstat2"]).to be_empty
expect(record.errors["age2"]).to be_empty
it "does not add errors" do
record.age2 = 14
record.ecstat2 = "7"
record.relat2 = "C"
household_validator.validate_person_age_and_relationship_matches_economic_status(record)
expect(record.errors["relat2"]).to be_empty
expect(record.errors["ecstat2"]).to be_empty
expect(record.errors["age2"]).to be_empty
end
it "does not add errors for a person who is a student and aged 16-19 but not child" do
record.age2 = 17
record.ecstat2 = "7"
record.relat2 = "X"
household_validator.validate_person_age_and_relationship_matches_economic_status(record)
expect(record.errors["relat2"]).to be_empty
expect(record.errors["ecstat2"]).to be_empty
expect(record.errors["age2"]).to be_empty
end
end end
end end
@ -310,16 +152,12 @@ RSpec.describe Validations::Sales::HouseholdValidations do
expect(sales_log.errors).to be_empty expect(sales_log.errors).to be_empty
end end
context "with 2023 logs" do it "triggers a validation if buyer two will also not live in the property" do
let(:saledate) { Time.zone.local(2023, 4, 1) } sales_log.buy2livein = 2
household_validator.validate_buyers_living_in_property(sales_log)
it "triggers a validation if buyer two will also not live in the property" do expect(sales_log.errors[:buylivein]).to include I18n.t("validations.sales.household.buylivein.buyers_will_live_in_property_values_inconsistent")
sales_log.buy2livein = 2 expect(sales_log.errors[:buy2livein]).to include I18n.t("validations.sales.household.buy2livein.buyers_will_live_in_property_values_inconsistent")
household_validator.validate_buyers_living_in_property(sales_log) expect(sales_log.errors[:buy1livein]).to include I18n.t("validations.sales.household.buy1livein.buyers_will_live_in_property_values_inconsistent")
expect(sales_log.errors[:buylivein]).to include I18n.t("validations.sales.household.buylivein.buyers_will_live_in_property_values_inconsistent")
expect(sales_log.errors[:buy2livein]).to include I18n.t("validations.sales.household.buy2livein.buyers_will_live_in_property_values_inconsistent")
expect(sales_log.errors[:buy1livein]).to include I18n.t("validations.sales.household.buy1livein.buyers_will_live_in_property_values_inconsistent")
end
end end
end end
@ -383,60 +221,31 @@ RSpec.describe Validations::Sales::HouseholdValidations do
expect(record.errors).to be_empty expect(record.errors).to be_empty
end end
end end
context "with 23/24 logs" do
let(:saledate) { Time.zone.local(2023, 4, 4) }
it "does not add an error for outright sale" do
record.ownershipsch = 2
[1, 2, 3, 4, 5, 6, 7, 9, 0].each do |prevten|
record.prevten = prevten
household_validator.validate_buyer1_previous_tenure(record)
expect(record.errors).to be_empty
end
end
end
end end
describe "#validate_buyer_not_child" do describe "#validate_buyer_not_child" do
context "with 2023 logs" do let(:saledate) { current_collection_start_date }
let(:saledate) { Time.zone.local(2023, 4, 1) }
it "does not add an error if either buyer is a child" do
record.jointpur = 1
record.ecstat1 = 9
record.ecstat2 = 9
household_validator.validate_buyer_not_child(record)
expect(record.errors["ecstat1"]).to be_empty
expect(record.errors["ecstat2"]).to be_empty
end
end
context "with 2024 logs" do
let(:saledate) { Time.zone.local(2024, 4, 1) }
it "validates buyer 1 isn't a child" do it "validates buyer 1 isn't a child" do
record.ecstat1 = 9 record.ecstat1 = 9
household_validator.validate_buyer_not_child(record) household_validator.validate_buyer_not_child(record)
expect(record.errors["ecstat1"]) expect(record.errors["ecstat1"])
.to include("Buyer 1 cannot have a working situation of child under 16.") .to include("Buyer 1 cannot have a working situation of child under 16.")
end end
it "validates buyer 2 isn't a child" do it "validates buyer 2 isn't a child" do
record.jointpur = 1 record.jointpur = 1
record.ecstat2 = 9 record.ecstat2 = 9
household_validator.validate_buyer_not_child(record) household_validator.validate_buyer_not_child(record)
expect(record.errors["ecstat2"]) expect(record.errors["ecstat2"])
.to include("Buyer 2 cannot have a working situation of child under 16.") .to include("Buyer 2 cannot have a working situation of child under 16.")
end end
it "allows person 2 to be a child" do it "allows person 2 to be a child" do
record.jointpur = 2 record.jointpur = 2
record.ecstat2 = 9 record.ecstat2 = 9
household_validator.validate_buyer_not_child(record) household_validator.validate_buyer_not_child(record)
expect(record.errors["ecstat2"]).to be_empty expect(record.errors["ecstat2"]).to be_empty
end
end end
end end
end end

75
spec/models/validations/sales/property_validations_spec.rb

@ -1,80 +1,21 @@
require "rails_helper" require "rails_helper"
RSpec.describe Validations::Sales::PropertyValidations do RSpec.describe Validations::Sales::PropertyValidations do
include CollectionTimeHelper
subject(:property_validator) { property_validator_class.new } subject(:property_validator) { property_validator_class.new }
let(:property_validator_class) { Class.new { include Validations::Sales::PropertyValidations } } let(:property_validator_class) { Class.new { include Validations::Sales::PropertyValidations } }
describe "#validate_postcodes_match_if_discounted_ownership" do describe "#validate_postcodes_match_if_discounted_ownership" do
context "when ownership scheme is not discounted ownership" do let(:record) { build(:sales_log, ownershipsch: 1, saledate: current_collection_start_date) }
let(:record) { build(:sales_log, ownershipsch: 1) }
it "when postcodes match no error is added" do
record.postcode_full = "SW1A 1AA"
record.ppostcode_full = "SW1A 1AA"
property_validator.validate_postcodes_match_if_discounted_ownership(record)
expect(record.errors["postcode_full"]).to be_empty
end
end
context "when ownership scheme is discounted ownership" do
let(:record) { build(:sales_log, ownershipsch: 2, saledate: Time.zone.local(2023, 4, 5)) }
it "when ppostcode_full is not present no error is added" do
record.postcode_full = "SW1A 1AA"
property_validator.validate_postcodes_match_if_discounted_ownership(record)
expect(record.errors["postcode_full"]).to be_empty
expect(record.errors["ppostcode_full"]).to be_empty
expect(record.errors["ownershipsch"]).to be_empty
end
it "when postcode_full is not present no error is added" do it "is not validated" do
record.ppostcode_full = "SW1A 1AA" record.postcode_full = "SW1A 1AA"
property_validator.validate_postcodes_match_if_discounted_ownership(record) record.ppostcode_full = "SW1A 0AA"
expect(record.errors["postcode_full"]).to be_empty
expect(record.errors["ppostcode_full"]).to be_empty
expect(record.errors["ownershipsch"]).to be_empty
end
it "when postcodes match no error is added" do
record.postcode_full = "SW1A 1AA"
record.ppostcode_full = "SW1A 1AA"
property_validator.validate_postcodes_match_if_discounted_ownership(record)
expect(record.errors["postcode_full"]).to be_empty
expect(record.errors["ppostcode_full"]).to be_empty
expect(record.errors["ownershipsch"]).to be_empty
end
it "when postcodes do not match an error is added for joint purchase" do
record.postcode_full = "SW1A 1AA"
record.ppostcode_full = "SW1A 0AA"
record.jointpur = 1
property_validator.validate_postcodes_match_if_discounted_ownership(record)
expect(record.errors["postcode_full"]).to include("Buyers’ last accommodation and discounted ownership postcodes must match.")
expect(record.errors["ppostcode_full"]).to include("Buyers’ last accommodation and discounted ownership postcodes must match.")
expect(record.errors["ownershipsch"]).to include("Buyers’ last accommodation and discounted ownership postcodes must match.")
end
it "when postcodes do not match an error is added for non joint purchase" do
record.postcode_full = "SW1A 1AA"
record.ppostcode_full = "SW1A 0AA"
record.jointpur = 2
property_validator.validate_postcodes_match_if_discounted_ownership(record)
expect(record.errors["postcode_full"]).to include("Buyer’s last accommodation and discounted ownership postcodes must match.")
expect(record.errors["ppostcode_full"]).to include("Buyer’s last accommodation and discounted ownership postcodes must match.")
expect(record.errors["ownershipsch"]).to include("Buyer’s last accommodation and discounted ownership postcodes must match.")
end
it "does not add error for 2024 log" do property_validator.validate_postcodes_match_if_discounted_ownership(record)
record.postcode_full = "SW1A 1AA" expect(record.errors["postcode_full"]).to be_empty
record.ppostcode_full = "SW1A 0AA"
record.saledate = Time.zone.local(2024, 4, 5)
property_validator.validate_postcodes_match_if_discounted_ownership(record)
expect(record.errors["postcode_full"]).to be_empty
expect(record.errors["ppostcode_full"]).to be_empty
expect(record.errors["ownershipsch"]).to be_empty
end
end end
end end

793
spec/models/validations/sales/sale_information_validations_spec.rb

File diff suppressed because it is too large Load Diff

93
spec/models/validations/sales/soft_validations_spec.rb

@ -1,6 +1,8 @@
require "rails_helper" require "rails_helper"
RSpec.describe Validations::Sales::SoftValidations do RSpec.describe Validations::Sales::SoftValidations do
include CollectionTimeHelper
let(:record) { build(:sales_log) } let(:record) { build(:sales_log) }
describe "income validations" do describe "income validations" do
@ -404,87 +406,16 @@ RSpec.describe Validations::Sales::SoftValidations do
end end
context "when validating extra borrowing" do context "when validating extra borrowing" do
context "when the log is for 2023" do let(:record) { build(:sales_log, saledate: previous_collection_start_date) }
let(:record) { build(:sales_log, saledate: Time.zone.local(2023, 12, 1)) }
it "returns false for logs from 2024 onwards" do
it "returns false if extrabor not present" do record.extrabor = 2
record.mortgage = 50_000 record.mortgage = 50_000
record.deposit = 40_000 record.deposit = 40_000
record.value = 100_000 record.value = 100_000
record.discount = 11 record.discount = 11
expect(record) expect(record)
.not_to be_extra_borrowing_expected_but_not_reported .not_to be_extra_borrowing_expected_but_not_reported
end
it "returns false if mortgage not present" do
record.extrabor = 2
record.deposit = 40_000
record.value = 100_000
record.discount = 11
expect(record)
.not_to be_extra_borrowing_expected_but_not_reported
end
it "returns false if deposit not present" do
record.extrabor = 2
record.mortgage = 50_000
record.value = 100_000
record.discount = 11
expect(record)
.not_to be_extra_borrowing_expected_but_not_reported
end
it "returns false if value not present" do
record.extrabor = 2
record.mortgage = 50_000
record.deposit = 40_000
record.discount = 11
expect(record)
.not_to be_extra_borrowing_expected_but_not_reported
end
it "returns false if discount not present" do
record.extrabor = 2
record.mortgage = 50_000
record.deposit = 40_000
record.value = 100_000
expect(record)
.not_to be_extra_borrowing_expected_but_not_reported
end
it "returns false if extra borrowing expected and reported" do
record.extrabor = 1
record.mortgage = 50_000
record.deposit = 40_000
record.value = 100_000
record.discount = 11
expect(record)
.not_to be_extra_borrowing_expected_but_not_reported
end
it "returns true if extra borrowing expected but not reported" do
record.extrabor = 2
record.mortgage = 50_000
record.deposit = 40_000
record.value = 100_000
record.discount = 11
expect(record)
.to be_extra_borrowing_expected_but_not_reported
end
end
context "when the log is for 2024" do
let(:record) { build(:sales_log, saledate: Time.zone.local(2024, 12, 1)) }
it "returns false for logs from 2024 onwards" do
record.extrabor = 2
record.mortgage = 50_000
record.deposit = 40_000
record.value = 100_000
record.discount = 11
expect(record)
.not_to be_extra_borrowing_expected_but_not_reported
end
end end
end end
end end

Loading…
Cancel
Save