Browse Source

validate sales log head count between 0 and 4

pull/1011/head
Phil Lee 4 years ago
parent
commit
6d3707f20d
  1. 7
      app/models/sales_log.rb
  2. 9
      app/models/validations/sales/household_validations.rb
  3. 49
      spec/models/validations/sales/household_validations_spec.rb

7
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

9
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

49
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
Loading…
Cancel
Save