Browse Source

CLDC-4146 infer no to multiple partners

CLDC-4146-infer-no-other-partners
Carolyn 3 weeks ago committed by oscar-richardson-softwire
parent
commit
61baaebdd7
  1. 21
      app/models/derived_variables/lettings_log_variables.rb
  2. 5
      app/models/form/lettings/pages/person_lead_partner.rb
  3. 6
      app/models/form/lettings/questions/person_partner.rb
  4. 42
      app/models/form/lettings/subsections/household_characteristics.rb
  5. 4
      app/models/lettings_log.rb
  6. 2
      spec/factories/lettings_log.rb
  7. 7
      spec/models/form/lettings/pages/person_lead_partner_spec.rb
  8. 4
      spec/models/form/lettings/questions/person_partner_spec.rb
  9. 7
      spec/models/form/lettings/subsections/household_characteristics_spec.rb
  10. 152
      spec/models/lettings_log_derived_fields_spec.rb

21
app/models/derived_variables/lettings_log_variables.rb

@ -75,6 +75,10 @@ module DerivedVariables::LettingsLogVariables
self.beds = nil
end
if form.start_year_2026_or_later?
infer_at_most_one_relationship!
end
clear_child_constraints_for_age_changes!
child_under_16_constraints!
@ -295,6 +299,23 @@ private
end
end
def infer_at_most_one_relationship!
new_partner_numbers = partner_numbers.select { |i| public_send("relat#{i}_changed?") }
if new_partner_numbers.any?
infer_only_partner!(new_partner_numbers.first)
elsif partner_numbers.any?
infer_only_partner!(partner_numbers.first)
end
end
def infer_only_partner!(partner_number)
other_partner_numbers = partner_numbers.reject { |x| x == partner_number }
other_partner_numbers.each { |i| self["relat#{i}"] = "X" }
unanswered_partner_questions = (2..8).select { |i| public_send("relat#{i}").nil? }
unanswered_partner_questions.each { |i| self["relat#{i}"] = "X" }
end
def household_type
return unless totelder && totadult && totchild

5
app/models/form/lettings/pages/person_lead_partner.rb

@ -18,8 +18,11 @@ class Form::Lettings::Pages::PersonLeadPartner < ::Form::Page
"operator" => ">=",
"operand" => 16,
},
**(2...@person_index).map { |i| ["relat#{i}", { "operator" => "!=", "operand" => "P" }] }.to_h,
},
{ "details_known_#{@person_index}" => 0, "age#{@person_index}" => nil },
{ "details_known_#{@person_index}" => 0,
"age#{@person_index}" => nil,
**(2...@person_index).map { |i| ["relat#{i}", { "operator" => "!=", "operand" => "P" }] }.to_h },
]
else
[{ "details_known_#{@person_index}" => 0 }]

6
app/models/form/lettings/questions/person_partner.rb

@ -7,6 +7,12 @@ class Form::Lettings::Questions::PersonPartner < ::Form::Question
@answer_options = answer_options
@person_index = person_index
@question_number = question_number
@hidden_in_check_answers = {
"depends_on" => (2...person_index).map do |i|
{ "relat#{i}" => "P", "relat#{person_index}" => "X" }
end,
}
@disable_clearing_if_not_routed_or_dynamic_answer_options = form.start_year_2026_or_later?
end
def answer_options

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

