Browse Source

Merge 41b2b00003 into 3df65b8998

pull/3183/merge
Samuel Young 1 day ago committed by GitHub
parent
commit
f881fde466
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 8
      app/models/form/lettings/pages/females_in_soft_age_range_in_pregnant_household_lead_age_value_check.rb
  2. 8
      app/models/form/lettings/pages/females_in_soft_age_range_in_pregnant_household_lead_hhmemb_value_check.rb
  3. 8
      app/models/form/lettings/pages/females_in_soft_age_range_in_pregnant_household_lead_value_check.rb
  4. 8
      app/models/form/lettings/pages/females_in_soft_age_range_in_pregnant_household_person_age_value_check.rb
  5. 8
      app/models/form/lettings/pages/females_in_soft_age_range_in_pregnant_household_person_value_check.rb
  6. 8
      app/models/form/lettings/pages/females_in_soft_age_range_in_pregnant_household_value_check.rb
  7. 6
      app/models/form/lettings/pages/no_females_pregnant_household_lead_age_value_check.rb
  8. 6
      app/models/form/lettings/pages/no_females_pregnant_household_lead_hhmemb_value_check.rb
  9. 6
      app/models/form/lettings/pages/no_females_pregnant_household_lead_value_check.rb
  10. 6
      app/models/form/lettings/pages/no_females_pregnant_household_person_age_value_check.rb
  11. 6
      app/models/form/lettings/pages/no_females_pregnant_household_person_value_check.rb
  12. 6
      app/models/form/lettings/pages/no_females_pregnant_household_value_check.rb
  13. 87
      app/models/validations/soft_validations.rb
  14. 4
      spec/models/form/lettings/pages/females_in_soft_age_range_in_pregnant_household_person_age_value_check_spec.rb
  15. 4
      spec/models/form/lettings/pages/females_in_soft_age_range_in_pregnant_household_person_value_check_spec.rb
  16. 330
      spec/models/validations/soft_validations_spec.rb

8
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) super(id, hsh, subsection)
@id = "females_in_soft_age_range_in_pregnant_household_lead_age_value_check" @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" @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 = { @title_text = {
"translation" => "forms.#{form.start_date.year}.#{@copy_key}.title_text", "translation" => "forms.#{form.start_date.year}.#{@copy_key}.title_text",
"arguments" => [], "arguments" => [],
@ -19,6 +19,10 @@ class Form::Lettings::Pages::FemalesInSoftAgeRangeInPregnantHouseholdLeadAgeValu
end end
def interruption_screen_question_ids 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
end end

8
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) super(id, hsh, subsection)
@id = "females_in_soft_age_range_in_pregnant_household_lead_hhmemb_value_check" @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" @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 = { @title_text = {
"translation" => "forms.#{form.start_date.year}.#{@copy_key}.title_text", "translation" => "forms.#{form.start_date.year}.#{@copy_key}.title_text",
"arguments" => [], "arguments" => [],
@ -19,6 +19,10 @@ class Form::Lettings::Pages::FemalesInSoftAgeRangeInPregnantHouseholdLeadHhmembV
end end
def interruption_screen_question_ids 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
end end

8
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 super
@id = "females_in_soft_age_range_in_pregnant_household_lead_value_check" @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" @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 = { @title_text = {
"translation" => "forms.#{form.start_date.year}.#{@copy_key}.title_text", "translation" => "forms.#{form.start_date.year}.#{@copy_key}.title_text",
"arguments" => [], "arguments" => [],
@ -19,6 +19,10 @@ class Form::Lettings::Pages::FemalesInSoftAgeRangeInPregnantHouseholdLeadValueCh
end end
def interruption_screen_question_ids 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
end end

8
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" @copy_key = "lettings.soft_validations.pregnancy_value_check.females_in_soft_age_range_in_pregnant_household_value_check"
@depends_on = [ @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, "age#{person_index}_known" => 0,
}, },
] ]
@ -25,6 +25,10 @@ class Form::Lettings::Pages::FemalesInSoftAgeRangeInPregnantHouseholdPersonAgeVa
end end
def interruption_screen_question_ids 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
end end

8
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 = [ @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, "details_known_#{person_index}" => 0,
}, },
] ]
@ -26,6 +26,10 @@ class Form::Lettings::Pages::FemalesInSoftAgeRangeInPregnantHouseholdPersonValue
end end
def interruption_screen_question_ids 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
end end

