From 750ea73c127414c8aa97a4ec67517ccc1b9c1279 Mon Sep 17 00:00:00 2001 From: Carolyn Date: Mon, 17 Mar 2025 13:35:05 +0000 Subject: [PATCH] add tests for staircasing validations --- .../sales/financial_validations_spec.rb | 79 ++++++++ .../sale_information_validations_spec.rb | 169 ++++++++++++++++++ 2 files changed, 248 insertions(+) diff --git a/spec/models/validations/sales/financial_validations_spec.rb b/spec/models/validations/sales/financial_validations_spec.rb index f49179063..1e63f1bb5 100644 --- a/spec/models/validations/sales/financial_validations_spec.rb +++ b/spec/models/validations/sales/financial_validations_spec.rb @@ -507,5 +507,84 @@ RSpec.describe Validations::Sales::FinancialValidations do expect(record.errors).to be_empty end end + + describe "#validate_staircase_difference_enough_for_numstair" do + let(:record) { FactoryBot.build(:sales_log) } + + it "adds errors if stairowned is not enough more than stairbought + equity" do + record.stairowned = 20 + record.stairbought = 10 + record.equity = 9 + record.numstair = 3 + financial_validator.validate_staircase_difference_enough_for_numstair(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["stairowned"]).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["stairbought"]).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["numstair"]).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)) + end + + it "does not add errors if stairowned is enough more than stairbought + equity" do + record.stairowned = 25 + record.stairbought = 10 + record.equity = 9 + record.numstair = 3 + financial_validator.validate_staircase_difference_enough_for_numstair(record) + expect(record.errors).to be_empty + end + + it "does not add errors if stairowned exactly equals minimum" do + record.stairowned = 20 + record.stairbought = 10 + record.equity = 9 + record.numstair = 2 + financial_validator.validate_staircase_difference_enough_for_numstair(record) + expect(record.errors).to be_empty + end + + it "does not add errors if equity + stairbought is more than stairowned" do + record.stairbought = 2 + record.stairowned = 3 + record.equity = 2.5 + record.jointpur = 2 + financial_validator.validate_staircase_difference_enough_for_numstair(record) + expect(record.errors).to be_empty + end + + it "does not add errors if stairowned is not given" do + record.stairbought = 20 + record.stairowned = nil + record.equity = 15 + record.numstair = 4 + financial_validator.validate_staircase_difference_enough_for_numstair(record) + expect(record.errors).to be_empty + end + + it "does not add errors if stairbought is not given" do + record.stairbought = nil + record.stairowned = 10 + record.equity = 20 + record.numstair = 4 + financial_validator.validate_staircase_difference_enough_for_numstair(record) + expect(record.errors).to be_empty + end + + it "does not add errors if equity is not given" do + record.stairbought = 25 + record.stairowned = 10 + record.equity = nil + record.numstair = 4 + financial_validator.validate_staircase_difference_enough_for_numstair(record) + expect(record.errors).to be_empty + end + + it "does not add errors if numstair is not given" do + record.stairbought = 10 + record.stairowned = 40 + record.equity = 25 + record.numstair = nil + financial_validator.validate_staircase_difference_enough_for_numstair(record) + expect(record.errors).to be_empty + end + end end end diff --git a/spec/models/validations/sales/sale_information_validations_spec.rb b/spec/models/validations/sales/sale_information_validations_spec.rb index da49d1936..7061ed1ed 100644 --- a/spec/models/validations/sales/sale_information_validations_spec.rb +++ b/spec/models/validations/sales/sale_information_validations_spec.rb @@ -182,6 +182,175 @@ RSpec.describe Validations::Sales::SaleInformationValidations do end end + describe "#validate_staircasing_initial_purchase_date" do + context "when initial purchase date blank" do + let(:record) { build(:sales_log, initialpurchase: nil) } + + it "does not add an error" do + sale_information_validator.validate_staircasing_initial_purchase_date(record) + + expect(record.errors[:initialpurchase]).not_to be_present + end + end + + context "when initial purchase date in 1979" do + let(:record) { build(:sales_log, initialpurchase: Date.new(1979, 12, 31)) } + + it "adds an error" do + sale_information_validator.validate_staircasing_initial_purchase_date(record) + + expect(record.errors[:initialpurchase]).to be_present + end + end + + context "when initial purchase date in 1980" do + let(:record) { build(:sales_log, initialpurchase: Date.new(1980, 1, 1)) } + + it "does not add an error" do + sale_information_validator.validate_staircasing_initial_purchase_date(record) + + expect(record.errors[:initialpurchase]).not_to be_present + end + end + + context "when initial purchase date before saledate" do + let(:record) { build(:sales_log, initialpurchase: 2.months.ago, saledate: 1.month.ago) } + + it "does not add the error" do + sale_information_validator.validate_staircasing_initial_purchase_date(record) + + expect(record.errors[:initialpurchase]).not_to be_present + end + end + + context "when initial purchase date after saledate" do + let(:record) { build(:sales_log, initialpurchase: 1.month.ago, saledate: 2.months.ago) } + + it "adds error" do + sale_information_validator.validate_staircasing_initial_purchase_date(record) + + expect(record.errors[:initialpurchase]).to eq( + [I18n.t("validations.sales.sale_information.initialpurchase.must_be_before_saledate")], + ) + expect(record.errors[:saledate]).to eq( + [I18n.t("validations.sales.sale_information.saledate.must_be_after_initial_purchase_date")], + ) + end + end + + context "when initial purchase date == saledate" do + let(:record) { build(:sales_log, initialpurchase: Time.zone.parse("2023-07-01"), saledate: Time.zone.parse("2023-07-01")) } + + it "does not add an error" do + sale_information_validator.validate_staircasing_initial_purchase_date(record) + + expect(record.errors[:initialpurchase]).not_to be_present + end + end + end + + describe "#validate_staircasing_last_transaction_date" do + context "when last transaction date blank" do + let(:record) { build(:sales_log, lasttransaction: nil) } + + it "does not add an error" do + sale_information_validator.validate_staircasing_last_transaction_date(record) + + expect(record.errors[:lasttransaction]).not_to be_present + end + end + + context "when last transaction date in 1979" do + let(:record) { build(:sales_log, lasttransaction: Date.new(1979, 12, 31)) } + + it "adds an error" do + sale_information_validator.validate_staircasing_last_transaction_date(record) + + expect(record.errors[:lasttransaction]).to be_present + end + end + + context "when last transaction date in 1980" do + let(:record) { build(:sales_log, lasttransaction: Date.new(1980, 1, 1)) } + + it "does not add an error" do + sale_information_validator.validate_staircasing_last_transaction_date(record) + + expect(record.errors[:lasttransaction]).not_to be_present + end + end + + context "when last transaction date before saledate" do + let(:record) { build(:sales_log, lasttransaction: 2.months.ago, saledate: 1.month.ago) } + + it "does not add the error" do + sale_information_validator.validate_staircasing_last_transaction_date(record) + + expect(record.errors[:lasttransaction]).not_to be_present + end + end + + context "when last transaction date after saledate" do + let(:record) { build(:sales_log, lasttransaction: 1.month.ago, saledate: 2.months.ago) } + + it "adds error" do + sale_information_validator.validate_staircasing_last_transaction_date(record) + + expect(record.errors[:lasttransaction]).to eq( + [I18n.t("validations.sales.sale_information.lasttransaction.must_be_before_saledate")], + ) + expect(record.errors[:saledate]).to eq( + [I18n.t("validations.sales.sale_information.saledate.must_be_after_last_transaction_date")], + ) + end + end + + context "when last transaction date == saledate" do + let(:record) { build(:sales_log, lasttransaction: Time.zone.parse("2023-07-01"), saledate: Time.zone.parse("2023-07-01")) } + + it "does not add an error" do + sale_information_validator.validate_staircasing_last_transaction_date(record) + + expect(record.errors[:lasttransaction]).not_to be_present + end + end + + context "when last transaction date after initial purchase date" do + let(:record) { build(:sales_log, initialpurchase: 2.months.ago, lasttransaction: 1.month.ago) } + + it "does not add the error" do + sale_information_validator.validate_staircasing_last_transaction_date(record) + + expect(record.errors[:lasttransaction]).not_to be_present + end + end + + context "when last transaction date before initial purchase date" do + let(:record) { build(:sales_log, initialpurchase: 1.month.ago, lasttransaction: 2.months.ago) } + + it "adds error" do + sale_information_validator.validate_staircasing_last_transaction_date(record) + + expect(record.errors[:lasttransaction]).to eq( + [I18n.t("validations.sales.sale_information.lasttransaction.must_be_after_initial_purchase")], + ) + expect(record.errors[:initialpurchase]).to eq( + [I18n.t("validations.sales.sale_information.initialpurchase.must_be_before_last_transaction")], + ) + end + end + + context "when last transaction date == initial purchase date" do + let(:record) { build(:sales_log, lasttransaction: Time.zone.parse("2023-07-01"), initialpurchase: Time.zone.parse("2023-07-01")) } + + it "does not add an error" do + sale_information_validator.validate_staircasing_last_transaction_date(record) + + expect(record.errors[:lasttransaction]).not_to be_present + end + end + end + describe "#validate_previous_property_unit_type" do context "when number of bedrooms is <= 1" do let(:record) { FactoryBot.build(:sales_log, frombeds: 1, fromprop: 2) }