Browse Source

Merge branch 'main' into CLDC-4119-amend-lettings-duplicate-log-check

CLDC-4119-amend-lettings-duplicate-log-check
Samuel Young 2 days ago committed by GitHub
parent
commit
0e6edb6e54
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 2
      app/models/form/lettings/pages/females_in_soft_age_range_in_pregnant_household_lead_age_value_check.rb
  2. 2
      app/models/form/lettings/pages/females_in_soft_age_range_in_pregnant_household_lead_hhmemb_value_check.rb
  3. 2
      app/models/form/lettings/pages/females_in_soft_age_range_in_pregnant_household_lead_value_check.rb
  4. 2
      app/models/form/lettings/pages/females_in_soft_age_range_in_pregnant_household_person_age_value_check.rb
  5. 2
      app/models/form/lettings/pages/females_in_soft_age_range_in_pregnant_household_person_value_check.rb
  6. 2
      app/models/form/lettings/pages/females_in_soft_age_range_in_pregnant_household_value_check.rb
  7. 24
      app/models/form/lettings/pages/no_household_member_likely_to_be_pregnant_check.rb
  8. 25
      app/models/form/lettings/subsections/household_characteristics.rb
  9. 5
      app/models/form/lettings/subsections/household_needs.rb
  10. 91
      app/models/validations/soft_validations.rb
  11. 16
      app/services/bulk_upload/lettings/year2026/row_parser.rb
  12. 36
      config/forms/2021_2022.json
  13. 36
      config/forms/2022_2023.json
  14. 4
      config/locales/forms/2026/lettings/soft_validations.en.yml
  15. 4
      spec/models/form/lettings/pages/females_in_soft_age_range_in_pregnant_household_person_age_value_check_spec.rb
  16. 4
      spec/models/form/lettings/pages/females_in_soft_age_range_in_pregnant_household_person_value_check_spec.rb
  17. 51
      spec/models/form/lettings/subsections/household_characteristics_spec.rb
  18. 3
      spec/models/form/lettings/subsections/household_needs_spec.rb
  19. 330
      spec/models/validations/soft_validations_spec.rb
  20. 14
      spec/services/bulk_upload/lettings/year2026/row_parser_spec.rb

2
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_not_in_pregnancy_range?" => true }]
@title_text = {
"translation" => "forms.#{form.start_date.year}.#{@copy_key}.title_text",
"arguments" => [],

2
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_not_in_pregnancy_range?" => true }]
@title_text = {
"translation" => "forms.#{form.start_date.year}.#{@copy_key}.title_text",
"arguments" => [],

2
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_not_in_pregnancy_range?" => true }]
@title_text = {
"translation" => "forms.#{form.start_date.year}.#{@copy_key}.title_text",
"arguments" => [],

2
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_not_in_pregnancy_range?" => true,
"age#{person_index}_known" => 0,
},
]

2
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_not_in_pregnancy_range?" => true,
"details_known_#{person_index}" => 0,
},
]

2
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_not_in_pregnancy_range?" => true }]
@title_text = {
"translation" => "forms.#{form.start_date.year}.#{@copy_key}.title_text",
"arguments" => [],

24
app/models/form/lettings/pages/no_household_member_likely_to_be_pregnant_check.rb

@ -0,0 +1,24 @@
class Form::Lettings::Pages::NoHouseholdMemberLikelyToBePregnantCheck < ::Form::Page
def initialize(id, hsh, subsection, person_index: 0)
super(id, hsh, subsection)
@copy_key = "lettings.soft_validations.pregnancy_value_check.no_household_member_likely_to_be_pregnant_check"
@depends_on = [{ "no_household_member_likely_to_be_pregnant?" => true }]
@title_text = {
"translation" => "forms.#{form.start_date.year}.#{@copy_key}.title_text",
"arguments" => [],
}
@informative_text = {
"translation" => "forms.#{form.start_date.year}.#{@copy_key}.informative_text",
"arguments" => [],
}
@person_index = person_index
end
def questions
@questions ||= [Form::Lettings::Questions::PregnancyValueCheck.new(nil, nil, self, person_index: @person_index)]
end
def interruption_screen_question_ids
%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]
end
end

25
app/models/form/lettings/subsections/household_characteristics.rb