8
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 super
@id = "females_in_soft_age_range_in_pregnant_household_value_check" @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" @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 = { @title_text = {
"translation" => "forms.#{form.start_date.year}.#{@copy_key}.title_text", "translation" => "forms.#{form.start_date.year}.#{@copy_key}.title_text",
"arguments" => [], "arguments" => [],
@ -19,6 +19,10 @@ class Form::Lettings::Pages::FemalesInSoftAgeRangeInPregnantHouseholdValueCheck
end end
def interruption_screen_question_ids 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
end end

6
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 end
def interruption_screen_question_ids 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
end end

6
app/models/form/lettings/pages/no_females_pregnant_household_lead_hhmemb_value_check.rb

@ -19,6 +19,10 @@ class Form::Lettings::Pages::NoFemalesPregnantHouseholdLeadHhmembValueCheck < ::
end end
def interruption_screen_question_ids 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
end end

6
app/models/form/lettings/pages/no_females_pregnant_household_lead_value_check.rb

@ -19,6 +19,10 @@ class Form::Lettings::Pages::NoFemalesPregnantHouseholdLeadValueCheck < ::Form::
end end
def interruption_screen_question_ids 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
end end

6
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 end
def interruption_screen_question_ids 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
end end

6
app/models/form/lettings/pages/no_females_pregnant_household_person_value_check.rb

@ -20,6 +20,10 @@ class Form::Lettings::Pages::NoFemalesPregnantHouseholdPersonValueCheck < ::Form
end end
def interruption_screen_question_ids 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
end end

6
app/models/form/lettings/pages/no_females_pregnant_household_value_check.rb

@ -19,6 +19,10 @@ class Form::Lettings::Pages::NoFemalesPregnantHouseholdValueCheck < ::Form::Page
end end
def interruption_screen_question_ids 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
end end

87
app/models/validations/soft_validations.rb

@ -76,29 +76,11 @@ module Validations::SoftValidations
end end
def all_male_tenants_in_a_pregnant_household? 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 end
def female_in_pregnant_household_in_soft_validation_range? def non_males_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 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
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
end end
TWO_YEARS_IN_DAYS = 730 TWO_YEARS_IN_DAYS = 730
@ -221,25 +203,52 @@ module Validations::SoftValidations
private 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) def details_known_or_lead_tenant?(tenant_number)
return true if tenant_number == 1 return true if tenant_number == 1
public_send("details_known_#{tenant_number}").zero? public_send("details_known_#{tenant_number}").zero?
end end
def females_in_age_range(min, max) def any_non_male_in_expected_pregnancy_age_range(min, max)
person_count = hhmemb || 8 person_count = hhmemb || 8
(1..person_count).any? do |n| (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
end end
def females_in_the_household? def non_males_in_the_household?
person_count = hhmemb || 8 person_count = hhmemb || 8
(1..person_count).any? do |n| (1..person_count).any? do |n|
public_send("sex#{n}") == "F" || public_send("sex#{n}").nil? person_is_non_male(n)
end end
end end
@ -249,10 +258,36 @@ private
person_count = hhmemb || 8 person_count = hhmemb || 8
(1..person_count).all? do |n| (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
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) def tenant_is_retired?(economic_status)
economic_status == 5 economic_status == 5
end end

4
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, "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, "age3_known" => 0,
"female_in_pregnant_household_in_soft_validation_range?" => true, "non_males_in_pregnant_household_in_soft_validation_range?" => true,
}, },
], ],
) )

4
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, "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, "details_known_3" => 0,
"female_in_pregnant_household_in_soft_validation_range?" => true, "non_males_in_pregnant_household_in_soft_validation_range?" => true,
}, },
], ],
) )

330
spec/models/validations/soft_validations_spec.rb

