Browse Source

Only check the values for the members with details known in the household

pull/602/head
Kat 3 years ago
parent
commit
1d0ea3224a
  1. 28
      app/models/validations/soft_validations.rb
  2. 18
      spec/models/validations/soft_validations_spec.rb

28
app/models/validations/soft_validations.rb

@ -48,24 +48,40 @@ module Validations::SoftValidations
end end
end end
def no_females_in_the_household? def no_females_in_a_pregnant_household?
(1..8).none? do |n| !females_in_the_household? && all_tenants_age_and_gender_information_completed? && preg_occ == 1
public_send("sex#{n}") == "F"
end && preg_occ == 1
end end
def female_in_pregnant_household_in_soft_validation_range? def female_in_pregnant_household_in_soft_validation_range?
(females_in_age_range(11, 15) || females_in_age_range(51, 65)) && !females_in_age_range(16, 50) all_tenants_age_and_gender_information_completed? && (females_in_age_range(11, 15) || females_in_age_range(51, 65)) && !females_in_age_range(16, 50) && preg_occ == 1
end
def all_tenants_age_and_gender_information_completed?
(1..hhmemb).all? do |n|
public_send("sex#{n}").present? && public_send("age#{n}").present? && details_known_or_lead_tenant?(n) && public_send("age#{n}_known")
end
end end
private private
def details_known_or_lead_tenant?(tenant_number)
return true if tenant_number == 1
public_send("details_known_#{tenant_number}").zero?
end
def females_in_age_range(min, max) def females_in_age_range(min, max)
(1..8).any? do |n| (1..hhmemb).any? do |n|
public_send("sex#{n}") == "F" && public_send("age#{n}").present? && public_send("age#{n}").between?(min, max) public_send("sex#{n}") == "F" && public_send("age#{n}").present? && public_send("age#{n}").between?(min, max)
end end
end end
def females_in_the_household?
(1..hhmemb).any? do |n|
public_send("sex#{n}") == "F" || public_send("sex#{n}").nil?
end
end
def tenant_is_retired?(economic_status) def tenant_is_retired?(economic_status)
economic_status == 5 economic_status == 5
end end

18
spec/models/validations/soft_validations_spec.rb

@ -168,29 +168,37 @@ RSpec.describe Validations::SoftValidations do
describe "pregnancy soft validations" do describe "pregnancy soft validations" do
context "when there are no female tenants" do context "when there are no female tenants" do
it "shows the interruption screen" do it "shows the interruption screen" do
record.update!(age1: 43, sex1: "M", preg_occ: 1) record.update!(age1: 43, sex1: "M", preg_occ: 1, hhmemb: 1, age1_known: 0)
expect(record.no_females_in_the_household?).to be true expect(record.no_females_in_a_pregnant_household?).to be true
end end
end end
context "when female tenants are in 11-16 age range" do context "when female tenants are in 11-16 age range" do
it "shows the interruption screen" do it "shows the interruption screen" do
record.update!(age3: 14, sex3: "F", preg_occ: 1) record.update!(age2: 14, sex2: "F", preg_occ: 1, hhmemb: 2, details_known_2: 0, age2_known: 0, age1: 18, sex1: "M", age1_known: 0)
expect(record.female_in_pregnant_household_in_soft_validation_range?).to be true expect(record.female_in_pregnant_household_in_soft_validation_range?).to be true
end end
end end
context "when female tenants are in 50-65 age range" do context "when female tenants are in 50-65 age range" do
it "shows the interruption screen" do it "shows the interruption screen" do
record.update!(age1: 54, sex1: "F", preg_occ: 1) record.update!(age1: 54, sex1: "F", preg_occ: 1, hhmemb: 1, age1_known: 0)
expect(record.female_in_pregnant_household_in_soft_validation_range?).to be true expect(record.female_in_pregnant_household_in_soft_validation_range?).to be true
end end
end end
context "when female tenants are outside or soft validation ranges" do context "when female tenants are outside or soft validation ranges" do
it "does not show the interruption screen" do it "does not show the interruption screen" do
record.update!(age1: 44, sex1: "F", preg_occ: 1) record.update!(age1: 44, sex1: "F", preg_occ: 1, hhmemb: 1)
expect(record.no_females_in_a_pregnant_household?).to be false
expect(record.female_in_pregnant_household_in_soft_validation_range?).to be false expect(record.female_in_pregnant_household_in_soft_validation_range?).to be false
end
end
context "when the information about the tenants is not given" do
it "does not show the interruption screen" do
record.update!(preg_occ: 1, hhmemb: 2)
expect(record.no_females_in_a_pregnant_household?).to be false
expect(record.female_in_pregnant_household_in_soft_validation_range?).to be false expect(record.female_in_pregnant_household_in_soft_validation_range?).to be false
end end
end end

Loading…
Cancel
Save