From b207b6e6d4f090737096f620230a37d78553f283 Mon Sep 17 00:00:00 2001 From: samyou-softwire Date: Wed, 22 Apr 2026 11:49:22 +0100 Subject: [PATCH] CLDC-3676: lettings household validations --- .../validations/household_validations.rb | 93 ------------------- .../validations/household_validations_spec.rb | 91 ++---------------- 2 files changed, 6 insertions(+), 178 deletions(-) diff --git a/app/models/validations/household_validations.rb b/app/models/validations/household_validations.rb index cf1962be0..3a77e9f22 100644 --- a/app/models/validations/household_validations.rb +++ b/app/models/validations/household_validations.rb @@ -30,8 +30,6 @@ module Validations::HouseholdValidations end validate_other_field(record, 20, :reason, :reasonother) - return unless record.form.start_year_2024_or_later? - if record.reason == 20 && PHRASES_INDICATING_HOMELESSNESS_REGEX.match?(record.reasonother) record.errors.add :reason, I18n.t("validations.lettings.household.reason.leaving_last_settled_home.other_not_settled") end @@ -46,41 +44,12 @@ module Validations::HouseholdValidations end end - def validate_partner_count(record) - return if record.form.start_year_2024_or_later? - - partner_numbers = (2..8).select { |n| person_is_partner?(record["relat#{n}"]) } - if partner_numbers.count > 1 - partner_numbers.each do |n| - record.errors.add "relat#{n}", I18n.t("validations.lettings.household.relat.one_partner") - end - end - end - - def validate_person_1_economic(record) - return unless record.age1 && record.ecstat1 && !record.form.start_year_2024_or_later? - - if record.age1 < 16 && !economic_status_is_child_other_or_refused?(record.ecstat1) - record.errors.add "ecstat1", I18n.t("validations.lettings.household.ecstat.child_under_16", person_num: 1) - record.errors.add "age1", I18n.t("validations.lettings.household.age.child_under_16_ecstat", person_num: 1) - end - if tenant_is_economic_child?(record.ecstat1) && record.age1 > 16 - record.errors.add "ecstat1", I18n.t("validations.lettings.household.ecstat.child_over_16", person_num: 1) - record.errors.add "age1", I18n.t("validations.lettings.household.age.child_over_16", person_num: 1) - end - end - def validate_person_age_matches_economic_status(record) (2..8).each do |person_num| age = record.public_send("age#{person_num}") economic_status = record.public_send("ecstat#{person_num}") next unless age && economic_status - if age < 16 && !economic_status_is_child_other_or_refused?(economic_status) && !record.form.start_year_2024_or_later? - record.errors.add "ecstat#{person_num}", I18n.t("validations.lettings.household.ecstat.child_under_16", person_num:) - record.errors.add "age#{person_num}", I18n.t("validations.lettings.household.age.child_under_16_ecstat", person_num:) - - end if tenant_is_economic_child?(economic_status) && age > 16 record.errors.add "ecstat#{person_num}", I18n.t("validations.lettings.household.ecstat.child_over_16", person_num:) record.errors.add "age#{person_num}", I18n.t("validations.lettings.household.age.child_over_16", person_num:) @@ -88,49 +57,6 @@ module Validations::HouseholdValidations end end - def validate_person_age_matches_relationship(record) - return unless record.startdate && !record.form.start_year_2024_or_later? - - (2..8).each do |person_num| - age = record.public_send("age#{person_num}") - relationship = record.public_send("relat#{person_num}") - next unless age && relationship - - if age < 16 && !relationship_is_child_other_or_refused?(relationship) - record.errors.add "relat#{person_num}", I18n.t("validations.lettings.household.relat.child_under_16", person_num:) - record.errors.add "age#{person_num}", I18n.t("validations.lettings.household.age.child_under_16_relat", person_num:) - end - end - end - - def validate_person_age_and_relationship_matches_economic_status(record) - return unless record.startdate && !record.form.start_year_2024_or_later? - - (2..8).each do |person_num| - age = record.public_send("age#{person_num}") - economic_status = record.public_send("ecstat#{person_num}") - relationship = record.public_send("relat#{person_num}") - next unless age && economic_status && relationship - - age_between_16_19 = age.between?(16, 19) - student = tenant_is_fulltime_student?(economic_status) - economic_status_refused = tenant_economic_status_refused?(economic_status) - child = tenant_is_child?(relationship) - - if age_between_16_19 && !(student || economic_status_refused) && child - record.errors.add "ecstat#{person_num}", I18n.t("validations.lettings.household.ecstat.student_16_19.must_be_student") - record.errors.add "age#{person_num}", I18n.t("validations.lettings.household.age.student_16_19.cannot_be_16_19.child_not_student") - record.errors.add "relat#{person_num}", I18n.t("validations.lettings.household.relat.student_16_19.cannot_be_child.16_19_not_student") - end - - next unless !age_between_16_19 && student && child - - record.errors.add "age#{person_num}", I18n.t("validations.lettings.household.age.student_16_19.must_be_16_19") - record.errors.add "ecstat#{person_num}", I18n.t("validations.lettings.household.ecstat.student_16_19.cannot_be_student.child_not_16_19") - record.errors.add "relat#{person_num}", I18n.t("validations.lettings.household.relat.student_16_19.cannot_be_child.student_not_16_19") - end - end - def validate_condition_effects(record) all_options = [record.illness_type_1, record.illness_type_2, record.illness_type_3, record.illness_type_4, record.illness_type_5, record.illness_type_6, record.illness_type_7, record.illness_type_8, record.illness_type_9, record.illness_type_10] if all_options.count(1) >= 1 && household_no_illness?(record) @@ -254,23 +180,4 @@ private economic_status == 9 end - def tenant_is_fulltime_student?(economic_status) - economic_status == 7 - end - - def tenant_economic_status_refused?(economic_status) - economic_status == 10 - end - - def economic_status_is_child_other_or_refused?(economic_status) - [9, 0, 10].include?(economic_status) - end - - def tenant_is_child?(relationship) - relationship == "C" - end - - def relationship_is_child_other_or_refused?(relationship) - %w[C X R].include?(relationship) - end end diff --git a/spec/models/validations/household_validations_spec.rb b/spec/models/validations/household_validations_spec.rb index 80c164891..89bfc3126 100644 --- a/spec/models/validations/household_validations_spec.rb +++ b/spec/models/validations/household_validations_spec.rb @@ -269,92 +269,13 @@ RSpec.describe Validations::HouseholdValidations do end end - describe "#validate_person_age_matches_relationship" do - context "with 2024 logs" do - let(:startdate) { current_collection_start_date } - - it "does not add an error is person under 16 is a partner" do - record.age2 = 14 - record.relat2 = "P" - household_validator.validate_person_age_matches_relationship(record) - expect(record.errors["relat2"]).to be_empty - expect(record.errors["age2"]).to be_empty - end - - it "does not add an error if person over 19 is child" do - record.age2 = 20 - record.relat2 = "C" - household_validator.validate_person_age_matches_relationship(record) - expect(record.errors["age2"]).to be_empty - expect(record.errors["relat2"]).to be_empty - end - end - end - describe "#validate_person_age_matches_economic_status" do - context "with 2024 logs" do - let(:startdate) { current_collection_start_date } - - it "does not run the validation" do - record.age2 = 14 - record.ecstat2 = 1 - household_validator.validate_person_age_matches_economic_status(record) - expect(record.errors["ecstat2"]) - .not_to include(match I18n.t("validations.lettings.household.ecstat.child_under_16", person_num: 2)) - expect(record.errors["age2"]) - .not_to include(match I18n.t("validations.lettings.household.age.child_under_16_ecstat", person_num: 2)) - end - end - end - - describe "#validate_person_age_and_relationship_matches_economic_status" do - context "with 2024 logs" do - let(:startdate) { current_collection_start_date } - - context "when the household contains a tenant’s child between the ages of 16 and 19" do - it "does not add an error" do - record.age2 = 17 - record.relat2 = "C" - record.ecstat2 = 1 - household_validator.validate_person_age_and_relationship_matches_economic_status(record) - expect(record.errors["ecstat2"]) - .to be_empty - expect(record.errors["age2"]) - .to be_empty - expect(record.errors["relat2"]) - .to be_empty - end - end - - it "does not add an error for a person not aged 16-19 who is a student but not a child of the lead tenant" do - record.age2 = 20 - record.ecstat2 = "7" - record.relat2 = "P" - household_validator.validate_person_age_and_relationship_matches_economic_status(record) - expect(record.errors["relat2"]).to be_empty - expect(record.errors["ecstat2"]).to be_empty - expect(record.errors["age2"]).to be_empty - end - - it "does not add errors for a person who is a child of the lead tenant and a student but not aged 16-19" do - record.age2 = 14 - record.ecstat2 = "7" - record.relat2 = "C" - household_validator.validate_person_age_and_relationship_matches_economic_status(record) - expect(record.errors["relat2"]).to be_empty - expect(record.errors["ecstat2"]).to be_empty - expect(record.errors["age2"]).to be_empty - end - - it "does not add for a person who is a student and aged 16-19 but not child" do - record.age2 = 17 - record.ecstat2 = "7" - record.relat2 = "X" - household_validator.validate_person_age_and_relationship_matches_economic_status(record) - expect(record.errors["relat2"]).to be_empty - expect(record.errors["ecstat2"]).to be_empty - expect(record.errors["age2"]).to be_empty - end + it "does not add errors when the person is under 16 but not marked as a child" do + record.age2 = 14 + record.ecstat2 = 1 + household_validator.validate_person_age_matches_economic_status(record) + expect(record.errors["ecstat2"]).to be_empty + expect(record.errors["age2"]).to be_empty end end