Browse Source

Update date validations for 2025

pull/2886/head
Kat 7 months ago
parent
commit
2265302291
  1. 46
      app/models/validations/date_validations.rb
  2. 4
      config/locales/validations/lettings/date.en.yml
  3. 106
      spec/models/validations/date_validations_spec.rb

46
app/models/validations/date_validations.rb

@ -11,14 +11,26 @@ module Validations::DateValidations
record.errors.add :mrcdate, I18n.t("validations.lettings.date.mrcdate.not_first_let") record.errors.add :mrcdate, I18n.t("validations.lettings.date.mrcdate.not_first_let")
end end
if record["mrcdate"].present? && record["startdate"].present? && record["startdate"].to_date - record["mrcdate"].to_date > 3650 return unless record["mrcdate"].present? && record["startdate"].present?
if record.form.start_year_2025_or_later?
if record["startdate"].to_date - record["mrcdate"].to_date > 7300
record.errors.add :mrcdate, I18n.t("validations.lettings.date.mrcdate.twenty_years_before_tenancy_start")
end
elsif record["startdate"].to_date - record["mrcdate"].to_date > 3650
record.errors.add :mrcdate, I18n.t("validations.lettings.date.mrcdate.ten_years_before_tenancy_start") record.errors.add :mrcdate, I18n.t("validations.lettings.date.mrcdate.ten_years_before_tenancy_start")
end end
end end
def validate_property_void_date(record) def validate_property_void_date(record)
if record["voiddate"].present? && record["startdate"].present? && record["startdate"].to_date - record["voiddate"].to_date > 3650 if record["voiddate"].present? && record["startdate"].present?
record.errors.add :voiddate, I18n.t("validations.lettings.date.void_date.ten_years_before_tenancy_start") if record.form.start_year_2025_or_later?
if record["startdate"].to_date - record["voiddate"].to_date > 7300
record.errors.add :voiddate, I18n.t("validations.lettings.date.void_date.twenty_years_before_tenancy_start")
end
elsif record["startdate"].to_date - record["voiddate"].to_date > 3650
record.errors.add :voiddate, I18n.t("validations.lettings.date.void_date.ten_years_before_tenancy_start")
end
end end
if record["voiddate"].present? && record["startdate"].present? && record["startdate"].to_date < record["voiddate"].to_date if record["voiddate"].present? && record["startdate"].present? && record["startdate"].to_date < record["voiddate"].to_date
@ -42,13 +54,7 @@ module Validations::DateValidations
record.errors.add :startdate, I18n.t("validations.lettings.date.startdate.after_major_repair_date") record.errors.add :startdate, I18n.t("validations.lettings.date.startdate.after_major_repair_date")
end end
if record["voiddate"].present? && record["startdate"].to_date - record["voiddate"].to_date > 3650 validate_startdate_against_mrc_and_void_dates(record)
record.errors.add :startdate, I18n.t("validations.lettings.date.startdate.ten_years_after_void_date")
end
if record["mrcdate"].present? && record["startdate"].to_date - record["mrcdate"].to_date > 3650
record.errors.add :startdate, I18n.t("validations.lettings.date.startdate.ten_years_after_mrc_date")
end
end end
private private
@ -56,4 +62,24 @@ private
def is_rsnvac_first_let?(record) def is_rsnvac_first_let?(record)
[15, 16, 17].include?(record["rsnvac"]) [15, 16, 17].include?(record["rsnvac"])
end end
def validate_startdate_against_mrc_and_void_dates(record)
if record.form.start_year_2025_or_later?
if record["voiddate"].present? && record["startdate"].to_date - record["voiddate"].to_date > 7300
record.errors.add :startdate, I18n.t("validations.lettings.date.startdate.twenty_years_after_void_date")
end
if record["mrcdate"].present? && record["startdate"].to_date - record["mrcdate"].to_date > 7300
record.errors.add :startdate, I18n.t("validations.lettings.date.startdate.twenty_years_after_mrc_date")
end
else
if record["voiddate"].present? && record["startdate"].to_date - record["voiddate"].to_date > 3650
record.errors.add :startdate, I18n.t("validations.lettings.date.startdate.ten_years_after_void_date")
end
if record["mrcdate"].present? && record["startdate"].to_date - record["mrcdate"].to_date > 3650
record.errors.add :startdate, I18n.t("validations.lettings.date.startdate.ten_years_after_mrc_date")
end
end
end
end end