@ -35,8 +35,8 @@ class Form::Lettings::Subsections::HouseholdCharacteristics < ::Form::Subsection
Form::Lettings::Pages::PersonKnown.new(nil, nil, self, person_index: 2),
(Form::Lettings::Pages::PersonAge.new(nil, nil, self, person_index: 2) if form.start_year_2026_or_later?),
relationship_question(person_index: 2),
(Form::Lettings::Pages::PartnerUnder16ValueCheck.new("relationship_2_partner_under_16_value_check", nil, self, person_index: 2) if form.start_year_2024_or_later? && !form.start_year_2026_or_later?),
(Form::Lettings::Pages::MultiplePartnersValueCheck.new("relationship_2_multiple_partners_value_check", nil, self, person_index: 2) if form.start_year_2024_or_later?),
(Form::Lettings::Pages::PartnerUnder16ValueCheck.new("relationship_2_partner_under_16_value_check", nil, self, person_index: 2) unless form.start_year_2026_or_later?),
(Form::Lettings::Pages::MultiplePartnersValueCheck.new("relationship_2_multiple_partners_value_check", nil, self, person_index: 2) unless form.start_year_2026_or_later?),
(Form::Lettings::Pages::PersonAge.new(nil, nil, self, person_index: 2) unless form.start_year_2026_or_later?),
Form::Lettings::Pages::NoFemalesPregnantHouseholdPersonAgeValueCheck.new(nil, nil, self,
person_index: 2),
@ -44,7 +44,7 @@ class Form::Lettings::Subsections::HouseholdCharacteristics < ::Form::Subsection
person_index: 2),
Form::Lettings::Pages::PersonUnderRetirementValueCheck.new("age_2_under_retirement_value_check", nil, self, person_index: 2),
Form::Lettings::Pages::PersonOverRetirementValueCheck.new("age_2_over_retirement_value_check", nil, self, person_index: 2),
(Form::Lettings::Pages::PartnerUnder16ValueCheck.new("age_2_partner_under_16_value_check", nil, self, person_index: 2) if form.start_year_2024_or_later? && !form.start_year_2026_or_later?),
(Form::Lettings::Pages::PartnerUnder16ValueCheck.new("age_2_partner_under_16_value_check", nil, self, person_index: 2) unless form.start_year_2026_or_later?),
Form::Lettings::Pages::PersonGenderIdentity.new(nil, nil, self, person_index: 2),
Form::Lettings::Pages::NoFemalesPregnantHouseholdPersonValueCheck.new(nil, nil, self, person_index: 2),
Form::Lettings::Pages::FemalesInSoftAgeRangeInPregnantHouseholdPersonValueCheck.new(nil, nil, self,
@ -57,8 +57,8 @@ class Form::Lettings::Subsections::HouseholdCharacteristics < ::Form::Subsection
Form::Lettings::Pages::PersonKnown.new(nil, nil, self, person_index: 3),
(Form::Lettings::Pages::PersonAge.new(nil, nil, self, person_index: 3) if form.start_year_2026_or_later?),
relationship_question(person_index: 3),
(Form::Lettings::Pages::PartnerUnder16ValueCheck.new("relationship_3_partner_under_16_value_check", nil, self, person_index: 3) if form.start_year_2024_or_later? && !form.start_year_2026_or_later?),
(Form::Lettings::Pages::MultiplePartnersValueCheck.new("relationship_3_multiple_partners_value_check", nil, self, person_index: 3) if form.start_year_2024_or_later?),
(Form::Lettings::Pages::PartnerUnder16ValueCheck.new("relationship_3_partner_under_16_value_check", nil, self, person_index: 3) unless form.start_year_2026_or_later?),
(Form::Lettings::Pages::MultiplePartnersValueCheck.new("relationship_3_multiple_partners_value_check", nil, self, person_index: 3) unless form.start_year_2026_or_later?),
(Form::Lettings::Pages::PersonAge.new(nil, nil, self, person_index: 3) unless form.start_year_2026_or_later?),
Form::Lettings::Pages::NoFemalesPregnantHouseholdPersonAgeValueCheck.new(nil, nil, self,
person_index: 3),
@ -66,7 +66,7 @@ class Form::Lettings::Subsections::HouseholdCharacteristics < ::Form::Subsection
person_index: 3),
Form::Lettings::Pages::PersonUnderRetirementValueCheck.new("age_3_under_retirement_value_check", nil, self, person_index: 3),
Form::Lettings::Pages::PersonOverRetirementValueCheck.new("age_3_over_retirement_value_check", nil, self, person_index: 3),
(Form::Lettings::Pages::PartnerUnder16ValueCheck.new("age_3_partner_under_16_value_check", nil, self, person_index: 3) if form.start_year_2024_or_later? && !form.start_year_2026_or_later?),
(Form::Lettings::Pages::PartnerUnder16ValueCheck.new("age_3_partner_under_16_value_check", nil, self, person_index: 3) unless form.start_year_2026_or_later?),
Form::Lettings::Pages::PersonGenderIdentity.new(nil, nil, self, person_index: 3),
Form::Lettings::Pages::NoFemalesPregnantHouseholdPersonValueCheck.new(nil, nil, self, person_index: 3),
Form::Lettings::Pages::FemalesInSoftAgeRangeInPregnantHouseholdPersonValueCheck.new(nil, nil, self,
@ -79,8 +79,8 @@ class Form::Lettings::Subsections::HouseholdCharacteristics < ::Form::Subsection
Form::Lettings::Pages::PersonKnown.new(nil, nil, self, person_index: 4),
(Form::Lettings::Pages::PersonAge.new(nil, nil, self, person_index: 4) if form.start_year_2026_or_later?),
relationship_question(person_index: 4),
(Form::Lettings::Pages::PartnerUnder16ValueCheck.new("relationship_4_partner_under_16_value_check", nil, self, person_index: 4) if form.start_year_2024_or_later? && !form.start_year_2026_or_later?),
(Form::Lettings::Pages::MultiplePartnersValueCheck.new("relationship_4_multiple_partners_value_check", nil, self, person_index: 4) if form.start_year_2024_or_later?),
(Form::Lettings::Pages::PartnerUnder16ValueCheck.new("relationship_4_partner_under_16_value_check", nil, self, person_index: 4) unless form.start_year_2026_or_later?),
(Form::Lettings::Pages::MultiplePartnersValueCheck.new("relationship_4_multiple_partners_value_check", nil, self, person_index: 4) unless form.start_year_2026_or_later?),
(Form::Lettings::Pages::PersonAge.new(nil, nil, self, person_index: 4) unless form.start_year_2026_or_later?),
Form::Lettings::Pages::NoFemalesPregnantHouseholdPersonAgeValueCheck.new(nil, nil, self,
person_index: 4),
@ -88,7 +88,7 @@ class Form::Lettings::Subsections::HouseholdCharacteristics < ::Form::Subsection
person_index: 4),
Form::Lettings::Pages::PersonUnderRetirementValueCheck.new("age_4_under_retirement_value_check", nil, self, person_index: 4),
Form::Lettings::Pages::PersonOverRetirementValueCheck.new("age_4_over_retirement_value_check", nil, self, person_index: 4),
(Form::Lettings::Pages::PartnerUnder16ValueCheck.new("age_4_partner_under_16_value_check", nil, self, person_index: 4) if form.start_year_2024_or_later? && !form.start_year_2026_or_later?),
(Form::Lettings::Pages::PartnerUnder16ValueCheck.new("age_4_partner_under_16_value_check", nil, self, person_index: 4) unless form.start_year_2026_or_later?),
Form::Lettings::Pages::PersonGenderIdentity.new(nil, nil, self, person_index: 4),
Form::Lettings::Pages::NoFemalesPregnantHouseholdPersonValueCheck.new(nil, nil, self, person_index: 4),
Form::Lettings::Pages::FemalesInSoftAgeRangeInPregnantHouseholdPersonValueCheck.new(nil, nil, self,
@ -101,8 +101,8 @@ class Form::Lettings::Subsections::HouseholdCharacteristics < ::Form::Subsection
Form::Lettings::Pages::PersonKnown.new(nil, nil, self, person_index: 5),
(Form::Lettings::Pages::PersonAge.new(nil, nil, self, person_index: 5) if form.start_year_2026_or_later?),
relationship_question(person_index: 5),
(Form::Lettings::Pages::PartnerUnder16ValueCheck.new("relationship_5_partner_under_16_value_check", nil, self, person_index: 5) if form.start_year_2024_or_later? && !form.start_year_2026_or_later?),
(Form::Lettings::Pages::MultiplePartnersValueCheck.new("relationship_5_multiple_partners_value_check", nil, self, person_index: 5) if form.start_year_2024_or_later?),
(Form::Lettings::Pages::PartnerUnder16ValueCheck.new("relationship_5_partner_under_16_value_check", nil, self, person_index: 5) unless form.start_year_2026_or_later?),
(Form::Lettings::Pages::MultiplePartnersValueCheck.new("relationship_5_multiple_partners_value_check", nil, self, person_index: 5) unless form.start_year_2026_or_later?),
(Form::Lettings::Pages::PersonAge.new(nil, nil, self, person_index: 5) unless form.start_year_2026_or_later?),
Form::Lettings::Pages::NoFemalesPregnantHouseholdPersonAgeValueCheck.new(nil, nil, self,
person_index: 5),
@ -110,7 +110,7 @@ class Form::Lettings::Subsections::HouseholdCharacteristics < ::Form::Subsection
person_index: 5),
Form::Lettings::Pages::PersonUnderRetirementValueCheck.new("age_5_under_retirement_value_check", nil, self, person_index: 5),
Form::Lettings::Pages::PersonOverRetirementValueCheck.new("age_5_over_retirement_value_check", nil, self, person_index: 5),
(Form::Lettings::Pages::PartnerUnder16ValueCheck.new("age_5_partner_under_16_value_check", nil, self, person_index: 5) if form.start_year_2024_or_later? && !form.start_year_2026_or_later?),
(Form::Lettings::Pages::PartnerUnder16ValueCheck.new("age_5_partner_under_16_value_check", nil, self, person_index: 5) unless form.start_year_2026_or_later?),
Form::Lettings::Pages::PersonGenderIdentity.new(nil, nil, self, person_index: 5),
Form::Lettings::Pages::NoFemalesPregnantHouseholdPersonValueCheck.new(nil, nil, self, person_index: 5),
Form::Lettings::Pages::FemalesInSoftAgeRangeInPregnantHouseholdPersonValueCheck.new(nil, nil, self,
@ -123,8 +123,8 @@ class Form::Lettings::Subsections::HouseholdCharacteristics < ::Form::Subsection
Form::Lettings::Pages::PersonKnown.new(nil, nil, self, person_index: 6),
(Form::Lettings::Pages::PersonAge.new(nil, nil, self, person_index: 6) if form.start_year_2026_or_later?),
relationship_question(person_index: 6),
(Form::Lettings::Pages::PartnerUnder16ValueCheck.new("relationship_6_partner_under_16_value_check", nil, self, person_index: 6) if form.start_year_2024_or_later? && !form.start_year_2026_or_later?),
(Form::Lettings::Pages::MultiplePartnersValueCheck.new("relationship_6_multiple_partners_value_check", nil, self, person_index: 6) if form.start_year_2024_or_later?),
(Form::Lettings::Pages::PartnerUnder16ValueCheck.new("relationship_6_partner_under_16_value_check", nil, self, person_index: 6) unless form.start_year_2026_or_later?),
(Form::Lettings::Pages::MultiplePartnersValueCheck.new("relationship_6_multiple_partners_value_check", nil, self, person_index: 6) unless form.start_year_2026_or_later?),
(Form::Lettings::Pages::PersonAge.new(nil, nil, self, person_index: 6) unless form.start_year_2026_or_later?),
Form::Lettings::Pages::NoFemalesPregnantHouseholdPersonAgeValueCheck.new(nil, nil, self,
person_index: 6),
@ -132,7 +132,7 @@ class Form::Lettings::Subsections::HouseholdCharacteristics < ::Form::Subsection
person_index: 6),
Form::Lettings::Pages::PersonUnderRetirementValueCheck.new("age_6_under_retirement_value_check", nil, self, person_index: 6),
Form::Lettings::Pages::PersonOverRetirementValueCheck.new("age_6_over_retirement_value_check", nil, self, person_index: 6),
(Form::Lettings::Pages::PartnerUnder16ValueCheck.new("age_6_partner_under_16_value_check", nil, self, person_index: 6) if form.start_year_2024_or_later? && !form.start_year_2026_or_later?),
(Form::Lettings::Pages::PartnerUnder16ValueCheck.new("age_6_partner_under_16_value_check", nil, self, person_index: 6) unless form.start_year_2026_or_later?),
Form::Lettings::Pages::PersonGenderIdentity.new(nil, nil, self, person_index: 6),
Form::Lettings::Pages::NoFemalesPregnantHouseholdPersonValueCheck.new(nil, nil, self, person_index: 6),
Form::Lettings::Pages::FemalesInSoftAgeRangeInPregnantHouseholdPersonValueCheck.new(nil, nil, self,
@ -145,8 +145,8 @@ class Form::Lettings::Subsections::HouseholdCharacteristics < ::Form::Subsection
Form::Lettings::Pages::PersonKnown.new(nil, nil, self, person_index: 7),
(Form::Lettings::Pages::PersonAge.new(nil, nil, self, person_index: 7) if form.start_year_2026_or_later?),
relationship_question(person_index: 7),
(Form::Lettings::Pages::PartnerUnder16ValueCheck.new("relationship_7_partner_under_16_value_check", nil, self, person_index: 7) if form.start_year_2024_or_later? && !form.start_year_2026_or_later?),
(Form::Lettings::Pages::MultiplePartnersValueCheck.new("relationship_7_multiple_partners_value_check", nil, self, person_index: 7) if form.start_year_2024_or_later?),
(Form::Lettings::Pages::PartnerUnder16ValueCheck.new("relationship_7_partner_under_16_value_check", nil, self, person_index: 7) unless form.start_year_2026_or_later?),
(Form::Lettings::Pages::MultiplePartnersValueCheck.new("relationship_7_multiple_partners_value_check", nil, self, person_index: 7) unless form.start_year_2026_or_later?),
(Form::Lettings::Pages::PersonAge.new(nil, nil, self, person_index: 7) unless form.start_year_2026_or_later?),
Form::Lettings::Pages::NoFemalesPregnantHouseholdPersonAgeValueCheck.new(nil, nil, self,
person_index: 7),
@ -154,7 +154,7 @@ class Form::Lettings::Subsections::HouseholdCharacteristics < ::Form::Subsection
person_index: 7),
Form::Lettings::Pages::PersonUnderRetirementValueCheck.new("age_7_under_retirement_value_check", nil, self, person_index: 7),
Form::Lettings::Pages::PersonOverRetirementValueCheck.new("age_7_over_retirement_value_check", nil, self, person_index: 7),
(Form::Lettings::Pages::PartnerUnder16ValueCheck.new("age_7_partner_under_16_value_check", nil, self, person_index: 7) if form.start_year_2024_or_later? && !form.start_year_2026_or_later?),
(Form::Lettings::Pages::PartnerUnder16ValueCheck.new("age_7_partner_under_16_value_check", nil, self, person_index: 7) unless form.start_year_2026_or_later?),
Form::Lettings::Pages::PersonGenderIdentity.new(nil, nil, self, person_index: 7),
Form::Lettings::Pages::NoFemalesPregnantHouseholdPersonValueCheck.new(nil, nil, self, person_index: 7),
Form::Lettings::Pages::FemalesInSoftAgeRangeInPregnantHouseholdPersonValueCheck.new(nil, nil, self,
@ -167,8 +167,8 @@ class Form::Lettings::Subsections::HouseholdCharacteristics < ::Form::Subsection
Form::Lettings::Pages::PersonKnown.new(nil, nil, self, person_index: 8),
(Form::Lettings::Pages::PersonAge.new(nil, nil, self, person_index: 8) if form.start_year_2026_or_later?),
relationship_question(person_index: 8),
(Form::Lettings::Pages::PartnerUnder16ValueCheck.new("relationship_8_partner_under_16_value_check", nil, self, person_index: 8) if form.start_year_2024_or_later? && !form.start_year_2026_or_later?),
(Form::Lettings::Pages::MultiplePartnersValueCheck.new("relationship_8_multiple_partners_value_check", nil, self, person_index: 8) if form.start_year_2024_or_later?),
(Form::Lettings::Pages::PartnerUnder16ValueCheck.new("relationship_8_partner_under_16_value_check", nil, self, person_index: 8) unless form.start_year_2026_or_later?),
(Form::Lettings::Pages::MultiplePartnersValueCheck.new("relationship_8_multiple_partners_value_check", nil, self, person_index: 8) unless form.start_year_2026_or_later?),
(Form::Lettings::Pages::PersonAge.new(nil, nil, self, person_index: 8) unless form.start_year_2026_or_later?),
Form::Lettings::Pages::NoFemalesPregnantHouseholdPersonAgeValueCheck.new(nil, nil, self,
person_index: 8),
@ -176,7 +176,7 @@ class Form::Lettings::Subsections::HouseholdCharacteristics < ::Form::Subsection
person_index: 8),
Form::Lettings::Pages::PersonUnderRetirementValueCheck.new("age_8_under_retirement_value_check", nil, self, person_index: 8),
Form::Lettings::Pages::PersonOverRetirementValueCheck.new("age_8_over_retirement_value_check", nil, self, person_index: 8),
(Form::Lettings::Pages::PartnerUnder16ValueCheck.new("age_8_partner_under_16_value_check", nil, self, person_index: 8) if form.start_year_2024_or_later? && !form.start_year_2026_or_later?),
(Form::Lettings::Pages::PartnerUnder16ValueCheck.new("age_8_partner_under_16_value_check", nil, self, person_index: 8) unless form.start_year_2026_or_later?),
Form::Lettings::Pages::PersonGenderIdentity.new(nil, nil, self, person_index: 8),
Form::Lettings::Pages::NoFemalesPregnantHouseholdPersonValueCheck.new(nil, nil, self, person_index: 8),
Form::Lettings::Pages::FemalesInSoftAgeRangeInPregnantHouseholdPersonValueCheck.new(nil, nil, self,

4
app/models/lettings_log.rb

@ -876,6 +876,10 @@ private
end
end
def partner_numbers
(2..8).select { |i| public_send("relat#{i}") == "P" }
end
def age_refused?
[age1_known, age2_known, age3_known, age4_known, age5_known, age6_known, age7_known, age8_known].any?(1)
end

2
spec/factories/lettings_log.rb

@ -131,7 +131,7 @@ FactoryBot.define do
rp_hardship { 0 }
rp_dontknow { 0 }
tenancyother { nil }
net_income_value_check { nil }
net_income_value_check { 1 }
void_date_value_check { 1 }
major_repairs_date_value_check { 1 }
net_income_known { 0 }

7
spec/models/form/lettings/pages/person_lead_partner_spec.rb

@ -96,8 +96,13 @@ RSpec.describe Form::Lettings::Pages::PersonLeadPartner, type: :model do
"operator" => ">=",
"operand" => 16,
},
"relat2" => { "operator" => "!=", "operand" => "P" },
},
{
"details_known_3" => 0,
"age3" => nil,
"relat2" => { "operator" => "!=", "operand" => "P" },
},
{ "details_known_3" => 0, "age3" => nil },
],
)
end