@ -10,18 +10,21 @@ class Form::Lettings::Subsections::HouseholdCharacteristics < ::Form::Subsection
@pages ||= [
(Form::Lettings::Pages::Declaration.new(nil, nil, self) unless form.start_year_2024_or_later?),
Form::Lettings::Pages::HouseholdMembers.new(nil, nil, self),
Form::Lettings::Pages::NoFemalesPregnantHouseholdLeadHhmembValueCheck.new(nil, nil, self),
Form::Lettings::Pages::FemalesInSoftAgeRangeInPregnantHouseholdLeadHhmembValueCheck.new(nil, nil, self),
(Form::Lettings::Pages::NoFemalesPregnantHouseholdLeadHhmembValueCheck.new(nil, nil, self) unless form.start_year_2026_or_later?),
(Form::Lettings::Pages::FemalesInSoftAgeRangeInPregnantHouseholdLeadHhmembValueCheck.new(nil, nil, self) unless form.start_year_2026_or_later?),
(Form::Lettings::Pages::NoHouseholdMemberLikelyToBePregnantCheck.new("no_household_member_likely_to_be_pregnant_hhmemb_check", nil, self) if form.start_year_2026_or_later?),
Form::Lettings::Pages::LeadTenantAge.new(nil, nil, self),
Form::Lettings::Pages::NoFemalesPregnantHouseholdLeadAgeValueCheck.new(nil, nil, self),
Form::Lettings::Pages::FemalesInSoftAgeRangeInPregnantHouseholdLeadAgeValueCheck.new(nil, nil, self),
(Form::Lettings::Pages::NoFemalesPregnantHouseholdLeadAgeValueCheck.new(nil, nil, self) unless form.start_year_2026_or_later?),
(Form::Lettings::Pages::FemalesInSoftAgeRangeInPregnantHouseholdLeadAgeValueCheck.new(nil, nil, self) unless form.start_year_2026_or_later?),
(Form::Lettings::Pages::NoHouseholdMemberLikelyToBePregnantCheck.new("no_household_member_likely_to_be_pregnant_lead_age_check", nil, self) if form.start_year_2026_or_later?),
Form::Lettings::Pages::LeadTenantUnderRetirementValueCheck.new("age_lead_tenant_under_retirement_value_check", nil, self),
Form::Lettings::Pages::LeadTenantOverRetirementValueCheck.new("age_lead_tenant_over_retirement_value_check", nil, self),
(Form::Lettings::Pages::LeadTenantSexRegisteredAtBirth.new(nil, nil, self) if form.start_year_2026_or_later?),
(Form::Lettings::Pages::LeadTenantGenderSameAsSex.new(nil, nil, self) if form.start_year_2026_or_later?),
Form::Lettings::Pages::LeadTenantGenderIdentity.new(nil, nil, self),
Form::Lettings::Pages::NoFemalesPregnantHouseholdLeadValueCheck.new(nil, nil, self),
Form::Lettings::Pages::FemalesInSoftAgeRangeInPregnantHouseholdLeadValueCheck.new(nil, nil, self),
(Form::Lettings::Pages::NoFemalesPregnantHouseholdLeadValueCheck.new(nil, nil, self) unless form.start_year_2026_or_later?),
(Form::Lettings::Pages::FemalesInSoftAgeRangeInPregnantHouseholdLeadValueCheck.new(nil, nil, self) unless form.start_year_2026_or_later?),
(Form::Lettings::Pages::NoHouseholdMemberLikelyToBePregnantCheck.new("no_household_member_likely_to_be_pregnant_lead_check", nil, self, person_index: 1) if form.start_year_2026_or_later?),
Form::Lettings::Pages::LeadTenantOverRetirementValueCheck.new("gender_lead_tenant_over_retirement_value_check", nil, self),
Form::Lettings::Pages::LeadTenantEthnicGroup.new(nil, nil, self),
Form::Lettings::Pages::LeadTenantEthnicBackgroundArab.new(nil, nil, self),
@ -52,16 +55,18 @@ class Form::Lettings::Subsections::HouseholdCharacteristics < ::Form::Subsection
(Form::Lettings::Pages::PartnerUnder16ValueCheck.new("relationship_#{person_index}_partner_under_16_value_check", nil, self, person_index:) if form.start_year_2024_or_later? && !form.start_year_2026_or_later?),
(Form::Lettings::Pages::MultiplePartnersValueCheck.new("relationship_#{person_index}_multiple_partners_value_check", nil, self, person_index:) if form.start_year_2024_or_later?),
(Form::Lettings::Pages::PersonAge.new(nil, nil, self, person_index:) unless form.start_year_2026_or_later?),
Form::Lettings::Pages::NoFemalesPregnantHouseholdPersonAgeValueCheck.new(nil, nil, self, person_index:),
Form::Lettings::Pages::FemalesInSoftAgeRangeInPregnantHouseholdPersonAgeValueCheck.new(nil, nil, self, person_index:),
(Form::Lettings::Pages::NoFemalesPregnantHouseholdPersonAgeValueCheck.new(nil, nil, self, person_index:) unless form.start_year_2026_or_later?),
(Form::Lettings::Pages::FemalesInSoftAgeRangeInPregnantHouseholdPersonAgeValueCheck.new(nil, nil, self, person_index:) unless form.start_year_2026_or_later?),
(Form::Lettings::Pages::NoHouseholdMemberLikelyToBePregnantCheck.new("no_household_member_likely_to_be_pregnant_person_age_#{person_index}_check", nil, self, person_index:) if form.start_year_2026_or_later?),
Form::Lettings::Pages::PersonUnderRetirementValueCheck.new("age_#{person_index}_under_retirement_value_check", nil, self, person_index:),
Form::Lettings::Pages::PersonOverRetirementValueCheck.new("age_#{person_index}_over_retirement_value_check", nil, self, person_index:),
(Form::Lettings::Pages::PartnerUnder16ValueCheck.new("age_#{person_index}_partner_under_16_value_check", nil, self, person_index:) if form.start_year_2024_or_later? && !form.start_year_2026_or_later?),
(Form::Lettings::Pages::PersonSexRegisteredAtBirth.new(nil, nil, self, person_index:) if form.start_year_2026_or_later?),
(Form::Lettings::Pages::PersonGenderSameAsSex.new(nil, nil, self, person_index:) if form.start_year_2026_or_later?),
Form::Lettings::Pages::PersonGenderIdentity.new(nil, nil, self, person_index:),
Form::Lettings::Pages::NoFemalesPregnantHouseholdPersonValueCheck.new(nil, nil, self, person_index:),
Form::Lettings::Pages::FemalesInSoftAgeRangeInPregnantHouseholdPersonValueCheck.new(nil, nil, self, person_index:),
(Form::Lettings::Pages::NoFemalesPregnantHouseholdPersonValueCheck.new(nil, nil, self, person_index:) unless form.start_year_2026_or_later?),
(Form::Lettings::Pages::FemalesInSoftAgeRangeInPregnantHouseholdPersonValueCheck.new(nil, nil, self, person_index:) unless form.start_year_2026_or_later?),
(Form::Lettings::Pages::NoHouseholdMemberLikelyToBePregnantCheck.new("no_household_member_likely_to_be_pregnant_person_#{person_index}_check", nil, self, person_index:) if form.start_year_2026_or_later?),
Form::Lettings::Pages::PersonOverRetirementValueCheck.new("gender_#{person_index}_over_retirement_value_check", nil, self, person_index:),
Form::Lettings::Pages::PersonWorkingSituation.new(nil, nil, self, person_index:),
Form::Lettings::Pages::PersonUnderRetirementValueCheck.new("working_situation_#{person_index}_under_retirement_value_check", nil, self, person_index:),

5
app/models/form/lettings/subsections/household_needs.rb

@ -12,8 +12,9 @@ class Form::Lettings::Subsections::HouseholdNeeds < ::Form::Subsection
Form::Lettings::Pages::ArmedForcesServing.new(nil, nil, self),
Form::Lettings::Pages::ArmedForcesInjured.new(nil, nil, self),
Form::Lettings::Pages::Pregnant.new("pregnant", nil, self),
Form::Lettings::Pages::NoFemalesPregnantHouseholdValueCheck.new(nil, nil, self),
Form::Lettings::Pages::FemalesInSoftAgeRangeInPregnantHouseholdValueCheck.new(nil, nil, self),
(Form::Lettings::Pages::NoFemalesPregnantHouseholdValueCheck.new(nil, nil, self) unless form.start_year_2026_or_later?),
(Form::Lettings::Pages::FemalesInSoftAgeRangeInPregnantHouseholdValueCheck.new(nil, nil, self) unless form.start_year_2026_or_later?),
(Form::Lettings::Pages::NoHouseholdMemberLikelyToBePregnantCheck.new("no_household_member_likely_to_be_pregnant_check", nil, self) if form.start_year_2026_or_later?),
Form::Lettings::Pages::AccessNeedsExist.new("access_needs_exist", nil, self),
Form::Lettings::Pages::TypeOfAccessNeeds.new(nil, nil, self),
Form::Lettings::Pages::HealthConditions.new("health_conditions", nil, self),

91
app/models/validations/soft_validations.rb

@ -75,30 +75,16 @@ module Validations::SoftValidations
end
end
def all_male_tenants_in_a_pregnant_household?
all_male_tenants_in_the_household? && all_tenants_gender_information_completed? && 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
def no_household_member_likely_to_be_pregnant?
all_male_tenants_in_a_pregnant_household? || non_males_in_pregnant_household_not_in_pregnancy_range?
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
def all_male_tenants_in_a_pregnant_household?
all_tenants_gender_information_completed? && all_male_tenants_in_the_household? && preg_occ == 1
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_not_in_pregnancy_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 +207,54 @@ 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?
return false if hhmemb.present? && hhmemb > 8
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 +264,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
# the "non-male" wording was introduced in the 26/27 collection year, before that this behavior was limited to female gender only
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

16
app/services/bulk_upload/lettings/year2026/row_parser.rb

@ -1262,6 +1262,22 @@ private
sexrab6: %i[field_135],
sexrab7: %i[field_136],
sexrab8: %i[field_137],
gender_same_as_sex1: %i[field_138],
gender_same_as_sex2: %i[field_140],
gender_same_as_sex3: %i[field_142],
gender_same_as_sex4: %i[field_144],
gender_same_as_sex5: %i[field_146],
gender_same_as_sex6: %i[field_148],
gender_same_as_sex7: %i[field_150],
gender_same_as_sex8: %i[field_152],
gender_description1: %i[field_139],
gender_description2: %i[field_141],
gender_description3: %i[field_143],
gender_description4: %i[field_145],
gender_description5: %i[field_147],
gender_description6: %i[field_149],
gender_description7: %i[field_151],
gender_description8: %i[field_153],
}.compact
end

