From 9f18504ebc396f74491b3c9be17cd8c39b44a7f8 Mon Sep 17 00:00:00 2001 From: Manny Dinssa <44172848+Dinssa@users.noreply.github.com> Date: Tue, 19 Nov 2024 13:54:22 +0000 Subject: [PATCH] Add tests and add validations --- .../sales/sale_information_validations.rb | 7 ++- .../validations/sales/sale_information.en.yml | 4 +- .../sale_information_validations_spec.rb | 50 +++++++++++++++++++ 3 files changed, 59 insertions(+), 2 deletions(-) diff --git a/app/models/validations/sales/sale_information_validations.rb b/app/models/validations/sales/sale_information_validations.rb index 3dcca0b6f..a18af43fa 100644 --- a/app/models/validations/sales/sale_information_validations.rb +++ b/app/models/validations/sales/sale_information_validations.rb @@ -361,7 +361,12 @@ module Validations::Sales::SaleInformationValidations if record.firststair == 2 && record.numstair < 2 record.errors.add :numstair, I18n.t("validations.sales.sale_information.numstair.must_be_greater_than_one") - record.errors.add :firststair, I18n.t("validations.sales.sale_information.firststair.more_than_one_transaction") + record.errors.add :firststair, I18n.t("validations.sales.sale_information.firststair.cannot_be_no") + end + + if record.firststair == 1 && record.numstair > 1 + record.errors.add :numstair, I18n.t("validations.sales.sale_information.numstair.must_be_one") + record.errors.add :firststair, I18n.t("validations.sales.sale_information.firststair.cannot_be_yes") end end diff --git a/config/locales/validations/sales/sale_information.en.yml b/config/locales/validations/sales/sale_information.en.yml index 013b45d44..8d0755b10 100644 --- a/config/locales/validations/sales/sale_information.en.yml +++ b/config/locales/validations/sales/sale_information.en.yml @@ -127,5 +127,7 @@ en: value_over_discounted_max: "The percentage discount multiplied by the purchase price is %{discount_value}. This figure should not be more than £102,400 for properties outside of London." numstair: must_be_greater_than_one: "The number of staircasing transactions must be greater than 1 when this is not the first staircasing transaction." + must_be_one: "The number of staircasing transactions must be 1 when this is the first staircasing transaction." firststair: - more_than_one_transaction: "The answer to 'Is this the first staircasing transaction?' cannot be 'yes' if the number of staircasing transactions is more than 1." + cannot_be_no: "The answer to 'Is this the first staircasing transaction?' cannot be 'no' if the number of staircasing transactions is 1." + cannot_be_yes: "The answer to 'Is this the first staircasing transaction?' cannot be 'yes' if the number of staircasing transactions is greater than 1." diff --git a/spec/models/validations/sales/sale_information_validations_spec.rb b/spec/models/validations/sales/sale_information_validations_spec.rb index 36dadc345..29c32bdad 100644 --- a/spec/models/validations/sales/sale_information_validations_spec.rb +++ b/spec/models/validations/sales/sale_information_validations_spec.rb @@ -1406,4 +1406,54 @@ RSpec.describe Validations::Sales::SaleInformationValidations do end end end + + describe "#validate_number_of_staircase_transactions" do + let(:record) { build(:sales_log, numstair:, firststair:) } + + before do + sale_information_validator.validate_number_of_staircase_transactions(record) + end + + context "when it is not the first staircasing transaction" do + context "and the number of staircasing transactions is between 2 and 10" do + let(:numstair) { 6 } + let(:firststair) { 2 } + + it "does not add an error" do + expect(record.errors).to be_empty + end + end + + context "and the number of staircasing transactions is less than 2" do + let(:numstair) { 1 } + let(:firststair) { 2 } + + it "adds an error" do + expect(record.errors[:numstair]).to include(I18n.t("validations.sales.sale_information.numstair.must_be_greater_than_one")) + expect(record.errors[:firststair]).to include(I18n.t("validations.sales.sale_information.firststair.cannot_be_no")) + end + end + end + + context "when it is the first staircasing transaction" do + context "and numstair is also 1" do + let(:numstair) { 1 } + let(:firststair) { 1 } + + it "does not add an error" do + expect(record.errors).to be_empty + end + end + + context "and numstair is greater than 1" do + let(:numstair) { 2 } + let(:firststair) { 1 } + + it "adds an error" do + expect(record.errors[:numstair]).to include(I18n.t("validations.sales.sale_information.numstair.must_be_one")) + expect(record.errors[:firststair]).to include(I18n.t("validations.sales.sale_information.firststair.cannot_be_yes")) + end + end + end + end end