4
spec/models/form/lettings/questions/person_partner_spec.rb

@ -105,5 +105,9 @@ RSpec.describe Form::Lettings::Questions::PersonPartner, type: :model do
it "has the correct check_answers_card_number" do
expect(question.check_answers_card_number).to eq(3)
end
it "has the correct hidden_in_check_answers" do
expect(question.hidden_in_check_answers).to eq("relat2" => "P", "relat3" => "X")
end
end
end

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

@ -364,7 +364,6 @@ RSpec.describe Form::Lettings::Subsections::HouseholdCharacteristics, type: :mod
person_2_known
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
age_2_under_retirement_value_check
@ -380,7 +379,6 @@ RSpec.describe Form::Lettings::Subsections::HouseholdCharacteristics, type: :mod
person_3_known
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
age_3_under_retirement_value_check
@ -396,7 +394,6 @@ RSpec.describe Form::Lettings::Subsections::HouseholdCharacteristics, type: :mod
person_4_known
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
age_4_under_retirement_value_check
@ -412,7 +409,6 @@ RSpec.describe Form::Lettings::Subsections::HouseholdCharacteristics, type: :mod
person_5_known
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
age_5_under_retirement_value_check
@ -428,7 +424,6 @@ RSpec.describe Form::Lettings::Subsections::HouseholdCharacteristics, type: :mod
person_6_known
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
age_6_under_retirement_value_check
@ -444,7 +439,6 @@ RSpec.describe Form::Lettings::Subsections::HouseholdCharacteristics, type: :mod
person_7_known
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
age_7_under_retirement_value_check
@ -460,7 +454,6 @@ RSpec.describe Form::Lettings::Subsections::HouseholdCharacteristics, type: :mod
person_8_known
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
age_8_under_retirement_value_check

