diff --git a/app/models/sales_log.rb b/app/models/sales_log.rb index 7c352aa78..703da2911 100644 --- a/app/models/sales_log.rb +++ b/app/models/sales_log.rb @@ -1,5 +1,10 @@ class SalesLogValidator < ActiveModel::Validator - def validate(record); end + include Validations::Sales::HouseholdValidations + + def validate(record) + validation_methods = public_methods.select { |method| method.starts_with?("validate_") } + validation_methods.each { |meth| public_send(meth, record) } + end end class SalesLog < Log diff --git a/app/models/validations/sales/household_validations.rb b/app/models/validations/sales/household_validations.rb new file mode 100644 index 000000000..940c3d6c7 --- /dev/null +++ b/app/models/validations/sales/household_validations.rb @@ -0,0 +1,9 @@ +module Validations::Sales::HouseholdValidations + def validate_number_of_other_people_living_in_the_property(record) + return if record.hholdcount.blank? + + unless record.hholdcount >= 0 && record.hholdcount <= 4 + record.errors.add :hholdcount, I18n.t("validations.numeric.valid", field: "Number of other people living in the property", min: 0, max: 4) + end + end +end diff --git a/spec/models/validations/sales/household_validations_spec.rb b/spec/models/validations/sales/household_validations_spec.rb new file mode 100644 index 000000000..ea581c096 --- /dev/null +++ b/spec/models/validations/sales/household_validations_spec.rb @@ -0,0 +1,49 @@ +require "rails_helper" + +RSpec.describe Validations::Sales::HouseholdValidations do + subject(:household_validator) { validator_class.new } + + let(:validator_class) { Class.new { include Validations::Sales::HouseholdValidations } } + + describe "#validate_number_of_other_people_living_in_the_property" do + context "when within permitted bounds" do + let(:record) { FactoryBot.build(:sales_log, hholdcount: 2) } + + it "does not add an error" do + household_validator.validate_number_of_other_people_living_in_the_property(record) + + expect(record.errors).not_to be_present + end + end + + context "when blank" do + let(:record) { FactoryBot.build(:sales_log, hholdcount: nil) } + + it "does not add an error" do + household_validator.validate_number_of_other_people_living_in_the_property(record) + + expect(record.errors).not_to be_present + end + end + + context "when below lower bound" do + let(:record) { FactoryBot.build(:sales_log, hholdcount: -1) } + + it "adds an error" do + household_validator.validate_number_of_other_people_living_in_the_property(record) + + expect(record.errors).to be_present + end + end + + context "when higher than upper bound" do + let(:record) { FactoryBot.build(:sales_log, hholdcount: 5) } + + it "adds an error" do + household_validator.validate_number_of_other_people_living_in_the_property(record) + + expect(record.errors).to be_present + end + end + end +end