Browse Source

change numeric validation

pull/1227/head
Kat 4 years ago
parent
commit
23f13fdcb2
  1. 2
      app/models/form/sales/questions/deposit_amount.rb
  2. 8
      app/models/validations/sales/sale_information_validations.rb
  3. 6
      app/models/validations/shared_validations.rb
  4. 42
      spec/models/validations/sales/sale_information_validations_spec.rb

2
app/models/form/sales/questions/deposit_amount.rb

@ -7,7 +7,7 @@ class Form::Sales::Questions::DepositAmount < ::Form::Question
@type = "numeric"
@min = 0
@width = 5
@max = 9_999_999
@max = 999_999
@prefix = "£"
@hint_text = "Enter the total cash sum paid by the buyer towards the property that was not funded by the mortgage"
@derived = true

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

@ -1,12 +1,4 @@
module Validations::Sales::SaleInformationValidations
def validate_deposit_range(record)
return if record.deposit.blank?
unless record.deposit >= 0 && record.deposit <= 999_999
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?

6
app/models/validations/shared_validations.rb

@ -19,17 +19,19 @@ module Validations::SharedValidations
next unless record[question.id]
field = question.check_answer_label || question.id
min = [question.prefix, question.min].join("")
max = [question.prefix, question.max].join("")
begin
answer = Float(record.public_send("#{question.id}_before_type_cast"))
rescue ArgumentError
record.errors.add question.id.to_sym, I18n.t("validations.numeric.valid", field:, min: question.min, max: question.max)
record.errors.add question.id.to_sym, I18n.t("validations.numeric.valid", field:, min:, max:)
end
next unless answer
if (question.min && question.min > answer) || (question.max && question.max < answer)
record.errors.add question.id.to_sym, I18n.t("validations.numeric.valid", field:, min: question.min, max: question.max)
record.errors.add question.id.to_sym, I18n.t("validations.numeric.valid", field:, min:, max:)
end
end
end

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

@ -5,48 +5,6 @@ RSpec.describe Validations::Sales::SaleInformationValidations do
let(:validator_class) { Class.new { include Validations::Sales::SaleInformationValidations } }
describe "#validate_deposit_range" do
context "when within permitted bounds" do
let(:record) { build(:sales_log, deposit: 0) }
it "does not add an error" do
sale_information_validator.validate_deposit_range(record)
expect(record.errors[:deposit]).not_to be_present
end
end
context "when blank" do
let(:record) { build(:sales_log, deposit: nil) }
it "does not add an error" do
sale_information_validator.validate_deposit_range(record)
expect(record.errors[:deposit]).not_to be_present
end
end
context "when below lower bound" do
let(:record) { build(:sales_log, deposit: -1) }
it "adds an error" do
sale_information_validator.validate_deposit_range(record)
expect(record.errors[:deposit]).to be_present
end
end
context "when higher than upper bound" do
let(:record) { build(:sales_log, deposit: 1_000_000) }
it "adds an error" do
sale_information_validator.validate_deposit_range(record)
expect(record.errors[:deposit]).to be_present
end
end
end
describe "#validate_pratical_completion_date_before_saledate" do
context "when hodate blank" do
let(:record) { build(:sales_log, hodate: nil) }

Loading…
Cancel
Save