From 4d96381dd7bec4709c5612e86643e4f9cb28605e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Meny?= Date: Mon, 6 Jun 2022 13:30:54 +0100 Subject: [PATCH] CLDC-1285: Setting pregnancy to yes is allowed if a tenant's age is unknown (#638) --- app/models/case_log.rb | 16 ++++++-- .../validations/household_validations.rb | 10 ++++- .../validations/household_validations_spec.rb | 39 ++++++++++--------- 3 files changed, 40 insertions(+), 25 deletions(-) diff --git a/app/models/case_log.rb b/app/models/case_log.rb index 576078eb8..94b80f2c3 100644 --- a/app/models/case_log.rb +++ b/app/models/case_log.rb @@ -433,6 +433,18 @@ class CaseLog < ApplicationRecord end end + def age_known?(person_num) + return false unless person_num.is_a?(Integer) + + !!public_send("age#{person_num}_known")&.zero? + end + + def age_unknown?(person_num) + return false unless person_num.is_a?(Integer) + + public_send("age#{person_num}_known") == 1 + end + private PIO = Postcodes::IO.new @@ -568,10 +580,6 @@ private public_send("age#{person_num}") && public_send("age#{person_num}") < 16 end - def age_known?(person_num) - !!public_send("age#{person_num}_known")&.zero? - end - def process_postcode_changes! self.postcode_full = upcase_and_remove_whitespace(postcode_full) process_postcode(postcode_full, "postcode_known", "is_la_inferred", "la") diff --git a/app/models/validations/household_validations.rb b/app/models/validations/household_validations.rb index 1f67c12e1..9c291d7e7 100644 --- a/app/models/validations/household_validations.rb +++ b/app/models/validations/household_validations.rb @@ -134,12 +134,18 @@ private def women_of_child_bearing_age_in_household(record) (1..8).any? do |n| - next if record["sex#{n}"].nil? || record["age#{n}"].nil? + next if record["sex#{n}"].nil? - (record["sex#{n}"]) == "F" && record["age#{n}"] >= 11 && record["age#{n}"] <= 65 + record["sex#{n}"] == "F" && (in_pregnancy_age_range?(record, n) || record.age_unknown?(n)) end end + def in_pregnancy_age_range?(record, person_num) + return false if record["age#{person_num}"].nil? + + record["age#{person_num}"] >= 11 && record["age#{person_num}"] <= 65 + end + def women_in_household(record) (1..8).any? do |n| record["sex#{n}"] == "F" diff --git a/spec/models/validations/household_validations_spec.rb b/spec/models/validations/household_validations_spec.rb index 8780d0746..5201adb6e 100644 --- a/spec/models/validations/household_validations_spec.rb +++ b/spec/models/validations/household_validations_spec.rb @@ -74,10 +74,9 @@ RSpec.describe Validations::HouseholdValidations do context "when there are female tenants" do context "but they are older than 65" do + before { record.assign_attributes(sex1: "F", age1: 66, preg_occ: 1) } + it "validates that pregnancy cannot be yes" do - record.preg_occ = 1 - record.sex1 = "F" - record.age1 = 66 household_validator.validate_pregnancy(record) expect(record.errors["preg_occ"]) .to include(match I18n.t("validations.household.preg_occ.no_female")) @@ -85,39 +84,41 @@ RSpec.describe Validations::HouseholdValidations do end context "and they are the lead tenant and under 65" do - it "pregnancy can be yes" do - record.preg_occ = 1 - record.sex1 = "F" - record.age1 = 64 + before { record.assign_attributes(sex1: "F", age1: 64, preg_occ: 1) } + + it "allows pregnancy to be set to yes" do household_validator.validate_pregnancy(record) expect(record.errors["preg_occ"]).to be_empty end end context "and they are another household member and under 51" do - it "pregnancy can be yes" do - record.preg_occ = 1 - record.sex1 = "M" - record.age1 = 25 - record.sex3 = "F" - record.age3 = 64 + before { record.assign_attributes(sex1: "M", age1: 25, sex3: "F", age3: 64, preg_occ: 1) } + + it "allows pregnancy to be set to yes" do household_validator.validate_pregnancy(record) expect(record.errors["preg_occ"]).to be_empty end end context "and they are another household member and under 11" do - it "pregnancy can be yes" do - record.preg_occ = 1 - record.sex1 = "M" - record.age1 = 25 - record.sex3 = "F" - record.age3 = 10 + before { record.assign_attributes(sex1: "M", age1: 25, sex3: "F", age3: 10, preg_occ: 1) } + + it "validates that pregnancy cannot be yes" do household_validator.validate_pregnancy(record) expect(record.errors["preg_occ"]) .to include(match I18n.t("validations.household.preg_occ.no_female")) end end + + context "and one tenant's age is unknown" do + before { record.assign_attributes(sex1: "F", age1: nil, age1_known: 1, preg_occ: 1) } + + it "allows pregnancy to be set to yes" do + household_validator.validate_pregnancy(record) + expect(record.errors["preg_occ"]).to be_empty + end + end end end