Browse Source

Separate the validations, remove irrelevant tests

pull/2256/head
Kat 2 years ago
parent
commit
54a730b54d
  1. 124
      app/models/validations/household_validations.rb
  2. 80
      spec/models/validations/household_validations_spec.rb

124
app/models/validations/household_validations.rb

@ -51,17 +51,77 @@ module Validations::HouseholdValidations
end end
end end
def validate_household_number_of_other_members(record) def validate_partner_count(record)
(2..8).each do |n|
validate_person_age_matches_economic_status(record, n)
validate_person_age_matches_relationship(record, n)
validate_person_age_and_relationship_matches_economic_status(record, n)
end
shared_validate_partner_count(record, 8) shared_validate_partner_count(record, 8)
end end
def validate_person_1_economic(record) def validate_person_1_economic(record)
validate_person_age_matches_economic_status(record, 1) return unless record.age1 && record.ecstat1
if record.age1 < 16 && !economic_status_is_child_other_or_refused?(record.ecstat1)
record.errors.add "ecstat1", I18n.t("validations.household.ecstat.child_under_16", person_num: 1)
record.errors.add "age1", I18n.t("validations.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.household.ecstat.child_over_16", person_num: 1)
record.errors.add "age1", I18n.t("validations.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.errors.add "ecstat#{person_num}", I18n.t("validations.household.ecstat.child_under_16", person_num:)
record.errors.add "age#{person_num}", I18n.t("validations.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.household.ecstat.child_over_16", person_num:)
record.errors.add "age#{person_num}", I18n.t("validations.household.age.child_over_16", person_num:)
end
end
end
def validate_person_age_matches_relationship(record)
(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.household.relat.child_under_16_lettings", person_num:)
record.errors.add "age#{person_num}", I18n.t("validations.household.age.child_under_16_relat_lettings", person_num:)
end
end
end
def validate_person_age_and_relationship_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}")
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 "age#{person_num}", I18n.t("validations.household.age.student_16_19.cannot_be_16_19.child_not_student")
record.errors.add "ecstat#{person_num}", I18n.t("validations.household.ecstat.student_16_19.must_be_student") # 1
record.errors.add "relat#{person_num}", I18n.t("validations.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.household.age.student_16_19.must_be_16_19") # 2
record.errors.add "ecstat#{person_num}", I18n.t("validations.household.ecstat.student_16_19.cannot_be_student.child_not_16_19")
record.errors.add "relat#{person_num}", I18n.t("validations.household.relat.student_16_19.cannot_be_child.student_not_16_19")
end
end end
def validate_condition_effects(record) def validate_condition_effects(record)
@ -182,56 +242,6 @@ private
end end
end end
def validate_person_age_matches_economic_status(record, person_num)
age = record.public_send("age#{person_num}")
economic_status = record.public_send("ecstat#{person_num}")
return unless age && economic_status
if age < 16 && !economic_status_is_child_other_or_refused?(economic_status)
record.errors.add "ecstat#{person_num}", I18n.t("validations.household.ecstat.child_under_16", person_num:)
record.errors.add "age#{person_num}", I18n.t("validations.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.household.ecstat.child_over_16", person_num:)
record.errors.add "age#{person_num}", I18n.t("validations.household.age.child_over_16", person_num:)
end
end
def validate_person_age_matches_relationship(record, person_num)
age = record.public_send("age#{person_num}")
relationship = record.public_send("relat#{person_num}")
return unless age && relationship
if age < 16 && !relationship_is_child_other_or_refused?(relationship)
record.errors.add "relat#{person_num}", I18n.t("validations.household.relat.child_under_16_lettings", person_num:)
record.errors.add "age#{person_num}", I18n.t("validations.household.age.child_under_16_relat_lettings", person_num:)
end
end
def validate_person_age_and_relationship_matches_economic_status(record, person_num)
age = record.public_send("age#{person_num}")
economic_status = record.public_send("ecstat#{person_num}")
relationship = record.public_send("relat#{person_num}")
return 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 "age#{person_num}", I18n.t("validations.household.age.student_16_19.cannot_be_16_19.child_not_student")
record.errors.add "ecstat#{person_num}", I18n.t("validations.household.ecstat.student_16_19.must_be_student")
record.errors.add "relat#{person_num}", I18n.t("validations.household.relat.student_16_19.cannot_be_child.16_19_not_student")
end
if !age_between_16_19 && student && child
record.errors.add "age#{person_num}", I18n.t("validations.household.age.student_16_19.must_be_16_19")
record.errors.add "ecstat#{person_num}", I18n.t("validations.household.ecstat.student_16_19.cannot_be_student.child_not_16_19")
record.errors.add "relat#{person_num}", I18n.t("validations.household.relat.student_16_19.cannot_be_child.student_not_16_19")
end
end
def tenant_is_economic_child?(economic_status) def tenant_is_economic_child?(economic_status)
economic_status == 9 economic_status == 9
end end

80
spec/models/validations/household_validations_spec.rb

@ -272,7 +272,7 @@ RSpec.describe Validations::HouseholdValidations do
end end
end end
describe "household member validations" do describe "#validate_numeric_min_max" do
it "validates that the number of household members cannot be less than 1" do it "validates that the number of household members cannot be less than 1" do
record.hhmemb = 0 record.hhmemb = 0
household_validator.validate_numeric_min_max(record) household_validator.validate_numeric_min_max(record)
@ -292,11 +292,13 @@ RSpec.describe Validations::HouseholdValidations do
household_validator.validate_numeric_min_max(record) household_validator.validate_numeric_min_max(record)
expect(record.errors["hhmemb"]).to be_empty expect(record.errors["hhmemb"]).to be_empty
end end
end
describe "#validate_partner_count" do
it "validates that only 1 partner exists" do it "validates that only 1 partner exists" do
record.relat2 = "P" record.relat2 = "P"
record.relat3 = "P" record.relat3 = "P"
household_validator.validate_household_number_of_other_members(record) household_validator.validate_partner_count(record)
expect(record.errors["relat2"]) expect(record.errors["relat2"])
.to include(match I18n.t("validations.household.relat.one_partner")) .to include(match I18n.t("validations.household.relat.one_partner"))
expect(record.errors["relat3"]) expect(record.errors["relat3"])
@ -307,15 +309,17 @@ RSpec.describe Validations::HouseholdValidations do
it "expects that a tenant can have a partner" do it "expects that a tenant can have a partner" do
record.relat3 = "P" record.relat3 = "P"
household_validator.validate_household_number_of_other_members(record) household_validator.validate_partner_count(record)
expect(record.errors["base"]).to be_empty expect(record.errors["base"]).to be_empty
end end
end
describe "#validate_person_age_matches_relationship" do
context "when the household contains a person under 16" do context "when the household contains a person under 16" do
it "validates that person must be a child of the tenant" do it "validates that person must be a child of the tenant" do
record.age2 = 14 record.age2 = 14
record.relat2 = "P" record.relat2 = "P"
household_validator.validate_household_number_of_other_members(record) household_validator.validate_person_age_matches_relationship(record)
expect(record.errors["relat2"]) expect(record.errors["relat2"])
.to include(match I18n.t("validations.household.relat.child_under_16_lettings", person_num: 2)) .to include(match I18n.t("validations.household.relat.child_under_16_lettings", person_num: 2))
expect(record.errors["age2"]) expect(record.errors["age2"])
@ -325,15 +329,19 @@ RSpec.describe Validations::HouseholdValidations do
it "expects that person is a child of the tenant" do it "expects that person is a child of the tenant" do
record.age2 = 14 record.age2 = 14
record.relat2 = "C" record.relat2 = "C"
household_validator.validate_household_number_of_other_members(record) household_validator.validate_person_age_matches_relationship(record)
expect(record.errors["relat2"]).to be_empty expect(record.errors["relat2"]).to be_empty
expect(record.errors["age2"]).to be_empty expect(record.errors["age2"]).to be_empty
end end
end
end
describe "#validate_person_age_matches_economic_status" do
context "when the household contains a person under 16" do
it "validates that person's economic status must be Child" do it "validates that person's economic status must be Child" do
record.age2 = 14 record.age2 = 14
record.ecstat2 = 1 record.ecstat2 = 1
household_validator.validate_household_number_of_other_members(record) household_validator.validate_person_age_matches_economic_status(record)
expect(record.errors["ecstat2"]) expect(record.errors["ecstat2"])
.to include(match I18n.t("validations.household.ecstat.child_under_16", person_num: 2)) .to include(match I18n.t("validations.household.ecstat.child_under_16", person_num: 2))
expect(record.errors["age2"]) expect(record.errors["age2"])
@ -343,7 +351,7 @@ RSpec.describe Validations::HouseholdValidations do
it "expects that person's economic status is Child" do it "expects that person's economic status is Child" do
record.age2 = 14 record.age2 = 14
record.ecstat2 = 9 record.ecstat2 = 9
household_validator.validate_household_number_of_other_members(record) household_validator.validate_person_age_matches_economic_status(record)
expect(record.errors["ecstat2"]).to be_empty expect(record.errors["ecstat2"]).to be_empty
expect(record.errors["age2"]).to be_empty expect(record.errors["age2"]).to be_empty
end end
@ -352,20 +360,22 @@ RSpec.describe Validations::HouseholdValidations do
record.age2 = 21 record.age2 = 21
record.relat2 = "C" record.relat2 = "C"
record.ecstat2 = 9 record.ecstat2 = 9
household_validator.validate_household_number_of_other_members(record) household_validator.validate_person_age_matches_economic_status(record)
expect(record.errors["ecstat2"]) expect(record.errors["ecstat2"])
.to include(match I18n.t("validations.household.ecstat.child_over_16", person_num: 2)) .to include(match I18n.t("validations.household.ecstat.child_over_16", person_num: 2))
expect(record.errors["age2"]) expect(record.errors["age2"])
.to include(match I18n.t("validations.household.age.child_over_16", person_num: 2)) .to include(match I18n.t("validations.household.age.child_over_16", person_num: 2))
end end
end end
end
describe "#validate_person_age_and_relationship_matches_economic_status" do
context "when the household contains a tenant’s child between the ages of 16 and 19" do context "when the household contains a tenant’s child between the ages of 16 and 19" do
it "validates that person's economic status must be full time student or refused" do it "validates that person's economic status must be full time student or refused" do
record.age2 = 17 record.age2 = 17
record.relat2 = "C" record.relat2 = "C"
record.ecstat2 = 1 record.ecstat2 = 1
household_validator.validate_household_number_of_other_members(record) household_validator.validate_person_age_and_relationship_matches_economic_status(record)
expect(record.errors["ecstat2"]) expect(record.errors["ecstat2"])
.to include(match I18n.t("validations.household.ecstat.student_16_19.must_be_student", person_num: 2)) .to include(match I18n.t("validations.household.ecstat.student_16_19.must_be_student", person_num: 2))
expect(record.errors["age2"]) expect(record.errors["age2"])
@ -378,7 +388,7 @@ RSpec.describe Validations::HouseholdValidations do
record.age2 = 17 record.age2 = 17
record.relat2 = "C" record.relat2 = "C"
record.ecstat2 = 7 record.ecstat2 = 7
household_validator.validate_household_number_of_other_members(record) household_validator.validate_person_age_and_relationship_matches_economic_status(record)
expect(record.errors["ecstat2"]).to be_empty expect(record.errors["ecstat2"]).to be_empty
expect(record.errors["age2"]).to be_empty expect(record.errors["age2"]).to be_empty
expect(record.errors["relat2"]).to be_empty expect(record.errors["relat2"]).to be_empty
@ -388,7 +398,7 @@ RSpec.describe Validations::HouseholdValidations do
record.age2 = 17 record.age2 = 17
record.relat2 = "C" record.relat2 = "C"
record.ecstat2 = 10 record.ecstat2 = 10
household_validator.validate_household_number_of_other_members(record) household_validator.validate_person_age_and_relationship_matches_economic_status(record)
expect(record.errors["ecstat2"]).to be_empty expect(record.errors["ecstat2"]).to be_empty
expect(record.errors["age2"]).to be_empty expect(record.errors["age2"]).to be_empty
expect(record.errors["relat2"]).to be_empty expect(record.errors["relat2"]).to be_empty
@ -399,7 +409,7 @@ RSpec.describe Validations::HouseholdValidations do
record.age2 = 18 record.age2 = 18
record.ecstat2 = "7" record.ecstat2 = "7"
record.relat2 = "P" record.relat2 = "P"
household_validator.validate_household_number_of_other_members(record) household_validator.validate_person_age_and_relationship_matches_economic_status(record)
expect(record.errors["relat2"]).to be_empty expect(record.errors["relat2"]).to be_empty
expect(record.errors["ecstat2"]).to be_empty expect(record.errors["ecstat2"]).to be_empty
expect(record.errors["age2"]).to be_empty expect(record.errors["age2"]).to be_empty
@ -409,7 +419,7 @@ RSpec.describe Validations::HouseholdValidations do
record.age2 = 20 record.age2 = 20
record.ecstat2 = "7" record.ecstat2 = "7"
record.relat2 = "P" record.relat2 = "P"
household_validator.validate_household_number_of_other_members(record) household_validator.validate_person_age_and_relationship_matches_economic_status(record)
expect(record.errors["relat2"]).to be_empty expect(record.errors["relat2"]).to be_empty
expect(record.errors["ecstat2"]).to be_empty expect(record.errors["ecstat2"]).to be_empty
expect(record.errors["age2"]).to be_empty expect(record.errors["age2"]).to be_empty
@ -419,7 +429,7 @@ RSpec.describe Validations::HouseholdValidations do
record.age2 = 14 record.age2 = 14
record.ecstat2 = "7" record.ecstat2 = "7"
record.relat2 = "C" record.relat2 = "C"
household_validator.validate_household_number_of_other_members(record) household_validator.validate_person_age_and_relationship_matches_economic_status(record)
expect(record.errors["relat2"]) expect(record.errors["relat2"])
.to include(match I18n.t("validations.household.relat.student_16_19.cannot_be_child.student_not_16_19")) .to include(match I18n.t("validations.household.relat.student_16_19.cannot_be_child.student_not_16_19"))
expect(record.errors["age2"]) expect(record.errors["age2"])
@ -427,48 +437,6 @@ RSpec.describe Validations::HouseholdValidations do
expect(record.errors["ecstat2"]) expect(record.errors["ecstat2"])
.to include(match I18n.t("validations.household.ecstat.student_16_19.cannot_be_student.child_not_16_19")) .to include(match I18n.t("validations.household.ecstat.student_16_19.cannot_be_student.child_not_16_19"))
end end
context "when the household contains a person over 70" do
it "expects that person under 70 does not need to be retired" do
record.age2 = 50
record.ecstat2 = 1
household_validator.validate_household_number_of_other_members(record)
expect(record.errors["ecstat2"]).to be_empty
expect(record.errors["age2"]).to be_empty
end
it "expects that person over 70 is retired" do
record.age2 = 71
record.ecstat2 = 5
household_validator.validate_household_number_of_other_members(record)
expect(record.errors["ecstat2"]).to be_empty
expect(record.errors["age2"]).to be_empty
end
end
context "when the household contains a retired male" do
it "expects that person is over 65" do
record.age2 = 66
record.sex2 = "M"
record.ecstat2 = 5
household_validator.validate_household_number_of_other_members(record)
expect(record.errors["ecstat2"]).to be_empty
expect(record.errors["sex2"]).to be_empty
expect(record.errors["age2"]).to be_empty
end
end
context "when the household contains a retired female" do
it "expects that person is over 60" do
record.age2 = 61
record.sex2 = "F"
record.ecstat2 = 5
household_validator.validate_household_number_of_other_members(record)
expect(record.errors["ecstat2"]).to be_empty
expect(record.errors["sex2"]).to be_empty
expect(record.errors["age2"]).to be_empty
end
end
end end
describe "condition effects validation" do describe "condition effects validation" do

Loading…
Cancel
Save