diff --git a/app/models/validations/property_validations.rb b/app/models/validations/property_validations.rb index 8b0988dd9..2e53b8385 100644 --- a/app/models/validations/property_validations.rb +++ b/app/models/validations/property_validations.rb @@ -75,4 +75,12 @@ module Validations::PropertyValidations record.errors.add :beds, I18n.t("validations.property.beds.over_max") end end + + def validate_uprn(record) + return unless record.uprn + + return if record.uprn.match?(/^[0-9]{1,12}$/) + + record.errors.add :uprn, I18n.t("validations.property.uprn.invalid") + end end diff --git a/app/models/validations/sales/property_validations.rb b/app/models/validations/sales/property_validations.rb index 83f86ec8f..b1bdb5b62 100644 --- a/app/models/validations/sales/property_validations.rb +++ b/app/models/validations/sales/property_validations.rb @@ -16,4 +16,12 @@ module Validations::Sales::PropertyValidations record.errors.add :beds, I18n.t("validations.property.beds.bedsits_have_max_one_bedroom") end end + + def validate_uprn(record) + return unless record.uprn + + return if record.uprn.match?(/^[0-9]{1,12}$/) + + record.errors.add :uprn, I18n.t("validations.property.uprn.invalid") + end end diff --git a/spec/models/validations/property_validations_spec.rb b/spec/models/validations/property_validations_spec.rb index b3965b3d6..3b3e42e9e 100644 --- a/spec/models/validations/property_validations_spec.rb +++ b/spec/models/validations/property_validations_spec.rb @@ -290,4 +290,33 @@ RSpec.describe Validations::PropertyValidations do end end end + + describe "#validate_uprn" do + context "when within length limit but alphanumeric" do + let(:record) { build(:sales_log, uprn: "123abc") } + + it "adds an error" do + property_validator.validate_uprn(record) + expect(record.errors.added?(:uprn, "UPRN must be 12 digits or less")).to be true + end + end + + context "when over the length limit" do + let(:record) { build(:sales_log, uprn: "1234567890123") } + + it "adds an error" do + property_validator.validate_uprn(record) + expect(record.errors.added?(:uprn, "UPRN must be 12 digits or less")).to be true + end + end + + context "when within the limit and only numeric" do + let(:record) { build(:sales_log, uprn: "123456789012") } + + it "does not add an error" do + property_validator.validate_uprn(record) + expect(record.errors).not_to be_present + end + end + end end diff --git a/spec/models/validations/sales/property_validations_spec.rb b/spec/models/validations/sales/property_validations_spec.rb index 180f16021..af65446fc 100644 --- a/spec/models/validations/sales/property_validations_spec.rb +++ b/spec/models/validations/sales/property_validations_spec.rb @@ -7,7 +7,7 @@ RSpec.describe Validations::Sales::PropertyValidations do describe "#validate_postcodes_match_if_discounted_ownership" do context "when ownership scheme is not discounted ownership" do - let(:record) { FactoryBot.build(:sales_log, ownershipsch: 1) } + let(:record) { build(:sales_log, ownershipsch: 1) } it "when postcodes match no error is added" do record.postcode_full = "SW1A 1AA" @@ -19,7 +19,7 @@ RSpec.describe Validations::Sales::PropertyValidations do end context "when ownership scheme is discounted ownership" do - let(:record) { FactoryBot.build(:sales_log, ownershipsch: 2) } + let(:record) { build(:sales_log, ownershipsch: 2) } it "when ppostcode_full is not present no error is added" do record.postcode_full = "SW1A 1AA" @@ -51,7 +51,7 @@ RSpec.describe Validations::Sales::PropertyValidations do describe "#validate_property_unit_type" do context "when number of bedrooms is 1" do - let(:record) { FactoryBot.build(:sales_log, beds: 1, proptype: 2) } + let(:record) { build(:sales_log, beds: 1, proptype: 2) } it "does not add an error if it's a bedsit" do property_validator.validate_bedsit_number_of_beds(record) @@ -60,7 +60,7 @@ RSpec.describe Validations::Sales::PropertyValidations do end context "when number of bedrooms is > 1" do - let(:record) { FactoryBot.build(:sales_log, beds: 2, proptype: 2) } + let(:record) { build(:sales_log, beds: 2, proptype: 2) } it "does add an error if it's a bedsit" do property_validator.validate_bedsit_number_of_beds(record) @@ -76,7 +76,7 @@ RSpec.describe Validations::Sales::PropertyValidations do end context "when number of bedrooms is undefined" do - let(:record) { FactoryBot.build(:sales_log, beds: nil, proptype: 2) } + let(:record) { build(:sales_log, beds: nil, proptype: 2) } it "does not add an error if it's a bedsit" do property_validator.validate_bedsit_number_of_beds(record) @@ -84,4 +84,33 @@ RSpec.describe Validations::Sales::PropertyValidations do end end end + + describe "#validate_uprn" do + context "when within length limit but alphanumeric" do + let(:record) { build(:sales_log, uprn: "123abc") } + + it "adds an error" do + property_validator.validate_uprn(record) + expect(record.errors.added?(:uprn, "UPRN must be 12 digits or less")).to be true + end + end + + context "when over the length limit" do + let(:record) { build(:sales_log, uprn: "1234567890123") } + + it "adds an error" do + property_validator.validate_uprn(record) + expect(record.errors.added?(:uprn, "UPRN must be 12 digits or less")).to be true + end + end + + context "when within the limit and only numeric" do + let(:record) { build(:sales_log, uprn: "123456789012") } + + it "does not add an error" do + property_validator.validate_uprn(record) + expect(record.errors).not_to be_present + end + end + end end