152
spec/models/lettings_log_derived_fields_spec.rb

@ -1588,4 +1588,156 @@ RSpec.describe LettingsLog, type: :model do
end
end
end
describe "#infer_at_most_one_relationship!" do
context "when 2025", metadata: { year: 25 } do
before do
Timecop.freeze(Time.zone.local(2025, 5, 10))
Singleton.__init__(FormHandler)
end
after do
Timecop.return
Singleton.__init__(FormHandler)
end
context "when there are no existing relationships" do
let(:log) { create(:lettings_log, :completed, relat2: "X", relat3: "X", relat4: "R") }
it "does not infer no to any relationship answers when a new relationship is added" do
log.relat2 = "P"
expect { log.set_derived_fields! }.to not_change(log, :relat3)
expect { log.set_derived_fields! }.to not_change(log, :relat4)
expect { log.set_derived_fields! }.to not_change(log, :relat5)
end
end
context "when there is an existing relationship" do
let(:log) { create(:lettings_log, :completed, relat2: "X", relat3: "P", relat4: "R", relat5: "X") }
it "does not infer no to any relationship answers when a new relationship is added" do
log.relat2 = "P"
expect { log.set_derived_fields! }.to not_change(log, :relat3)
expect { log.set_derived_fields! }.to not_change(log, :relat4)
expect { log.set_derived_fields! }.to not_change(log, :relat5)
expect { log.set_derived_fields! }.to not_change(log, :relat6)
end
end
context "when more than one relationship is set" do
let(:log) { create(:lettings_log, :completed, relat2: "X", relat3: "X", relat4: "R", relat5: "X") }
before do
log.relat3 = "P"
log.relat2 = "P"
end
it "does not infer no to any relationship answers" do
expect { log.set_derived_fields! }.to not_change(log, :relat2)
expect { log.set_derived_fields! }.to not_change(log, :relat3)
expect { log.set_derived_fields! }.to not_change(log, :relat4)
expect { log.set_derived_fields! }.to not_change(log, :relat5)
expect { log.set_derived_fields! }.to not_change(log, :relat6)
end
end
end
context "when 2026", metadata: { year: 26 } do
before do
Timecop.freeze(Time.zone.local(2026, 5, 10))
Singleton.__init__(FormHandler)
end
after do
Timecop.return
Singleton.__init__(FormHandler)
end
context "when there are no existing relationships" do
let(:log) { create(:lettings_log, :completed, relat2: "X", relat3: "X", relat4: "R") }
context "and a new relationship is added" do
before do
log.relat2 = "P"
end
it "infers no to unanswered questions" do
expect { log.set_derived_fields! }.to change(log, :relat5).to "X"
end
it "does not change relationship answers of no or prefer not to say" do
expect { log.set_derived_fields! }.to not_change(log, :relat3)
expect { log.set_derived_fields! }.to not_change(log, :relat4)
end
end
it "does not change other relationship values if no is changed to prefer not to say" do
log.relat2 = "R"
expect { log.set_derived_fields! }.to not_change(log, :relat3)
expect { log.set_derived_fields! }.to not_change(log, :relat4)
end
it "does not change other relationship values if prefer not to say is changed to no" do
log.relat4 = "X"
expect { log.set_derived_fields! }.to not_change(log, :relat2)
expect { log.set_derived_fields! }.to not_change(log, :relat3)
end
end
context "when there is an existing relationship" do
let(:log) { create(:lettings_log, :completed, relat2: "X", relat3: "P", relat4: "R", relat5: "X") }
context "and a new relationship is added" do
before do
log.relat6 = nil
log.relat2 = "P"
end
it "infers no to the previous relationship" do
expect { log.set_derived_fields! }.to change(log, :relat3).to "X"
end
it "infers no to unanswered questions" do
expect { log.set_derived_fields! }.to change(log, :relat6).to "X"
end
it "does not change relationship answers of no or prefer not to say" do
expect { log.set_derived_fields! }.to not_change(log, :relat5)
expect { log.set_derived_fields! }.to not_change(log, :relat4)
end
end
it "does not change other relationship values if the partner is removed" do
log.relat3 = "X"
expect { log.set_derived_fields! }.to not_change(log, :relat2)
expect { log.set_derived_fields! }.to not_change(log, :relat4)
expect { log.set_derived_fields! }.to not_change(log, :relat5)
expect { log.set_derived_fields! }.to not_change(log, :relat6)
end
end
context "when more than one relationship is set" do
let(:log) { create(:lettings_log, :completed, hhmemb: 6, relat2: "X", relat3: "X", relat4: "R", relat5: "X") }
before do
log.relat3 = "P"
log.relat2 = "P"
end
it "keeps the lower numbered relationship and infers the higher numbered one to false" do
expect { log.set_derived_fields! }.to change(log, :relat3).to "X"
expect { log.set_derived_fields! }.to not_change(log, :relat2)
end
it "infers no to unanswered questions" do
expect { log.set_derived_fields! }.to change(log, :relat6).to "X"
end
it "does not change relationship answers of no or prefer not to say" do
expect { log.set_derived_fields! }.to not_change(log, :relat5)
expect { log.set_derived_fields! }.to not_change(log, :relat4)
end
end
end
end
end

Loading…
Cancel
Save