Browse Source

[CLDC-863] Add hard validation for hodate

pull/1198/head
Jack S 3 years ago
parent
commit
6235615a6d
  1. 5
      app/models/sales_log.rb
  2. 8
      app/models/validations/sales/sale_information_validations.rb
  3. 62
      spec/models/validations/sales/sale_information_validations_spec.rb

5
app/models/sales_log.rb

@ -1,11 +1,10 @@
class SalesLogValidator < ActiveModel::Validator
include Validations::SharedValidations
include Validations::LocalAuthorityValidations
include Validations::Sales::HouseholdValidations
include Validations::Sales::FinancialValidations
include Validations::Sales::SaleInformationValidations
include Validations::SharedValidations
include Validations::LocalAuthorityValidations
def validate(record)
validation_methods = public_methods.select { |method| method.starts_with?("validate_") }
validation_methods.each { |meth| public_send(meth, record) }

8
app/models/validations/sales/sale_information_validations.rb

@ -6,4 +6,12 @@ module Validations::Sales::SaleInformationValidations
record.errors.add :deposit, "Cash deposit must be £0 - £999,999"
end
end
def validate_pratical_completion_date_before_saledate(record)
return if record.saledate.blank? || record.hodate.blank?
unless record.saledate > record.hodate
record.errors.add :hodate, "Practical completion or handover date must be before exchange date"
end
end
end

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

@ -46,4 +46,66 @@ RSpec.describe Validations::Sales::SaleInformationValidations do
end
end
end
describe "#validate_pratical_completion_date_before_saledate" do
context "when hodate blank" do
let(:record) { build(:sales_log, hodate: nil) }
it "does not add an error" do
sale_information_validator.validate_pratical_completion_date_before_saledate(record)
expect(record.errors).not_to be_present
end
end
context "when saledate blank" do
let(:record) { build(:sales_log, saledate: nil) }
it "does not add an error" do
sale_information_validator.validate_pratical_completion_date_before_saledate(record)
expect(record.errors).not_to be_present
end
end
context "when saledate and hodate blank" do
let(:record) { build(:sales_log, hodate: nil, saledate: nil) }
it "does not add an error" do
sale_information_validator.validate_pratical_completion_date_before_saledate(record)
expect(record.errors).not_to be_present
end
end
context "when hodate before saledate" do
let(:record) { build(:sales_log, hodate: 2.months.ago, saledate: 1.month.ago) }
it "does not add an error" do
sale_information_validator.validate_pratical_completion_date_before_saledate(record)
expect(record.errors).not_to be_present
end
end
context "when hodate after saledate" do
let(:record) { build(:sales_log, hodate: 1.month.ago, saledate: 2.months.ago) }
it "adds error" do
sale_information_validator.validate_pratical_completion_date_before_saledate(record)
expect(record.errors[:hodate]).to be_present
end
end
context "when hodate == saledate" do
let(:record) { build(:sales_log, hodate: Time.zone.parse("2023-07-01"), saledate: Time.zone.parse("2023-07-01")) }
it "does not add an error" do
sale_information_validator.validate_pratical_completion_date_before_saledate(record)
expect(record.errors[:hodate]).to be_present
end
end
end
end

Loading…
Cancel
Save