From ad4a7dcfc9a127f01c63244a685f12690918bf55 Mon Sep 17 00:00:00 2001 From: Manny Dinssa <44172848+Dinssa@users.noreply.github.com> Date: Mon, 2 Dec 2024 11:05:40 +0000 Subject: [PATCH] CLDC-3723: Add validation on location units question (#2798) * Update location units question validation * Update value * Change nil value in incomplete locations to another attribute * Update validation * Update test * Update test with new additional error message * Updates * Update test --- app/models/location.rb | 3 +- config/locales/en.yml | 4 ++- spec/models/location_spec.rb | 36 ++++++++++++++++--- .../validations/setup_validations_spec.rb | 2 +- 4 files changed, 38 insertions(+), 7 deletions(-) diff --git a/app/models/location.rb b/app/models/location.rb index 58afc76e8..c333f653f 100644 --- a/app/models/location.rb +++ b/app/models/location.rb @@ -2,7 +2,8 @@ class Location < ApplicationRecord validates :postcode, on: :postcode, presence: { message: I18n.t("validations.location.postcode_blank") } validate :validate_postcode, on: :postcode, if: proc { |model| model.postcode.presence } validates :location_admin_district, on: :location_admin_district, presence: { message: I18n.t("validations.location_admin_district") } - validates :units, on: :units, presence: { message: I18n.t("validations.location.units") } + validates :units, on: :units, presence: { message: I18n.t("validations.location.units.must_be_number") } + validates :units, on: :units, numericality: { greater_than_or_equal_to: 1, message: I18n.t("validations.location.units.must_be_one_or_more") } validates :type_of_unit, on: :type_of_unit, presence: { message: I18n.t("validations.location.type_of_unit") } validates :mobility_type, on: :mobility_type, presence: { message: I18n.t("validations.location.mobility_standards") } validates :startdate, on: :startdate, presence: { message: I18n.t("validations.location.startdate_invalid") } diff --git a/config/locales/en.yml b/config/locales/en.yml index 80711129e..851a9ea2c 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -361,7 +361,9 @@ en: location: postcode_blank: "Enter a postcode." - units: "The units at this location must be a number." + units: + must_be_number: "The units at this location must be a number." + must_be_one_or_more: "Number of units must be at least 1." type_of_unit: "Select the most common type of unit at this location." mobility_standards: "Select the mobility standard for the majority of the units at this location." startdate_invalid: "Enter a valid day, month and year when the first property became available at this location." diff --git a/spec/models/location_spec.rb b/spec/models/location_spec.rb index 18581fb6e..c220914b7 100644 --- a/spec/models/location_spec.rb +++ b/spec/models/location_spec.rb @@ -740,10 +740,38 @@ RSpec.describe Location, type: :model do describe "#units" do let(:location) { FactoryBot.build(:location) } - it "does add an error when the number of units is invalid" do - location.units = nil - location.valid?(:units) - expect(location.errors.count).to eq(1) + context "when the number of units is invalid" do + it "adds an error when units is nil" do + location.units = nil + location.valid?(:units) + expect(location.errors.count).to eq(2) + end + + it "adds an error when units is 0" do + location.units = 0 + location.valid?(:units) + expect(location.errors.count).to eq(1) + end + end + + context "when the number of units is valid" do + it "does not add an error when units is 1" do + location.units = 1 + location.valid?(:units) + expect(location.errors.count).to eq(0) + end + + it "does not add an error when units is 10" do + location.units = 10 + location.valid?(:units) + expect(location.errors.count).to eq(0) + end + + it "does not add an error when units is 200" do + location.units = 200 + location.valid?(:units) + expect(location.errors.count).to eq(0) + end end end diff --git a/spec/models/validations/setup_validations_spec.rb b/spec/models/validations/setup_validations_spec.rb index 5b4f03365..1104cc23d 100644 --- a/spec/models/validations/setup_validations_spec.rb +++ b/spec/models/validations/setup_validations_spec.rb @@ -703,7 +703,7 @@ RSpec.describe Validations::SetupValidations do .to include("This location is incomplete. Select another location or update this one.") end - it "produces no error when location is completes" do + it "produces no error when location is complete" do location.update!(units: 1) location.reload record.location = location