diff --git a/app/models/form/lettings/pages/females_in_soft_age_range_in_pregnant_household_lead_age_value_check.rb b/app/models/form/lettings/pages/females_in_soft_age_range_in_pregnant_household_lead_age_value_check.rb index 5b06d6a28..7be7a955e 100644 --- a/app/models/form/lettings/pages/females_in_soft_age_range_in_pregnant_household_lead_age_value_check.rb +++ b/app/models/form/lettings/pages/females_in_soft_age_range_in_pregnant_household_lead_age_value_check.rb @@ -3,7 +3,7 @@ class Form::Lettings::Pages::FemalesInSoftAgeRangeInPregnantHouseholdLeadAgeValu super(id, hsh, subsection) @id = "females_in_soft_age_range_in_pregnant_household_lead_age_value_check" @copy_key = "lettings.soft_validations.pregnancy_value_check.females_in_soft_age_range_in_pregnant_household_value_check" - @depends_on = [{ "female_in_pregnant_household_in_soft_validation_range?" => true }] + @depends_on = [{ "non_males_in_pregnant_household_in_soft_validation_range?" => true }] @title_text = { "translation" => "forms.#{form.start_date.year}.#{@copy_key}.title_text", "arguments" => [], @@ -19,6 +19,10 @@ class Form::Lettings::Pages::FemalesInSoftAgeRangeInPregnantHouseholdLeadAgeValu end def interruption_screen_question_ids - %w[preg_occ sex1 sex2 sex3 sex4 sex5 sex6 sex7 sex8 age1 age2 age3 age4 age5 age6 age7 age8] + if form.start_year_2026_or_later? + %w[preg_occ age1 sexrab1 gender_same_as_sex1 age2 sexrab2 gender_same_as_sex2 age3 sexrab3 gender_same_as_sex3 age4 sexrab4 gender_same_as_sex4 age5 sexrab5 gender_same_as_sex5 age6 sexrab6 gender_same_as_sex6 age7 sexrab7 gender_same_as_sex7 age8 sexrab8 gender_same_as_sex8] + else + %w[preg_occ sex1 sex2 sex3 sex4 sex5 sex6 sex7 sex8 age1 age2 age3 age4 age5 age6 age7 age8] + end end end diff --git a/app/models/form/lettings/pages/females_in_soft_age_range_in_pregnant_household_lead_hhmemb_value_check.rb b/app/models/form/lettings/pages/females_in_soft_age_range_in_pregnant_household_lead_hhmemb_value_check.rb index 3e961b283..dc283092f 100644 --- a/app/models/form/lettings/pages/females_in_soft_age_range_in_pregnant_household_lead_hhmemb_value_check.rb +++ b/app/models/form/lettings/pages/females_in_soft_age_range_in_pregnant_household_lead_hhmemb_value_check.rb @@ -3,7 +3,7 @@ class Form::Lettings::Pages::FemalesInSoftAgeRangeInPregnantHouseholdLeadHhmembV super(id, hsh, subsection) @id = "females_in_soft_age_range_in_pregnant_household_lead_hhmemb_value_check" @copy_key = "lettings.soft_validations.pregnancy_value_check.females_in_soft_age_range_in_pregnant_household_value_check" - @depends_on = [{ "female_in_pregnant_household_in_soft_validation_range?" => true }] + @depends_on = [{ "non_males_in_pregnant_household_in_soft_validation_range?" => true }] @title_text = { "translation" => "forms.#{form.start_date.year}.#{@copy_key}.title_text", "arguments" => [], @@ -19,6 +19,10 @@ class Form::Lettings::Pages::FemalesInSoftAgeRangeInPregnantHouseholdLeadHhmembV end def interruption_screen_question_ids - %w[preg_occ sex1 sex2 sex3 sex4 sex5 sex6 sex7 sex8 age1 age2 age3 age4 age5 age6 age7 age8] + if form.start_year_2026_or_later? + %w[preg_occ age1 sexrab1 gender_same_as_sex1 age2 sexrab2 gender_same_as_sex2 age3 sexrab3 gender_same_as_sex3 age4 sexrab4 gender_same_as_sex4 age5 sexrab5 gender_same_as_sex5 age6 sexrab6 gender_same_as_sex6 age7 sexrab7 gender_same_as_sex7 age8 sexrab8 gender_same_as_sex8] + else + %w[preg_occ sex1 sex2 sex3 sex4 sex5 sex6 sex7 sex8 age1 age2 age3 age4 age5 age6 age7 age8] + end end end diff --git a/app/models/form/lettings/pages/females_in_soft_age_range_in_pregnant_household_lead_value_check.rb b/app/models/form/lettings/pages/females_in_soft_age_range_in_pregnant_household_lead_value_check.rb index af568b039..864a3883d 100644 --- a/app/models/form/lettings/pages/females_in_soft_age_range_in_pregnant_household_lead_value_check.rb +++ b/app/models/form/lettings/pages/females_in_soft_age_range_in_pregnant_household_lead_value_check.rb @@ -3,7 +3,7 @@ class Form::Lettings::Pages::FemalesInSoftAgeRangeInPregnantHouseholdLeadValueCh super @id = "females_in_soft_age_range_in_pregnant_household_lead_value_check" @copy_key = "lettings.soft_validations.pregnancy_value_check.females_in_soft_age_range_in_pregnant_household_value_check" - @depends_on = [{ "female_in_pregnant_household_in_soft_validation_range?" => true }] + @depends_on = [{ "non_males_in_pregnant_household_in_soft_validation_range?" => true }] @title_text = { "translation" => "forms.#{form.start_date.year}.#{@copy_key}.title_text", "arguments" => [], @@ -19,6 +19,10 @@ class Form::Lettings::Pages::FemalesInSoftAgeRangeInPregnantHouseholdLeadValueCh end def interruption_screen_question_ids - %w[preg_occ sex1 sex2 sex3 sex4 sex5 sex6 sex7 sex8 age1 age2 age3 age4 age5 age6 age7 age8] + if form.start_year_2026_or_later? + %w[preg_occ age1 sexrab1 gender_same_as_sex1 age2 sexrab2 gender_same_as_sex2 age3 sexrab3 gender_same_as_sex3 age4 sexrab4 gender_same_as_sex4 age5 sexrab5 gender_same_as_sex5 age6 sexrab6 gender_same_as_sex6 age7 sexrab7 gender_same_as_sex7 age8 sexrab8 gender_same_as_sex8] + else + %w[preg_occ sex1 sex2 sex3 sex4 sex5 sex6 sex7 sex8 age1 age2 age3 age4 age5 age6 age7 age8] + end end end diff --git a/app/models/form/lettings/pages/females_in_soft_age_range_in_pregnant_household_person_age_value_check.rb b/app/models/form/lettings/pages/females_in_soft_age_range_in_pregnant_household_person_age_value_check.rb index ddc8789f9..cb441bf4f 100644 --- a/app/models/form/lettings/pages/females_in_soft_age_range_in_pregnant_household_person_age_value_check.rb +++ b/app/models/form/lettings/pages/females_in_soft_age_range_in_pregnant_household_person_age_value_check.rb @@ -5,7 +5,7 @@ class Form::Lettings::Pages::FemalesInSoftAgeRangeInPregnantHouseholdPersonAgeVa @copy_key = "lettings.soft_validations.pregnancy_value_check.females_in_soft_age_range_in_pregnant_household_value_check" @depends_on = [ { - "female_in_pregnant_household_in_soft_validation_range?" => true, + "non_males_in_pregnant_household_in_soft_validation_range?" => true, "age#{person_index}_known" => 0, }, ] @@ -25,6 +25,10 @@ class Form::Lettings::Pages::FemalesInSoftAgeRangeInPregnantHouseholdPersonAgeVa end def interruption_screen_question_ids - %w[preg_occ sex1 sex2 sex3 sex4 sex5 sex6 sex7 sex8 age1 age2 age3 age4 age5 age6 age7 age8] + if form.start_year_2026_or_later? + %w[preg_occ age1 sexrab1 gender_same_as_sex1 age2 sexrab2 gender_same_as_sex2 age3 sexrab3 gender_same_as_sex3 age4 sexrab4 gender_same_as_sex4 age5 sexrab5 gender_same_as_sex5 age6 sexrab6 gender_same_as_sex6 age7 sexrab7 gender_same_as_sex7 age8 sexrab8 gender_same_as_sex8] + else + %w[preg_occ sex1 sex2 sex3 sex4 sex5 sex6 sex7 sex8 age1 age2 age3 age4 age5 age6 age7 age8] + end end end diff --git a/app/models/form/lettings/pages/females_in_soft_age_range_in_pregnant_household_person_value_check.rb b/app/models/form/lettings/pages/females_in_soft_age_range_in_pregnant_household_person_value_check.rb index 099bea5d9..662c31215 100644 --- a/app/models/form/lettings/pages/females_in_soft_age_range_in_pregnant_household_person_value_check.rb +++ b/app/models/form/lettings/pages/females_in_soft_age_range_in_pregnant_household_person_value_check.rb @@ -6,7 +6,7 @@ class Form::Lettings::Pages::FemalesInSoftAgeRangeInPregnantHouseholdPersonValue @depends_on = [ { - "female_in_pregnant_household_in_soft_validation_range?" => true, + "non_males_in_pregnant_household_in_soft_validation_range?" => true, "details_known_#{person_index}" => 0, }, ] @@ -26,6 +26,10 @@ class Form::Lettings::Pages::FemalesInSoftAgeRangeInPregnantHouseholdPersonValue end def interruption_screen_question_ids - %w[preg_occ sex1 sex2 sex3 sex4 sex5 sex6 sex7 sex8 age1 age2 age3 age4 age5 age6 age7 age8] + if form.start_year_2026_or_later? + %w[preg_occ age1 sexrab1 gender_same_as_sex1 age2 sexrab2 gender_same_as_sex2 age3 sexrab3 gender_same_as_sex3 age4 sexrab4 gender_same_as_sex4 age5 sexrab5 gender_same_as_sex5 age6 sexrab6 gender_same_as_sex6 age7 sexrab7 gender_same_as_sex7 age8 sexrab8 gender_same_as_sex8] + else + %w[preg_occ sex1 sex2 sex3 sex4 sex5 sex6 sex7 sex8 age1 age2 age3 age4 age5 age6 age7 age8] + end end end diff --git a/app/models/form/lettings/pages/females_in_soft_age_range_in_pregnant_household_value_check.rb b/app/models/form/lettings/pages/females_in_soft_age_range_in_pregnant_household_value_check.rb index 3822ec940..8e8df4df5 100644 --- a/app/models/form/lettings/pages/females_in_soft_age_range_in_pregnant_household_value_check.rb +++ b/app/models/form/lettings/pages/females_in_soft_age_range_in_pregnant_household_value_check.rb @@ -3,7 +3,7 @@ class Form::Lettings::Pages::FemalesInSoftAgeRangeInPregnantHouseholdValueCheck super @id = "females_in_soft_age_range_in_pregnant_household_value_check" @copy_key = "lettings.soft_validations.pregnancy_value_check.females_in_soft_age_range_in_pregnant_household_value_check" - @depends_on = [{ "female_in_pregnant_household_in_soft_validation_range?" => true }] + @depends_on = [{ "non_males_in_pregnant_household_in_soft_validation_range?" => true }] @title_text = { "translation" => "forms.#{form.start_date.year}.#{@copy_key}.title_text", "arguments" => [], @@ -19,6 +19,10 @@ class Form::Lettings::Pages::FemalesInSoftAgeRangeInPregnantHouseholdValueCheck end def interruption_screen_question_ids - %w[preg_occ sex1 sex2 sex3 sex4 sex5 sex6 sex7 sex8 age1 age2 age3 age4 age5 age6 age7 age8] + if form.start_year_2026_or_later? + %w[preg_occ age1 sexrab1 gender_same_as_sex1 age2 sexrab2 gender_same_as_sex2 age3 sexrab3 gender_same_as_sex3 age4 sexrab4 gender_same_as_sex4 age5 sexrab5 gender_same_as_sex5 age6 sexrab6 gender_same_as_sex6 age7 sexrab7 gender_same_as_sex7 age8 sexrab8 gender_same_as_sex8] + else + %w[preg_occ sex1 sex2 sex3 sex4 sex5 sex6 sex7 sex8 age1 age2 age3 age4 age5 age6 age7 age8] + end end end diff --git a/app/models/form/lettings/pages/no_females_pregnant_household_lead_age_value_check.rb b/app/models/form/lettings/pages/no_females_pregnant_household_lead_age_value_check.rb index 7e530a9ad..04e2531bb 100644 --- a/app/models/form/lettings/pages/no_females_pregnant_household_lead_age_value_check.rb +++ b/app/models/form/lettings/pages/no_females_pregnant_household_lead_age_value_check.rb @@ -19,6 +19,10 @@ class Form::Lettings::Pages::NoFemalesPregnantHouseholdLeadAgeValueCheck < ::For end def interruption_screen_question_ids - %w[preg_occ sex1 sex2 sex3 sex4 sex5 sex6 sex7 sex8] + if form.start_year_2026_or_later? + %w[preg_occ sexrab1 gender_same_as_sex1 sexrab2 gender_same_as_sex2 sexrab3 gender_same_as_sex3 sexrab4 gender_same_as_sex4 sexrab5 gender_same_as_sex5 sexrab6 gender_same_as_sex6 sexrab7 gender_same_as_sex7 sexrab8 gender_same_as_sex8] + else + %w[preg_occ sex1 sex2 sex3 sex4 sex5 sex6 sex7 sex8] + end end end diff --git a/app/models/form/lettings/pages/no_females_pregnant_household_lead_hhmemb_value_check.rb b/app/models/form/lettings/pages/no_females_pregnant_household_lead_hhmemb_value_check.rb index 47ac7493b..ff8ed743d 100644 --- a/app/models/form/lettings/pages/no_females_pregnant_household_lead_hhmemb_value_check.rb +++ b/app/models/form/lettings/pages/no_females_pregnant_household_lead_hhmemb_value_check.rb @@ -19,6 +19,10 @@ class Form::Lettings::Pages::NoFemalesPregnantHouseholdLeadHhmembValueCheck < :: end def interruption_screen_question_ids - %w[preg_occ sex1 sex2 sex3 sex4 sex5 sex6 sex7 sex8] + if form.start_year_2026_or_later? + %w[preg_occ sexrab1 gender_same_as_sex1 sexrab2 gender_same_as_sex2 sexrab3 gender_same_as_sex3 sexrab4 gender_same_as_sex4 sexrab5 gender_same_as_sex5 sexrab6 gender_same_as_sex6 sexrab7 gender_same_as_sex7 sexrab8 gender_same_as_sex8] + else + %w[preg_occ sex1 sex2 sex3 sex4 sex5 sex6 sex7 sex8] + end end end diff --git a/app/models/form/lettings/pages/no_females_pregnant_household_lead_value_check.rb b/app/models/form/lettings/pages/no_females_pregnant_household_lead_value_check.rb index edfe2c631..180caf034 100644 --- a/app/models/form/lettings/pages/no_females_pregnant_household_lead_value_check.rb +++ b/app/models/form/lettings/pages/no_females_pregnant_household_lead_value_check.rb @@ -19,6 +19,10 @@ class Form::Lettings::Pages::NoFemalesPregnantHouseholdLeadValueCheck < ::Form:: end def interruption_screen_question_ids - %w[preg_occ sex1 sex2 sex3 sex4 sex5 sex6 sex7 sex8] + if form.start_year_2026_or_later? + %w[preg_occ sexrab1 gender_same_as_sex1 sexrab2 gender_same_as_sex2 sexrab3 gender_same_as_sex3 sexrab4 gender_same_as_sex4 sexrab5 gender_same_as_sex5 sexrab6 gender_same_as_sex6 sexrab7 gender_same_as_sex7 sexrab8 gender_same_as_sex8] + else + %w[preg_occ sex1 sex2 sex3 sex4 sex5 sex6 sex7 sex8] + end end end diff --git a/app/models/form/lettings/pages/no_females_pregnant_household_person_age_value_check.rb b/app/models/form/lettings/pages/no_females_pregnant_household_person_age_value_check.rb index 5e808b853..3eb4edd44 100644 --- a/app/models/form/lettings/pages/no_females_pregnant_household_person_age_value_check.rb +++ b/app/models/form/lettings/pages/no_females_pregnant_household_person_age_value_check.rb @@ -20,6 +20,10 @@ class Form::Lettings::Pages::NoFemalesPregnantHouseholdPersonAgeValueCheck < ::F end def interruption_screen_question_ids - %w[preg_occ sex1 sex2 sex3 sex4 sex5 sex6 sex7 sex8] + if form.start_year_2026_or_later? + %w[preg_occ sexrab1 gender_same_as_sex1 sexrab2 gender_same_as_sex2 sexrab3 gender_same_as_sex3 sexrab4 gender_same_as_sex4 sexrab5 gender_same_as_sex5 sexrab6 gender_same_as_sex6 sexrab7 gender_same_as_sex7 sexrab8 gender_same_as_sex8] + else + %w[preg_occ sex1 sex2 sex3 sex4 sex5 sex6 sex7 sex8] + end end end diff --git a/app/models/form/lettings/pages/no_females_pregnant_household_person_value_check.rb b/app/models/form/lettings/pages/no_females_pregnant_household_person_value_check.rb index fb77eec18..96def3c34 100644 --- a/app/models/form/lettings/pages/no_females_pregnant_household_person_value_check.rb +++ b/app/models/form/lettings/pages/no_females_pregnant_household_person_value_check.rb @@ -20,6 +20,10 @@ class Form::Lettings::Pages::NoFemalesPregnantHouseholdPersonValueCheck < ::Form end def interruption_screen_question_ids - %w[preg_occ sex1 sex2 sex3 sex4 sex5 sex6 sex7 sex8] + if form.start_year_2026_or_later? + %w[preg_occ sexrab1 gender_same_as_sex1 sexrab2 gender_same_as_sex2 sexrab3 gender_same_as_sex3 sexrab4 gender_same_as_sex4 sexrab5 gender_same_as_sex5 sexrab6 gender_same_as_sex6 sexrab7 gender_same_as_sex7 sexrab8 gender_same_as_sex8] + else + %w[preg_occ sex1 sex2 sex3 sex4 sex5 sex6 sex7 sex8] + end end end diff --git a/app/models/form/lettings/pages/no_females_pregnant_household_value_check.rb b/app/models/form/lettings/pages/no_females_pregnant_household_value_check.rb index bce8a87ae..f2d620ee4 100644 --- a/app/models/form/lettings/pages/no_females_pregnant_household_value_check.rb +++ b/app/models/form/lettings/pages/no_females_pregnant_household_value_check.rb @@ -19,6 +19,10 @@ class Form::Lettings::Pages::NoFemalesPregnantHouseholdValueCheck < ::Form::Page end def interruption_screen_question_ids - %w[preg_occ sex1 sex2 sex3 sex4 sex5 sex6 sex7 sex8] + if form.start_year_2026_or_later? + %w[preg_occ sexrab1 gender_same_as_sex1 sexrab2 gender_same_as_sex2 sexrab3 gender_same_as_sex3 sexrab4 gender_same_as_sex4 sexrab5 gender_same_as_sex5 sexrab6 gender_same_as_sex6 sexrab7 gender_same_as_sex7 sexrab8 gender_same_as_sex8] + else + %w[preg_occ sex1 sex2 sex3 sex4 sex5 sex6 sex7 sex8] + end end end diff --git a/app/models/validations/soft_validations.rb b/app/models/validations/soft_validations.rb index 35436dc32..5dff25b47 100644 --- a/app/models/validations/soft_validations.rb +++ b/app/models/validations/soft_validations.rb @@ -76,29 +76,11 @@ module Validations::SoftValidations end def all_male_tenants_in_a_pregnant_household? - all_male_tenants_in_the_household? && all_tenants_gender_information_completed? && preg_occ == 1 + all_tenants_gender_information_completed? && all_male_tenants_in_the_household? && preg_occ == 1 end - def female_in_pregnant_household_in_soft_validation_range? - all_tenants_age_and_gender_information_completed? && females_in_the_household? && !females_in_age_range(16, 50) && preg_occ == 1 - end - - def all_tenants_age_and_gender_information_completed? - return false if hhmemb.present? && hhmemb > 8 - - person_count = hhmemb || 8 - - (1..person_count).all? do |n| - public_send("sex#{n}").present? && public_send("age#{n}").present? && details_known_or_lead_tenant?(n) && public_send("age#{n}_known").present? && public_send("age#{n}_known").zero? - end - end - - def all_tenants_gender_information_completed? - person_count = hhmemb || 8 - - (1..person_count).all? do |n| - public_send("sex#{n}").present? && details_known_or_lead_tenant?(n) - end + def non_males_in_pregnant_household_in_soft_validation_range? + all_tenants_age_and_gender_information_completed? && non_males_in_the_household? && !any_non_male_in_expected_pregnancy_age_range(16, 50) && preg_occ == 1 end TWO_YEARS_IN_DAYS = 730 @@ -221,25 +203,52 @@ module Validations::SoftValidations private + def all_tenants_age_and_gender_information_completed? + return false if hhmemb.present? && hhmemb > 8 + return false unless all_tenants_gender_information_completed? + + person_count = hhmemb || 8 + + (1..person_count).all? do |n| + public_send("age#{n}").present? && public_send("age#{n}_known").present? && public_send("age#{n}_known").zero? + end + end + + def all_tenants_gender_information_completed? + person_count = hhmemb || 8 + + (1..person_count).all? do |n| + tenant_gender_information_completed?(n) + end + end + + def tenant_gender_information_completed?(tenant_number) + if form.start_year_2026_or_later? + public_send("sexrab#{tenant_number}").present? && public_send("gender_same_as_sex#{tenant_number}").present? && details_known_or_lead_tenant?(tenant_number) + else + public_send("sex#{tenant_number}").present? && details_known_or_lead_tenant?(tenant_number) + end + end + 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 any_non_male_in_expected_pregnancy_age_range(min, max) person_count = hhmemb || 8 (1..person_count).any? do |n| - public_send("sex#{n}") == "F" && public_send("age#{n}").present? && public_send("age#{n}").between?(min, max) + person_in_expected_pregnancy_age_range(n, min, max) && person_is_non_male(n) end end - def females_in_the_household? + def non_males_in_the_household? person_count = hhmemb || 8 (1..person_count).any? do |n| - public_send("sex#{n}") == "F" || public_send("sex#{n}").nil? + person_is_non_male(n) end end @@ -249,10 +258,36 @@ private person_count = hhmemb || 8 (1..person_count).all? do |n| - public_send("sex#{n}") == "M" + person_is_male(n) + end + end + + def person_is_male(person_number) + if form.start_year_2026_or_later? + sexrab = public_send("sexrab#{person_number}") + gender_same_as_sex = public_send("gender_same_as_sex#{person_number}") + + sexrab == "M" && gender_same_as_sex == 1 + else + public_send("sex#{person_number}") == "M" end end + def person_is_non_male(person_number) + if form.start_year_2026_or_later? + !person_is_male(person_number) + else + # non male wording only came later, originally was specific to female gender + public_send("sex#{person_number}") == "F" + end + end + + def person_in_expected_pregnancy_age_range(person_number, min, max) + age = public_send("age#{person_number}") + + age.between?(min, max) + end + def tenant_is_retired?(economic_status) economic_status == 5 end diff --git a/spec/models/form/lettings/pages/females_in_soft_age_range_in_pregnant_household_person_age_value_check_spec.rb b/spec/models/form/lettings/pages/females_in_soft_age_range_in_pregnant_household_person_age_value_check_spec.rb index 865fc6fd2..8446bf6f3 100644 --- a/spec/models/form/lettings/pages/females_in_soft_age_range_in_pregnant_household_person_age_value_check_spec.rb +++ b/spec/models/form/lettings/pages/females_in_soft_age_range_in_pregnant_household_person_age_value_check_spec.rb @@ -29,7 +29,7 @@ RSpec.describe Form::Lettings::Pages::FemalesInSoftAgeRangeInPregnantHouseholdPe [ { "age2_known" => 0, - "female_in_pregnant_household_in_soft_validation_range?" => true, + "non_males_in_pregnant_household_in_soft_validation_range?" => true, }, ], ) @@ -62,7 +62,7 @@ RSpec.describe Form::Lettings::Pages::FemalesInSoftAgeRangeInPregnantHouseholdPe [ { "age3_known" => 0, - "female_in_pregnant_household_in_soft_validation_range?" => true, + "non_males_in_pregnant_household_in_soft_validation_range?" => true, }, ], ) diff --git a/spec/models/form/lettings/pages/females_in_soft_age_range_in_pregnant_household_person_value_check_spec.rb b/spec/models/form/lettings/pages/females_in_soft_age_range_in_pregnant_household_person_value_check_spec.rb index 8ce2e5451..d088d20ba 100644 --- a/spec/models/form/lettings/pages/females_in_soft_age_range_in_pregnant_household_person_value_check_spec.rb +++ b/spec/models/form/lettings/pages/females_in_soft_age_range_in_pregnant_household_person_value_check_spec.rb @@ -29,7 +29,7 @@ RSpec.describe Form::Lettings::Pages::FemalesInSoftAgeRangeInPregnantHouseholdPe [ { "details_known_2" => 0, - "female_in_pregnant_household_in_soft_validation_range?" => true, + "non_males_in_pregnant_household_in_soft_validation_range?" => true, }, ], ) @@ -62,7 +62,7 @@ RSpec.describe Form::Lettings::Pages::FemalesInSoftAgeRangeInPregnantHouseholdPe [ { "details_known_3" => 0, - "female_in_pregnant_household_in_soft_validation_range?" => true, + "non_males_in_pregnant_household_in_soft_validation_range?" => true, }, ], ) diff --git a/spec/models/validations/soft_validations_spec.rb b/spec/models/validations/soft_validations_spec.rb index 6c39824c5..4e582bde9 100644 --- a/spec/models/validations/soft_validations_spec.rb +++ b/spec/models/validations/soft_validations_spec.rb @@ -1,8 +1,11 @@ require "rails_helper" RSpec.describe Validations::SoftValidations do - let(:organisation) { FactoryBot.build(:organisation, provider_type: "PRP", id: 123) } - let(:record) { FactoryBot.build(:lettings_log, owning_organisation: organisation) } + include CollectionTimeHelper + + let(:organisation) { build(:organisation, provider_type: "PRP", id: 123) } + let(:start_year) { current_collection_start_year } + let(:record) { build(:lettings_log, owning_organisation: organisation, startdate: collection_start_date_for_year(start_year)) } describe "rent min max validations" do before do @@ -153,98 +156,275 @@ RSpec.describe Validations::SoftValidations do end describe "pregnancy soft validations" do - context "when all tenants are male" do - it "shows the interruption screen" do - record.age1 = 43 - record.sex1 = "M" - record.preg_occ = 1 - record.hhmemb = 1 - record.age1_known = 0 - expect(record.all_male_tenants_in_a_pregnant_household?).to be true + context "when 2025" do + let(:start_year) { 2025 } + + context "when all tenants are male" do + it "shows the interruption screen" do + record.age1 = 43 + record.sex1 = "M" + record.preg_occ = 1 + record.hhmemb = 1 + record.age1_known = 0 + expect(record.all_male_tenants_in_a_pregnant_household?).to be true + end end - end - context "when there all tenants are male and age of tenants is unknown" do - it "shows the interruption screen" do - record.sex1 = "M" - record.preg_occ = 1 - record.hhmemb = 1 - record.age1_known = 1 - expect(record.all_male_tenants_in_a_pregnant_household?).to be true + context "when there all tenants are male and age of tenants is unknown" do + it "shows the interruption screen" do + record.sex1 = "M" + record.preg_occ = 1 + record.hhmemb = 1 + record.age1_known = 1 + expect(record.all_male_tenants_in_a_pregnant_household?).to be true + end end - end - context "when all tenants are male and household members are over 8" do - it "does not show the interruption screen" do - (1..8).each do |n| - record.send("sex#{n}=", "M") - record.send("age#{n}=", 30) - record.send("age#{n}_known=", 0) - record.send("details_known_#{n}=", 0) unless n == 1 + context "when all tenants are male and household members are over 8" do + it "does not show the interruption screen" do + (1..8).each do |n| + record.send("sex#{n}=", "M") + record.send("age#{n}=", 30) + record.send("age#{n}_known=", 0) + record.send("details_known_#{n}=", 0) unless n == 1 + end + record.preg_occ = 1 + record.hhmemb = 9 + expect(record.all_male_tenants_in_a_pregnant_household?).to be false end - record.preg_occ = 1 - record.hhmemb = 9 - expect(record.all_male_tenants_in_a_pregnant_household?).to be false end - end - context "when female tenants are under 16" do - it "shows the interruption screen" do - record.age2 = 14 - record.sex2 = "F" - record.preg_occ = 1 - record.hhmemb = 2 - record.details_known_2 = 0 - record.age2_known = 0 - record.age1 = 18 - record.sex1 = "M" - record.age1_known = 0 - expect(record.female_in_pregnant_household_in_soft_validation_range?).to be true + context "when female tenants are under 16" do + it "shows the interruption screen" do + record.age2 = 14 + record.sex2 = "F" + record.preg_occ = 1 + record.hhmemb = 2 + record.details_known_2 = 0 + record.age2_known = 0 + record.age1 = 18 + record.sex1 = "M" + record.age1_known = 0 + expect(record.non_males_in_pregnant_household_in_soft_validation_range?).to be true + end end - end - context "when female tenants are over 50" do - it "shows the interruption screen" do - record.age1 = 54 - record.sex1 = "F" - record.preg_occ = 1 - record.hhmemb = 1 - record.age1_known = 0 - expect(record.female_in_pregnant_household_in_soft_validation_range?).to be true + context "when female tenants are over 50" do + it "shows the interruption screen" do + record.age1 = 54 + record.sex1 = "F" + record.preg_occ = 1 + record.hhmemb = 1 + record.age1_known = 0 + expect(record.non_males_in_pregnant_household_in_soft_validation_range?).to be true + end + end + + context "when non-binary tenants are under 16" do + it "does not show the interruption screen" do + record.age2 = 14 + record.sex2 = "X" + record.preg_occ = 1 + record.hhmemb = 2 + record.details_known_2 = 0 + record.age2_known = 0 + record.age1 = 18 + record.sex1 = "M" + record.age1_known = 0 + expect(record.non_males_in_pregnant_household_in_soft_validation_range?).to be false + end + end + + context "when non-binary tenants are over 50" do + it "does not show the interruption screen" do + record.age1 = 54 + record.sex1 = "X" + record.preg_occ = 1 + record.hhmemb = 1 + record.age1_known = 0 + expect(record.non_males_in_pregnant_household_in_soft_validation_range?).to be false + end + end + + context "when female tenants are outside of soft validation ranges" do + it "does not show the interruption screen" do + record.age1 = 44 + record.sex1 = "F" + record.preg_occ = 1 + record.hhmemb = 1 + expect(record.all_male_tenants_in_a_pregnant_household?).to be false + expect(record.non_males_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.preg_occ = 1 + record.hhmemb = 2 + expect(record.all_male_tenants_in_a_pregnant_household?).to be false + expect(record.non_males_in_pregnant_household_in_soft_validation_range?).to be false + end + end + + context "when number of household members is over 8" do + it "does not show the interruption screen" do + (1..8).each do |n| + record.send("sex#{n}=", "F") + record.send("age#{n}=", 50) + record.send("age#{n}_known=", 0) + record.send("details_known_#{n}=", 0) unless n == 1 + end + record.preg_occ = 1 + record.hhmemb = 9 + expect(record.non_males_in_pregnant_household_in_soft_validation_range?).to be false + end end end - context "when female tenants are outside of soft validation ranges" do - it "does not show the interruption screen" do - record.age1 = 44 - record.sex1 = "F" + context "when 2026" do + let(:start_year) { 2026 } + + before do + record.age1 = 43 + record.age1_known = 0 record.preg_occ = 1 record.hhmemb = 1 - expect(record.all_male_tenants_in_a_pregnant_household?).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.preg_occ = 1 - record.hhmemb = 2 - expect(record.all_male_tenants_in_a_pregnant_household?).to be false - expect(record.female_in_pregnant_household_in_soft_validation_range?).to be false + context "when all tenants are male" do + before do + record.sexrab1 = "M" + record.gender_same_as_sex1 = 1 + end + + it "shows the interruption screen" do + expect(record.all_male_tenants_in_a_pregnant_household?).to be true + end end - end - context "when number of household members is over 8" do - it "does not show the interruption screen" do - (1..8).each do |n| - record.send("sex#{n}=", "F") - record.send("age#{n}=", 50) - record.send("age#{n}_known=", 0) - record.send("details_known_#{n}=", 0) unless n == 1 + context "when there all tenants are male and age of tenants is unknown" do + before do + record.sexrab1 = "M" + record.gender_same_as_sex1 = 1 + record.age1_known = 1 + end + + it "shows the interruption screen" do + expect(record.all_male_tenants_in_a_pregnant_household?).to be true + end + end + + context "when all tenants are male and household members are over 8" do + before do + (1..8).each do |n| + record.send("sexrab#{n}=", "M") + record.send("gender_same_as_sex#{n}=", 1) + record.send("age#{n}=", 30) + record.send("age#{n}_known=", 0) + record.send("details_known_#{n}=", 0) unless n == 1 + end + record.preg_occ = 1 + record.hhmemb = 9 + end + + it "does not show the interruption screen" do + expect(record.all_male_tenants_in_a_pregnant_household?).to be false + end + end + + context "when female tenants are under 16" do + before do + record.age1 = 12 + record.sexrab1 = "F" + record.gender_same_as_sex1 = 1 + end + + it "shows the interruption screen" do + expect(record.non_males_in_pregnant_household_in_soft_validation_range?).to be true + end + end + + context "when female tenants are over 50" do + before do + record.age1 = 60 + record.sexrab1 = "F" + record.gender_same_as_sex1 = 1 + end + + it "shows the interruption screen" do + expect(record.non_males_in_pregnant_household_in_soft_validation_range?).to be true + end + end + + context "when non binary tenants are under 16" do + before do + record.age1 = 12 + record.sexrab1 = "M" + record.gender_same_as_sex1 = 2 + record.gender_description1 = "Non-binary" + end + + it "shows the interruption screen" do + expect(record.non_males_in_pregnant_household_in_soft_validation_range?).to be true + end + end + + context "when non binary tenants are over 50" do + before do + record.age1 = 60 + record.sexrab1 = "M" + record.gender_same_as_sex1 = 2 + record.gender_description1 = "Non-binary" + end + + it "shows the interruption screen" do + expect(record.non_males_in_pregnant_household_in_soft_validation_range?).to be true + end + end + + context "when female tenants are outside of soft validation ranges" do + before do + record.age1 = 30 + record.sexrab1 = "F" + record.gender_same_as_sex1 = 1 + end + + it "does not show the interruption screen" do + expect(record.non_males_in_pregnant_household_in_soft_validation_range?).to be false + end + end + + context "when the information about the tenants is not given" do + before do + record.age1 = nil + record.age1_known = nil + record.sexrab1 = nil + record.gender_same_as_sex1 = nil + record.preg_occ = 1 + record.hhmemb = 1 + end + + it "does not show the interruption screen" do + expect(record.non_males_in_pregnant_household_in_soft_validation_range?).to be false + end + end + + context "when number of household members is over 8" do + before do + (1..8).each do |n| + record.send("sexrab#{n}=", "F") + record.send("gender_same_as_sex#{n}=", 1) + record.send("age#{n}=", 30) + record.send("age#{n}_known=", 0) + record.send("details_known_#{n}=", 0) unless n == 1 + end + record.preg_occ = 1 + record.hhmemb = 9 + end + + it "does not show the interruption screen" do + expect(record.non_males_in_pregnant_household_in_soft_validation_range?).to be false end - record.preg_occ = 1 - record.hhmemb = 9 - expect(record.female_in_pregnant_household_in_soft_validation_range?).to be false end end end