4
config/locales/validations/lettings/date.en.yml

@ -7,14 +7,18 @@ en:
after_major_repair_date: "Enter a tenancy start date that is after the major repair date." after_major_repair_date: "Enter a tenancy start date that is after the major repair date."
ten_years_after_void_date: "Enter a tenancy start date that is no more than 10 years after the void date." ten_years_after_void_date: "Enter a tenancy start date that is no more than 10 years after the void date."
ten_years_after_mrc_date: "Enter a tenancy start date that is no more than 10 years after the major repairs completion date." ten_years_after_mrc_date: "Enter a tenancy start date that is no more than 10 years after the major repairs completion date."
twenty_years_after_void_date: "Enter a tenancy start date that is no more than 20 years after the void date."
twenty_years_after_mrc_date: "Enter a tenancy start date that is no more than 20 years after the major repairs completion date."
mrcdate: mrcdate:
before_tenancy_start: "Enter a major repairs date that is before the tenancy start date." before_tenancy_start: "Enter a major repairs date that is before the tenancy start date."
not_first_let: "Major repairs date must not be completed if the tenancy is a first let." not_first_let: "Major repairs date must not be completed if the tenancy is a first let."
ten_years_before_tenancy_start: "Enter a major repairs completion date that is no more than 10 years before the tenancy start date." ten_years_before_tenancy_start: "Enter a major repairs completion date that is no more than 10 years before the tenancy start date."
twenty_years_before_tenancy_start: "Enter a major repairs completion date that is no more than 20 years before the tenancy start date."
before_void_date: "Major repairs date must be after the void date if provided." before_void_date: "Major repairs date must be after the void date if provided."
void_date: void_date:
ten_years_before_tenancy_start: "Enter a void date no more than 10 years before the tenancy start date." ten_years_before_tenancy_start: "Enter a void date no more than 10 years before the tenancy start date."
twenty_years_before_tenancy_start: "Enter a void date no more than 20 years before the tenancy start date."
before_tenancy_start: "Enter a void date that is before the tenancy start date." before_tenancy_start: "Enter a void date that is before the tenancy start date."
after_mrcdate: "Void date must be before the major repairs date if provided." after_mrcdate: "Void date must be before the major repairs date if provided."

106
spec/models/validations/date_validations_spec.rb

