diff --git a/app/helpers/collection_time_helper.rb b/app/helpers/collection_time_helper.rb index 5f7305bf3..1d35c17e9 100644 --- a/app/helpers/collection_time_helper.rb +++ b/app/helpers/collection_time_helper.rb @@ -4,6 +4,10 @@ module CollectionTimeHelper date < window_end_date ? date.year - 1 : date.year end + def collection_start_date_for_year(year) + Time.zone.local(year, 4, 1) + end + def current_collection_start_year collection_start_year_for_date(Time.zone.now) end diff --git a/spec/models/form/lettings/questions/person_partner_spec.rb b/spec/models/form/lettings/questions/person_partner_spec.rb index 7e2d177bd..522de645f 100644 --- a/spec/models/form/lettings/questions/person_partner_spec.rb +++ b/spec/models/form/lettings/questions/person_partner_spec.rb @@ -1,10 +1,26 @@ require "rails_helper" RSpec.describe Form::Lettings::Questions::PersonPartner, type: :model do + include CollectionTimeHelper + subject(:question) { described_class.new(nil, question_definition, page, person_index:) } let(:question_definition) { nil } - let(:page) { instance_double(Form::Page, subsection: instance_double(Form::Subsection, form: instance_double(Form, start_date: Time.zone.local(2025, 4, 4), start_year_2025_or_later?: true))) } + let(:year) { nil } + let(:page) { + instance_double( + Form::Page, + subsection: instance_double( + Form::Subsection, + form: instance_double( + Form, + start_date: year ? collection_start_date_for_year(year) : current_collection_start_date, + start_year_2025_or_later?: year.nil? || year >= 2025, + start_year_2026_or_later?: year.nil? || year >= 2026, + ) + ) + ) + } let(:person_index) { 2 } it "has correct page" do @@ -15,10 +31,6 @@ RSpec.describe Form::Lettings::Questions::PersonPartner, type: :model do expect(question.type).to eq("radio") end - it "is not marked as derived" do - expect(question.derived?(nil)).to be false - end - it "has the correct answer_options" do expect(question.answer_options).to eq("P" => { "value" => "Yes" }, "X" => { "value" => "No" }, @@ -41,6 +53,46 @@ 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(2) end + + context "with person 2 age < 16" do + let(:log) { build(:lettings_log, age2: 10) } + + context "and in 2025", metadata: { year: 25 } do + let(:year) { 2025 } + + it "is not marked as derived" do + expect(question.derived?(log)).to be false + end + end + + context "and in 2026", metadata: { year: 26 } do + let(:year) { 2026 } + + it "is marked as derived" do + expect(question.derived?(log)).to be true + end + end + end + + context "with person 2 age >= 16" do + let(:log) { build(:lettings_log, age2: 20) } + + context "and in 2025", metadata: { year: 25 } do + let(:year) { 2025 } + + it "is not marked as derived" do + expect(question.derived?(log)).to be false + end + end + + context "and in 2026", metadata: { year: 26 } do + let(:year) { 2026 } + + it "is not marked as derived" do + expect(question.derived?(log)).to be false + end + end + end end context "with person 3" do diff --git a/spec/models/form/lettings/subsections/household_characteristics_spec.rb b/spec/models/form/lettings/subsections/household_characteristics_spec.rb index 1988e2a06..d49fdc62b 100644 --- a/spec/models/form/lettings/subsections/household_characteristics_spec.rb +++ b/spec/models/form/lettings/subsections/household_characteristics_spec.rb @@ -17,141 +17,6 @@ RSpec.describe Form::Lettings::Subsections::HouseholdCharacteristics, type: :mod expect(household_characteristics.section).to eq(section) end - context "with start year before 2024" do - before do - allow(form).to receive(:start_year_2024_or_later?).and_return(false) - allow(form).to receive(:start_year_2026_or_later?).and_return(false) - end - - it "has correct pages" do - expect(household_characteristics.pages.map(&:id)).to eq( - %w[ - declaration - household_members - no_females_pregnant_household_lead_hhmemb_value_check - females_in_soft_age_range_in_pregnant_household_lead_hhmemb_value_check - lead_tenant_age - no_females_pregnant_household_lead_age_value_check - females_in_soft_age_range_in_pregnant_household_lead_age_value_check - age_lead_tenant_under_retirement_value_check - age_lead_tenant_over_retirement_value_check - lead_tenant_gender_identity - no_females_pregnant_household_lead_value_check - females_in_soft_age_range_in_pregnant_household_lead_value_check - gender_lead_tenant_over_retirement_value_check - lead_tenant_ethnic_group - lead_tenant_ethnic_background_arab - lead_tenant_ethnic_background_asian - lead_tenant_ethnic_background_black - lead_tenant_ethnic_background_mixed - lead_tenant_ethnic_background_white - lead_tenant_nationality - lead_tenant_working_situation - working_situation_lead_tenant_under_retirement_value_check - working_situation_lead_tenant_over_retirement_value_check - person_2_known - person_2_relationship_to_lead - person_2_age - 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 - age_2_over_retirement_value_check - person_2_gender_identity - no_females_pregnant_household_person_2_value_check - females_in_soft_age_range_in_pregnant_household_person_2_value_check - gender_2_over_retirement_value_check - person_2_working_situation - working_situation_2_under_retirement_value_check - working_situation_2_over_retirement_value_check - person_3_known - person_3_relationship_to_lead - person_3_age - 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 - age_3_over_retirement_value_check - person_3_gender_identity - no_females_pregnant_household_person_3_value_check - females_in_soft_age_range_in_pregnant_household_person_3_value_check - gender_3_over_retirement_value_check - person_3_working_situation - working_situation_3_under_retirement_value_check - working_situation_3_over_retirement_value_check - person_4_known - person_4_relationship_to_lead - person_4_age - 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 - age_4_over_retirement_value_check - person_4_gender_identity - no_females_pregnant_household_person_4_value_check - females_in_soft_age_range_in_pregnant_household_person_4_value_check - gender_4_over_retirement_value_check - person_4_working_situation - working_situation_4_under_retirement_value_check - working_situation_4_over_retirement_value_check - person_5_known - person_5_relationship_to_lead - person_5_age - 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 - age_5_over_retirement_value_check - person_5_gender_identity - no_females_pregnant_household_person_5_value_check - females_in_soft_age_range_in_pregnant_household_person_5_value_check - gender_5_over_retirement_value_check - person_5_working_situation - working_situation_5_under_retirement_value_check - working_situation_5_over_retirement_value_check - person_6_known - person_6_relationship_to_lead - person_6_age - 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 - age_6_over_retirement_value_check - person_6_gender_identity - no_females_pregnant_household_person_6_value_check - females_in_soft_age_range_in_pregnant_household_person_6_value_check - gender_6_over_retirement_value_check - person_6_working_situation - working_situation_6_under_retirement_value_check - working_situation_6_over_retirement_value_check - person_7_known - person_7_relationship_to_lead - person_7_age - 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 - age_7_over_retirement_value_check - person_7_gender_identity - no_females_pregnant_household_person_7_value_check - females_in_soft_age_range_in_pregnant_household_person_7_value_check - gender_7_over_retirement_value_check - person_7_working_situation - working_situation_7_under_retirement_value_check - working_situation_7_over_retirement_value_check - person_8_known - person_8_relationship_to_lead - person_8_age - 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 - age_8_over_retirement_value_check - person_8_gender_identity - no_females_pregnant_household_person_8_value_check - females_in_soft_age_range_in_pregnant_household_person_8_value_check - gender_8_over_retirement_value_check - person_8_working_situation - working_situation_8_under_retirement_value_check - working_situation_8_over_retirement_value_check - ], - ) - end - end - context "with start year 2024" do before do allow(form).to receive(:start_year_2024_or_later?).and_return(true) @@ -498,13 +363,11 @@ RSpec.describe Form::Lettings::Subsections::HouseholdCharacteristics, type: :mod person_2_known person_2_age person_2_lead_partner - relationship_2_partner_under_16_value_check 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 age_2_over_retirement_value_check - age_2_partner_under_16_value_check person_2_gender_identity no_females_pregnant_household_person_2_value_check females_in_soft_age_range_in_pregnant_household_person_2_value_check @@ -515,13 +378,11 @@ RSpec.describe Form::Lettings::Subsections::HouseholdCharacteristics, type: :mod person_3_known person_3_age person_3_lead_partner - relationship_3_partner_under_16_value_check 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 age_3_over_retirement_value_check - age_3_partner_under_16_value_check person_3_gender_identity no_females_pregnant_household_person_3_value_check females_in_soft_age_range_in_pregnant_household_person_3_value_check @@ -532,13 +393,11 @@ RSpec.describe Form::Lettings::Subsections::HouseholdCharacteristics, type: :mod person_4_known person_4_age person_4_lead_partner - relationship_4_partner_under_16_value_check 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 age_4_over_retirement_value_check - age_4_partner_under_16_value_check person_4_gender_identity no_females_pregnant_household_person_4_value_check females_in_soft_age_range_in_pregnant_household_person_4_value_check @@ -549,13 +408,11 @@ RSpec.describe Form::Lettings::Subsections::HouseholdCharacteristics, type: :mod person_5_known person_5_age person_5_lead_partner - relationship_5_partner_under_16_value_check 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 age_5_over_retirement_value_check - age_5_partner_under_16_value_check person_5_gender_identity no_females_pregnant_household_person_5_value_check females_in_soft_age_range_in_pregnant_household_person_5_value_check @@ -566,13 +423,11 @@ RSpec.describe Form::Lettings::Subsections::HouseholdCharacteristics, type: :mod person_6_known person_6_age person_6_lead_partner - relationship_6_partner_under_16_value_check 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 age_6_over_retirement_value_check - age_6_partner_under_16_value_check person_6_gender_identity no_females_pregnant_household_person_6_value_check females_in_soft_age_range_in_pregnant_household_person_6_value_check @@ -583,13 +438,11 @@ RSpec.describe Form::Lettings::Subsections::HouseholdCharacteristics, type: :mod person_7_known person_7_age person_7_lead_partner - relationship_7_partner_under_16_value_check 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 age_7_over_retirement_value_check - age_7_partner_under_16_value_check person_7_gender_identity no_females_pregnant_household_person_7_value_check females_in_soft_age_range_in_pregnant_household_person_7_value_check @@ -600,13 +453,11 @@ RSpec.describe Form::Lettings::Subsections::HouseholdCharacteristics, type: :mod person_8_known person_8_age person_8_lead_partner - relationship_8_partner_under_16_value_check 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 age_8_over_retirement_value_check - age_8_partner_under_16_value_check person_8_gender_identity no_females_pregnant_household_person_8_value_check females_in_soft_age_range_in_pregnant_household_person_8_value_check