36
config/forms/2021_2022.json

@ -1213,7 +1213,7 @@
"females_in_soft_age_range_in_pregnant_household_lead_hhmemb_value_check": {
"depends_on": [
{
"female_in_pregnant_household_in_soft_validation_range?": true
"non_males_in_pregnant_household_not_in_pregnancy_range?": true
}
],
"title_text": {
@ -1355,7 +1355,7 @@
"females_in_soft_age_range_in_pregnant_household_lead_age_value_check": {
"depends_on": [
{
"female_in_pregnant_household_in_soft_validation_range?": true
"non_males_in_pregnant_household_not_in_pregnancy_range?": true
}
],
"title_text": {
@ -1476,7 +1476,7 @@
"females_in_soft_age_range_in_pregnant_household_lead_value_check": {
"depends_on": [
{
"female_in_pregnant_household_in_soft_validation_range?": true
"non_males_in_pregnant_household_not_in_pregnancy_range?": true
}
],
"title_text": {
@ -2135,7 +2135,7 @@
"females_in_soft_age_range_in_pregnant_household_person_2_age_value_check": {
"depends_on": [
{
"female_in_pregnant_household_in_soft_validation_range?": true,
"non_males_in_pregnant_household_not_in_pregnancy_range?": true,
"age2_known": 0
}
],
@ -2258,7 +2258,7 @@
"females_in_soft_age_range_in_pregnant_household_person_2_value_check": {
"depends_on": [
{
"female_in_pregnant_household_in_soft_validation_range?": true,
"non_males_in_pregnant_household_not_in_pregnancy_range?": true,
"details_known_2": 0
}
],
@ -2670,7 +2670,7 @@
"females_in_soft_age_range_in_pregnant_household_person_3_age_value_check": {
"depends_on": [
{
"female_in_pregnant_household_in_soft_validation_range?": true,
"non_males_in_pregnant_household_not_in_pregnancy_range?": true,
"age3_known": 0
}
],
@ -2793,7 +2793,7 @@
"females_in_soft_age_range_in_pregnant_household_person_3_value_check": {
"depends_on": [
{
"female_in_pregnant_household_in_soft_validation_range?": true,
"non_males_in_pregnant_household_not_in_pregnancy_range?": true,
"details_known_3": 0
}
],
@ -3202,7 +3202,7 @@
"females_in_soft_age_range_in_pregnant_household_person_4_age_value_check": {
"depends_on": [
{
"female_in_pregnant_household_in_soft_validation_range?": true,
"non_males_in_pregnant_household_not_in_pregnancy_range?": true,
"age4_known": 0
}
],
@ -3325,7 +3325,7 @@
"females_in_soft_age_range_in_pregnant_household_person_4_value_check": {
"depends_on": [
{
"female_in_pregnant_household_in_soft_validation_range?": true,
"non_males_in_pregnant_household_not_in_pregnancy_range?": true,
"details_known_4": 0
}
],
@ -3731,7 +3731,7 @@
"females_in_soft_age_range_in_pregnant_household_person_5_age_value_check": {
"depends_on": [
{
"female_in_pregnant_household_in_soft_validation_range?": true,
"non_males_in_pregnant_household_not_in_pregnancy_range?": true,
"age5_known": 0
}
],
@ -3854,7 +3854,7 @@
"females_in_soft_age_range_in_pregnant_household_person_5_value_check": {
"depends_on": [
{
"female_in_pregnant_household_in_soft_validation_range?": true,
"non_males_in_pregnant_household_not_in_pregnancy_range?": true,
"details_known_5": 0
}
],
@ -4257,7 +4257,7 @@
"females_in_soft_age_range_in_pregnant_household_person_6_age_value_check": {
"depends_on": [
{
"female_in_pregnant_household_in_soft_validation_range?": true,
"non_males_in_pregnant_household_not_in_pregnancy_range?": true,
"age6_known": 0
}
],
@ -4380,7 +4380,7 @@
"females_in_soft_age_range_in_pregnant_household_person_6_value_check": {
"depends_on": [
{
"female_in_pregnant_household_in_soft_validation_range?": true,
"non_males_in_pregnant_household_not_in_pregnancy_range?": true,
"details_known_6": 0
}
],
@ -4780,7 +4780,7 @@
"females_in_soft_age_range_in_pregnant_household_person_7_age_value_check": {
"depends_on": [
{
"female_in_pregnant_household_in_soft_validation_range?": true,
"non_males_in_pregnant_household_not_in_pregnancy_range?": true,
"age7_known": 0
}
],
@ -4903,7 +4903,7 @@
"females_in_soft_age_range_in_pregnant_household_person_7_value_check": {
"depends_on": [
{
"female_in_pregnant_household_in_soft_validation_range?": true,
"non_males_in_pregnant_household_not_in_pregnancy_range?": true,
"details_known_7": 0
}
],
@ -5300,7 +5300,7 @@
"females_in_soft_age_range_in_pregnant_household_person_8_age_value_check": {
"depends_on": [
{
"female_in_pregnant_household_in_soft_validation_range?": true,
"non_males_in_pregnant_household_not_in_pregnancy_range?": true,
"age8_known": 0
}
],
@ -5423,7 +5423,7 @@
"females_in_soft_age_range_in_pregnant_household_person_8_value_check": {
"depends_on": [
{
"female_in_pregnant_household_in_soft_validation_range?": true,
"non_males_in_pregnant_household_not_in_pregnancy_range?": true,
"details_known_8": 0
}
],
@ -5837,7 +5837,7 @@
"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_not_in_pregnancy_range?": true
}
],
"title_text": {

36
config/forms/2022_2023.json

@ -1254,7 +1254,7 @@
"females_in_soft_age_range_in_pregnant_household_lead_hhmemb_value_check": {
"depends_on": [
{
"female_in_pregnant_household_in_soft_validation_range?": true
"non_males_in_pregnant_household_not_in_pregnancy_range?": true
}
],
"title_text": {
@ -1426,7 +1426,7 @@
"females_in_soft_age_range_in_pregnant_household_lead_age_value_check": {
"depends_on": [
{
"female_in_pregnant_household_in_soft_validation_range?": true
"non_males_in_pregnant_household_not_in_pregnancy_range?": true
}
],
"title_text": {
@ -1577,7 +1577,7 @@
"females_in_soft_age_range_in_pregnant_household_lead_value_check": {
"depends_on": [
{
"female_in_pregnant_household_in_soft_validation_range?": true
"non_males_in_pregnant_household_not_in_pregnancy_range?": true
}
],
"title_text": {
@ -2218,7 +2218,7 @@
"females_in_soft_age_range_in_pregnant_household_person_2_age_value_check": {
"depends_on": [
{
"female_in_pregnant_household_in_soft_validation_range?": true,
"non_males_in_pregnant_household_not_in_pregnancy_range?": true,
"age2_known": 0
}
],
@ -2371,7 +2371,7 @@
"females_in_soft_age_range_in_pregnant_household_person_2_value_check": {
"depends_on": [
{
"female_in_pregnant_household_in_soft_validation_range?": true,
"non_males_in_pregnant_household_not_in_pregnancy_range?": true,
"details_known_2": 0
}
],
@ -2801,7 +2801,7 @@
"females_in_soft_age_range_in_pregnant_household_person_3_age_value_check": {
"depends_on": [
{
"female_in_pregnant_household_in_soft_validation_range?": true,
"non_males_in_pregnant_household_not_in_pregnancy_range?": true,
"age3_known": 0
}
],
@ -2954,7 +2954,7 @@
"females_in_soft_age_range_in_pregnant_household_person_3_value_check": {
"depends_on": [
{
"female_in_pregnant_household_in_soft_validation_range?": true,
"non_males_in_pregnant_household_not_in_pregnancy_range?": true,
"details_known_3": 0
}
],
@ -3381,7 +3381,7 @@
"females_in_soft_age_range_in_pregnant_household_person_4_age_value_check": {
"depends_on": [
{
"female_in_pregnant_household_in_soft_validation_range?": true,
"non_males_in_pregnant_household_not_in_pregnancy_range?": true,
"age4_known": 0
}
],
@ -3534,7 +3534,7 @@
"females_in_soft_age_range_in_pregnant_household_person_4_value_check": {
"depends_on": [
{
"female_in_pregnant_household_in_soft_validation_range?": true,
"non_males_in_pregnant_household_not_in_pregnancy_range?": true,
"details_known_4": 0
}
],
@ -3958,7 +3958,7 @@
"females_in_soft_age_range_in_pregnant_household_person_5_age_value_check": {
"depends_on": [
{
"female_in_pregnant_household_in_soft_validation_range?": true,
"non_males_in_pregnant_household_not_in_pregnancy_range?": true,
"age5_known": 0
}
],
@ -4111,7 +4111,7 @@
"females_in_soft_age_range_in_pregnant_household_person_5_value_check": {
"depends_on": [
{
"female_in_pregnant_household_in_soft_validation_range?": true,
"non_males_in_pregnant_household_not_in_pregnancy_range?": true,
"details_known_5": 0
}
],
@ -4532,7 +4532,7 @@
"females_in_soft_age_range_in_pregnant_household_person_6_age_value_check": {
"depends_on": [
{
"female_in_pregnant_household_in_soft_validation_range?": true,
"non_males_in_pregnant_household_not_in_pregnancy_range?": true,
"age6_known": 0
}
],
@ -4685,7 +4685,7 @@
"females_in_soft_age_range_in_pregnant_household_person_6_value_check": {
"depends_on": [
{
"female_in_pregnant_household_in_soft_validation_range?": true,
"non_males_in_pregnant_household_not_in_pregnancy_range?": true,
"details_known_6": 0
}
],
@ -5103,7 +5103,7 @@
"females_in_soft_age_range_in_pregnant_household_person_7_age_value_check": {
"depends_on": [
{
"female_in_pregnant_household_in_soft_validation_range?": true,
"non_males_in_pregnant_household_not_in_pregnancy_range?": true,
"age7_known": 0
}
],
@ -5256,7 +5256,7 @@
"females_in_soft_age_range_in_pregnant_household_person_7_value_check": {
"depends_on": [
{
"female_in_pregnant_household_in_soft_validation_range?": true,
"non_males_in_pregnant_household_not_in_pregnancy_range?": true,
"details_known_7": 0
}
],
@ -5671,7 +5671,7 @@
"females_in_soft_age_range_in_pregnant_household_person_8_age_value_check": {
"depends_on": [
{
"female_in_pregnant_household_in_soft_validation_range?": true,
"non_males_in_pregnant_household_not_in_pregnancy_range?": true,
"age8_known": 0
}
],
@ -5824,7 +5824,7 @@
"females_in_soft_age_range_in_pregnant_household_person_8_value_check": {
"depends_on": [
{
"female_in_pregnant_household_in_soft_validation_range?": true,
"non_males_in_pregnant_household_not_in_pregnancy_range?": true,
"details_known_8": 0
}
],
@ -6259,7 +6259,7 @@
"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_not_in_pregnancy_range?": true
}
],
"title_text": {

4
config/locales/forms/2026/lettings/soft_validations.en.yml

@ -12,14 +12,14 @@ en:
question_text: "Are you sure this is correct?"
title_text: "You told us somebody in the household is pregnant."
informative_text: "You also told us that all the tenants living at the property are male."
females_in_soft_age_range_in_pregnant_household_value_check:
no_household_member_likely_to_be_pregnant_check:
page_header: ""
check_answer_label: "Pregnancy confirmation"
check_answer_prompt: "Confirm pregnancy status"
hint_text: ""
question_text: "Are you sure this is correct?"
title_text: "You told us somebody in the household is pregnant."
informative_text: "You also told us that any female tenants living at the property are in the following age ranges:<ul class=\"govuk-body-l app-panel--interruption\"><li>under 16 years old</li><li>over 50 years old</li></ul>"
informative_text: "Your answers for the age, sex and gender of each household member suggest there is no household member who is likely to be pregnant."
no_retirement_value_check:
page_header: ""

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,
"female_in_pregnant_household_in_soft_validation_range?" => true,
"non_males_in_pregnant_household_not_in_pregnancy_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_not_in_pregnancy_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,
"female_in_pregnant_household_in_soft_validation_range?" => true,
"non_males_in_pregnant_household_not_in_pregnancy_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_not_in_pregnancy_range?" => true,
},
],
)

51
spec/models/form/lettings/subsections/household_characteristics_spec.rb

@ -339,18 +339,15 @@ RSpec.describe Form::Lettings::Subsections::HouseholdCharacteristics, type: :mod
expect(household_characteristics.pages.map(&:id)).to eq(
%w[
household_members
no_females_pregnant_household_lead_hhmemb_value_check
females_in_soft_age_range_in_pregnant_household_lead_hhmemb_value_check
no_household_member_likely_to_be_pregnant_hhmemb_check
lead_tenant_age
no_females_pregnant_household_lead_age_value_check
females_in_soft_age_range_in_pregnant_household_lead_age_value_check
no_household_member_likely_to_be_pregnant_lead_age_check
age_lead_tenant_under_retirement_value_check
age_lead_tenant_over_retirement_value_check
lead_tenant_sex_registered_at_birth
lead_tenant_gender_same_as_sex
lead_tenant_gender_identity
no_females_pregnant_household_lead_value_check
females_in_soft_age_range_in_pregnant_household_lead_value_check
no_household_member_likely_to_be_pregnant_lead_check
gender_lead_tenant_over_retirement_value_check
lead_tenant_ethnic_group
lead_tenant_ethnic_background_arab
@ -367,15 +364,13 @@ RSpec.describe Form::Lettings::Subsections::HouseholdCharacteristics, type: :mod
person_2_age
person_2_lead_partner
relationship_2_multiple_partners_value_check
no_females_pregnant_household_person_2_age_value_check
females_in_soft_age_range_in_pregnant_household_person_2_age_value_check
no_household_member_likely_to_be_pregnant_person_age_2_check
age_2_under_retirement_value_check
age_2_over_retirement_value_check
person_2_sex_registered_at_birth
person_2_gender_same_as_sex
person_2_gender_identity
no_females_pregnant_household_person_2_value_check
females_in_soft_age_range_in_pregnant_household_person_2_value_check
no_household_member_likely_to_be_pregnant_person_2_check
gender_2_over_retirement_value_check
person_2_working_situation
working_situation_2_under_retirement_value_check
@ -385,15 +380,13 @@ RSpec.describe Form::Lettings::Subsections::HouseholdCharacteristics, type: :mod
person_3_age
person_3_lead_partner
relationship_3_multiple_partners_value_check
no_females_pregnant_household_person_3_age_value_check
females_in_soft_age_range_in_pregnant_household_person_3_age_value_check
no_household_member_likely_to_be_pregnant_person_age_3_check
age_3_under_retirement_value_check
age_3_over_retirement_value_check
person_3_sex_registered_at_birth
person_3_gender_same_as_sex
person_3_gender_identity
no_females_pregnant_household_person_3_value_check
females_in_soft_age_range_in_pregnant_household_person_3_value_check
no_household_member_likely_to_be_pregnant_person_3_check
gender_3_over_retirement_value_check
person_3_working_situation
working_situation_3_under_retirement_value_check
@ -403,15 +396,13 @@ RSpec.describe Form::Lettings::Subsections::HouseholdCharacteristics, type: :mod
person_4_age
person_4_lead_partner
relationship_4_multiple_partners_value_check
no_females_pregnant_household_person_4_age_value_check
females_in_soft_age_range_in_pregnant_household_person_4_age_value_check
no_household_member_likely_to_be_pregnant_person_age_4_check
age_4_under_retirement_value_check
age_4_over_retirement_value_check
person_4_sex_registered_at_birth
person_4_gender_same_as_sex
person_4_gender_identity
no_females_pregnant_household_person_4_value_check
females_in_soft_age_range_in_pregnant_household_person_4_value_check
no_household_member_likely_to_be_pregnant_person_4_check
gender_4_over_retirement_value_check
person_4_working_situation
working_situation_4_under_retirement_value_check
@ -421,15 +412,13 @@ RSpec.describe Form::Lettings::Subsections::HouseholdCharacteristics, type: :mod
person_5_age
person_5_lead_partner
relationship_5_multiple_partners_value_check
no_females_pregnant_household_person_5_age_value_check
females_in_soft_age_range_in_pregnant_household_person_5_age_value_check
no_household_member_likely_to_be_pregnant_person_age_5_check
age_5_under_retirement_value_check
age_5_over_retirement_value_check
person_5_sex_registered_at_birth
person_5_gender_same_as_sex
person_5_gender_identity
no_females_pregnant_household_person_5_value_check
females_in_soft_age_range_in_pregnant_household_person_5_value_check
no_household_member_likely_to_be_pregnant_person_5_check
gender_5_over_retirement_value_check
person_5_working_situation
working_situation_5_under_retirement_value_check
@ -439,15 +428,13 @@ RSpec.describe Form::Lettings::Subsections::HouseholdCharacteristics, type: :mod
person_6_age
person_6_lead_partner
relationship_6_multiple_partners_value_check
no_females_pregnant_household_person_6_age_value_check
females_in_soft_age_range_in_pregnant_household_person_6_age_value_check
no_household_member_likely_to_be_pregnant_person_age_6_check
age_6_under_retirement_value_check
age_6_over_retirement_value_check
person_6_sex_registered_at_birth
person_6_gender_same_as_sex
person_6_gender_identity
no_females_pregnant_household_person_6_value_check
females_in_soft_age_range_in_pregnant_household_person_6_value_check
no_household_member_likely_to_be_pregnant_person_6_check
gender_6_over_retirement_value_check
person_6_working_situation
working_situation_6_under_retirement_value_check
@ -457,15 +444,13 @@ RSpec.describe Form::Lettings::Subsections::HouseholdCharacteristics, type: :mod
person_7_age
person_7_lead_partner
relationship_7_multiple_partners_value_check
no_females_pregnant_household_person_7_age_value_check
females_in_soft_age_range_in_pregnant_household_person_7_age_value_check
no_household_member_likely_to_be_pregnant_person_age_7_check
age_7_under_retirement_value_check
age_7_over_retirement_value_check
person_7_sex_registered_at_birth
person_7_gender_same_as_sex
person_7_gender_identity
no_females_pregnant_household_person_7_value_check
females_in_soft_age_range_in_pregnant_household_person_7_value_check
no_household_member_likely_to_be_pregnant_person_7_check
gender_7_over_retirement_value_check
person_7_working_situation
working_situation_7_under_retirement_value_check
@ -475,15 +460,13 @@ RSpec.describe Form::Lettings::Subsections::HouseholdCharacteristics, type: :mod
person_8_age
person_8_lead_partner
relationship_8_multiple_partners_value_check
no_females_pregnant_household_person_8_age_value_check
females_in_soft_age_range_in_pregnant_household_person_8_age_value_check
no_household_member_likely_to_be_pregnant_person_age_8_check
age_8_under_retirement_value_check
age_8_over_retirement_value_check
person_8_sex_registered_at_birth
person_8_gender_same_as_sex
person_8_gender_identity
no_females_pregnant_household_person_8_value_check
females_in_soft_age_range_in_pregnant_household_person_8_value_check
no_household_member_likely_to_be_pregnant_person_8_check
gender_8_over_retirement_value_check
person_8_working_situation
working_situation_8_under_retirement_value_check

3
spec/models/form/lettings/subsections/household_needs_spec.rb

@ -53,8 +53,7 @@ RSpec.describe Form::Lettings::Subsections::HouseholdNeeds, type: :model do
armed_forces_serving
armed_forces_injured
pregnant
no_females_pregnant_household_value_check
females_in_soft_age_range_in_pregnant_household_value_check
no_household_member_likely_to_be_pregnant_check
access_needs_exist
type_of_access_needs
health_conditions

330
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_not_in_pregnancy_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_not_in_pregnancy_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_not_in_pregnancy_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_not_in_pregnancy_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_not_in_pregnancy_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_not_in_pregnancy_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_not_in_pregnancy_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_not_in_pregnancy_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_not_in_pregnancy_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_not_in_pregnancy_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_not_in_pregnancy_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_not_in_pregnancy_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_not_in_pregnancy_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_not_in_pregnancy_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

14
spec/services/bulk_upload/lettings/year2026/row_parser_spec.rb

@ -1959,18 +1959,22 @@ RSpec.describe BulkUpload::Lettings::Year2026::RowParser do
end
context "when a soft validation is triggered that relates both to fields that are and are not routed to" do
let(:attributes) { setup_section_params.merge({ field_78: "1", field_43: "M", field_49: "M", field_53: "M" }) }
let(:attributes) { setup_section_params.merge({ field_78: "1", field_130: "M", field_131: "M", field_132: "M", field_138: 1, field_140: 1, field_142: 1 }) }
it "adds errors to fields that are routed to" do
parser.valid?
expect(parser.errors.where(:field_49, category: :soft_validation)).to be_present
expect(parser.errors.where(:field_53, category: :soft_validation)).to be_present
expect(parser.errors.where(:field_130, category: :soft_validation)).to be_present
expect(parser.errors.where(:field_138, category: :soft_validation)).to be_present
expect(parser.errors.where(:field_131, category: :soft_validation)).to be_present
expect(parser.errors.where(:field_140, category: :soft_validation)).to be_present
end
it "does not add errors to fields that are not routed to" do
parser.valid?
expect(parser.errors.where(:field_57, category: :soft_validation)).not_to be_present
expect(parser.errors.where(:field_61, category: :soft_validation)).not_to be_present
expect(parser.errors.where(:field_133, category: :soft_validation)).not_to be_present
expect(parser.errors.where(:field_144, category: :soft_validation)).not_to be_present
expect(parser.errors.where(:field_134, category: :soft_validation)).not_to be_present
expect(parser.errors.where(:field_146, category: :soft_validation)).not_to be_present
end
end

Loading…
Cancel
Save