@ -1,8 +1,11 @@
require "rails_helper" require "rails_helper"
RSpec.describe Validations::SoftValidations do RSpec.describe Validations::SoftValidations do
let(:organisation) { FactoryBot.build(:organisation, provider_type: "PRP", id: 123) } include CollectionTimeHelper
let(:record) { FactoryBot.build(:lettings_log, owning_organisation: organisation) }
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 describe "rent min max validations" do
before do before do
@ -153,98 +156,275 @@ RSpec.describe Validations::SoftValidations do
end end
describe "pregnancy soft validations" do describe "pregnancy soft validations" do
context "when all tenants are male" do context "when 2025" do
it "shows the interruption screen" do let(:start_year) { 2025 }
record.age1 = 43
record.sex1 = "M" context "when all tenants are male" do
record.preg_occ = 1 it "shows the interruption screen" do
record.hhmemb = 1 record.age1 = 43
record.age1_known = 0 record.sex1 = "M"
expect(record.all_male_tenants_in_a_pregnant_household?).to be true 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
end
context "when there all tenants are male and age of tenants is unknown" do context "when there all tenants are male and age of tenants is unknown" do
it "shows the interruption screen" do it "shows the interruption screen" do
record.sex1 = "M" record.sex1 = "M"
record.preg_occ = 1 record.preg_occ = 1
record.hhmemb = 1 record.hhmemb = 1
record.age1_known = 1 record.age1_known = 1
expect(record.all_male_tenants_in_a_pregnant_household?).to be true expect(record.all_male_tenants_in_a_pregnant_household?).to be true
end
end end
end
context "when all tenants are male and household members are over 8" do context "when all tenants are male and household members are over 8" do
it "does not show the interruption screen" do it "does not show the interruption screen" do
(1..8).each do |n| (1..8).each do |n|
record.send("sex#{n}=", "M") record.send("sex#{n}=", "M")
record.send("age#{n}=", 30) record.send("age#{n}=", 30)
record.send("age#{n}_known=", 0) record.send("age#{n}_known=", 0)
record.send("details_known_#{n}=", 0) unless n == 1 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 end
record.preg_occ = 1
record.hhmemb = 9
expect(record.all_male_tenants_in_a_pregnant_household?).to be false
end end
end
context "when female tenants are under 16" do context "when female tenants are under 16" do
it "shows the interruption screen" do it "shows the interruption screen" do
record.age2 = 14 record.age2 = 14
record.sex2 = "F" record.sex2 = "F"
record.preg_occ = 1 record.preg_occ = 1
record.hhmemb = 2 record.hhmemb = 2
record.details_known_2 = 0 record.details_known_2 = 0
record.age2_known = 0 record.age2_known = 0
record.age1 = 18 record.age1 = 18
record.sex1 = "M" record.sex1 = "M"
record.age1_known = 0 record.age1_known = 0
expect(record.female_in_pregnant_household_in_soft_validation_range?).to be true expect(record.non_males_in_pregnant_household_in_soft_validation_range?).to be true
end
end end
end
context "when female tenants are over 50" do context "when female tenants are over 50" do
it "shows the interruption screen" do it "shows the interruption screen" do
record.age1 = 54 record.age1 = 54
record.sex1 = "F" record.sex1 = "F"
record.preg_occ = 1 record.preg_occ = 1
record.hhmemb = 1 record.hhmemb = 1
record.age1_known = 0 record.age1_known = 0
expect(record.female_in_pregnant_household_in_soft_validation_range?).to be true 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
end end
context "when female tenants are outside of soft validation ranges" do context "when 2026" do
it "does not show the interruption screen" do let(:start_year) { 2026 }
record.age1 = 44
record.sex1 = "F" before do
record.age1 = 43
record.age1_known = 0
record.preg_occ = 1 record.preg_occ = 1
record.hhmemb = 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
end
context "when the information about the tenants is not given" do context "when all tenants are male" do
it "does not show the interruption screen" do before do
record.preg_occ = 1 record.sexrab1 = "M"
record.hhmemb = 2 record.gender_same_as_sex1 = 1
expect(record.all_male_tenants_in_a_pregnant_household?).to be false end
expect(record.female_in_pregnant_household_in_soft_validation_range?).to be false
it "shows the interruption screen" do
expect(record.all_male_tenants_in_a_pregnant_household?).to be true
end
end end
end
context "when number of household members is over 8" do context "when there all tenants are male and age of tenants is unknown" do
it "does not show the interruption screen" do before do
(1..8).each do |n| record.sexrab1 = "M"
record.send("sex#{n}=", "F") record.gender_same_as_sex1 = 1
record.send("age#{n}=", 50) record.age1_known = 1
record.send("age#{n}_known=", 0) end
record.send("details_known_#{n}=", 0) unless n == 1
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 end
record.preg_occ = 1
record.hhmemb = 9
expect(record.female_in_pregnant_household_in_soft_validation_range?).to be false
end end
end end
end end

Loading…
Cancel
Save