@ -68,23 +68,46 @@ RSpec.describe Validations::DateValidations do
expect(record.errors["mrcdate"]).to be_empty expect(record.errors["mrcdate"]).to be_empty
end end
it "cannot be more than 10 years before the tenancy start date" do context "with 2024 logs or earlier" do
record.startdate = Time.zone.local(2022, 2, 1) it "cannot be more than 10 years before the tenancy start date" do
record.mrcdate = Time.zone.local(2012, 1, 1) record.startdate = Time.zone.local(2024, 2, 1)
date_validator.validate_property_major_repairs(record) record.mrcdate = Time.zone.local(2014, 1, 1)
date_validator.validate_startdate(record) date_validator.validate_property_major_repairs(record)
expect(record.errors["mrcdate"]) date_validator.validate_startdate(record)
.to include(match I18n.t("validations.lettings.date.mrcdate.ten_years_before_tenancy_start")) expect(record.errors["mrcdate"])
expect(record.errors["startdate"]) .to include(match I18n.t("validations.lettings.date.mrcdate.ten_years_before_tenancy_start"))
.to include(match I18n.t("validations.lettings.date.startdate.ten_years_after_mrc_date")) expect(record.errors["startdate"])
.to include(match I18n.t("validations.lettings.date.startdate.ten_years_after_mrc_date"))
end
it "must be within 10 years of the tenancy start date" do
record.startdate = Time.zone.local(2024, 2, 1)
record.mrcdate = Time.zone.local(2014, 3, 1)
date_validator.validate_property_major_repairs(record)
expect(record.errors["mrcdate"]).to be_empty
expect(record.errors["startdate"]).to be_empty
end
end end
it "must be within 10 years of the tenancy start date" do context "with 2025 logs or later" do
record.startdate = Time.zone.local(2022, 2, 1) it "cannot be more than 20 years before the tenancy start date" do
record.mrcdate = Time.zone.local(2012, 3, 1) record.startdate = Time.zone.local(2026, 2, 1)
date_validator.validate_property_major_repairs(record) record.mrcdate = Time.zone.local(2006, 1, 1)
expect(record.errors["mrcdate"]).to be_empty date_validator.validate_property_major_repairs(record)
expect(record.errors["startdate"]).to be_empty date_validator.validate_startdate(record)
expect(record.errors["mrcdate"])
.to include(match I18n.t("validations.lettings.date.mrcdate.twenty_years_before_tenancy_start"))
expect(record.errors["startdate"])
.to include(match I18n.t("validations.lettings.date.startdate.twenty_years_after_mrc_date"))
end
it "must be within 20 years of the tenancy start date" do
record.startdate = Time.zone.local(2026, 2, 1)
record.mrcdate = Time.zone.local(2006, 3, 1)
date_validator.validate_property_major_repairs(record)
expect(record.errors["mrcdate"]).to be_empty
expect(record.errors["startdate"]).to be_empty
end
end end
context "when reason for vacancy is first let of property" do context "when reason for vacancy is first let of property" do
@ -139,23 +162,46 @@ RSpec.describe Validations::DateValidations do
expect(record.errors["voiddate"]).to be_empty expect(record.errors["voiddate"]).to be_empty
end end
it "cannot be more than 10 years before the tenancy start date" do context "with 2024 logs or earlier" do
record.startdate = Time.zone.local(2022, 2, 1) it "cannot be more than 10 years before the tenancy start date" do
record.voiddate = Time.zone.local(2012, 1, 1) record.startdate = Time.zone.local(2024, 2, 1)
date_validator.validate_property_void_date(record) record.voiddate = Time.zone.local(2014, 1, 1)
date_validator.validate_startdate(record) date_validator.validate_property_void_date(record)
expect(record.errors["voiddate"]) date_validator.validate_startdate(record)
.to include(match I18n.t("validations.lettings.date.void_date.ten_years_before_tenancy_start")) expect(record.errors["voiddate"])
expect(record.errors["startdate"]) .to include(match I18n.t("validations.lettings.date.void_date.ten_years_before_tenancy_start"))
.to include(match I18n.t("validations.lettings.date.startdate.ten_years_after_void_date")) expect(record.errors["startdate"])
.to include(match I18n.t("validations.lettings.date.startdate.ten_years_after_void_date"))
end
it "must be within 10 years of the tenancy start date" do
record.startdate = Time.zone.local(2024, 2, 1)
record.voiddate = Time.zone.local(2014, 3, 1)
date_validator.validate_property_void_date(record)
expect(record.errors["voiddate"]).to be_empty
expect(record.errors["startdate"]).to be_empty
end
end end
it "must be within 10 years of the tenancy start date" do context "with 2025 logs or later" do
record.startdate = Time.zone.local(2022, 2, 1) it "cannot be more than 20 years before the tenancy start date" do
record.voiddate = Time.zone.local(2012, 3, 1) record.startdate = Time.zone.local(2026, 2, 1)
date_validator.validate_property_void_date(record) record.voiddate = Time.zone.local(2006, 1, 1)
expect(record.errors["voiddate"]).to be_empty date_validator.validate_property_void_date(record)
expect(record.errors["startdate"]).to be_empty date_validator.validate_startdate(record)
expect(record.errors["voiddate"])
.to include(match I18n.t("validations.lettings.date.void_date.twenty_years_before_tenancy_start"))
expect(record.errors["startdate"])
.to include(match I18n.t("validations.lettings.date.startdate.twenty_years_after_void_date"))
end
it "must be within 20 years of the tenancy start date" do
record.startdate = Time.zone.local(2026, 2, 1)
record.voiddate = Time.zone.local(2006, 3, 1)
date_validator.validate_property_void_date(record)
expect(record.errors["voiddate"]).to be_empty
expect(record.errors["startdate"]).to be_empty
end
end end
context "when major repairs have been carried out" do context "when major repairs have been carried out" do

Loading…
Cancel
Save