From f9f3edd11a754bcce7b026293ca52a8636167721 Mon Sep 17 00:00:00 2001 From: Samuel Young Date: Wed, 15 Apr 2026 17:46:09 +0100 Subject: [PATCH 1/4] CLDC-4373: Fix pregnancy check appearing twice (#3308) * CLDC-4373: Add a person_index to lead age pregnancy check * CLDC-4373: Ensure pregnancy validation is not shown for people without details --- ...o_household_member_likely_to_be_pregnant_check.rb | 12 ++++++++++-- .../subsections/household_characteristics.rb | 2 +- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/app/models/form/lettings/pages/no_household_member_likely_to_be_pregnant_check.rb b/app/models/form/lettings/pages/no_household_member_likely_to_be_pregnant_check.rb index cefb98ceb..da0fdbb9f 100644 --- a/app/models/form/lettings/pages/no_household_member_likely_to_be_pregnant_check.rb +++ b/app/models/form/lettings/pages/no_household_member_likely_to_be_pregnant_check.rb @@ -2,7 +2,8 @@ class Form::Lettings::Pages::NoHouseholdMemberLikelyToBePregnantCheck < ::Form:: 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 }] + @person_index = person_index + @depends_on = depends_on @title_text = { "translation" => "forms.#{form.start_date.year}.#{@copy_key}.title_text", "arguments" => [], @@ -11,7 +12,14 @@ class Form::Lettings::Pages::NoHouseholdMemberLikelyToBePregnantCheck < ::Form:: "translation" => "forms.#{form.start_date.year}.#{@copy_key}.informative_text", "arguments" => [], } - @person_index = person_index + end + + def depends_on + if @person_index >= 2 + [{ "no_household_member_likely_to_be_pregnant?" => true, "details_known_#{@person_index}" => 0 }] + else + [{ "no_household_member_likely_to_be_pregnant?" => true }] + end end def questions diff --git a/app/models/form/lettings/subsections/household_characteristics.rb b/app/models/form/lettings/subsections/household_characteristics.rb index 50e2cfa61..5ac573df3 100644 --- a/app/models/form/lettings/subsections/household_characteristics.rb +++ b/app/models/form/lettings/subsections/household_characteristics.rb @@ -16,7 +16,7 @@ class Form::Lettings::Subsections::HouseholdCharacteristics < ::Form::Subsection Form::Lettings::Pages::LeadTenantAge.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::NoHouseholdMemberLikelyToBePregnantCheck.new("no_household_member_likely_to_be_pregnant_lead_age_check", nil, self, person_index: 1) 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?), From 8020b2fbfb16718977dd800c60b1691d888b438b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 15 Apr 2026 17:54:30 +0100 Subject: [PATCH 2/4] Bump addressable from 2.8.1 to 2.9.0 in /docs (#3304) Bumps [addressable](https://github.com/sporkmonger/addressable) from 2.8.1 to 2.9.0. - [Changelog](https://github.com/sporkmonger/addressable/blob/main/CHANGELOG.md) - [Commits](https://github.com/sporkmonger/addressable/compare/addressable-2.8.1...addressable-2.9.0) --- updated-dependencies: - dependency-name: addressable dependency-version: 2.9.0 dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- docs/Gemfile.lock | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/Gemfile.lock b/docs/Gemfile.lock index cd65dd5a6..ada074c92 100644 --- a/docs/Gemfile.lock +++ b/docs/Gemfile.lock @@ -13,8 +13,8 @@ GEM minitest (>= 5.1, < 6) securerandom (>= 0.3) tzinfo (~> 2.0, >= 2.0.5) - addressable (2.8.1) - public_suffix (>= 2.0.2, < 6.0) + addressable (2.9.0) + public_suffix (>= 2.0.2, < 8.0) base64 (0.3.0) benchmark (0.5.0) bigdecimal (4.0.1) From aa22e8dc151bba225cd0431106382582ac8b3b90 Mon Sep 17 00:00:00 2001 From: Nat Dean-Lewis <94526761+natdeanlewissoftwire@users.noreply.github.com> Date: Fri, 17 Apr 2026 11:15:06 +0100 Subject: [PATCH 3/4] CLDC-4400: Buyer still serving answer remapping (#3310) * CLDC-4400: update 2025 options and hide 10 from ui * CLDC-4400: add rake task to remap values * CLDC-4400: tweak desc and rename * CLDC-4400: update spec * CLDC-4400: rename task file * CLDC-4400: rename task file * CLDC-4400: rename task file * CLDC-4400: refactor usage error * CLDC-4400: use datetime not date in case logs are made between release and rake task completion * CLDC-4400: before_date -> before_datetime * CLDC-4400: print log ids and use update! --- .../sales/questions/buyer_still_serving.rb | 11 +++++--- .../remap_2025_hhregresstill_values.rake | 24 +++++++++++++++++ .../questions/buyer_still_serving_spec.rb | 27 ++++++++++++++++--- 3 files changed, 56 insertions(+), 6 deletions(-) create mode 100644 lib/tasks/remap_2025_hhregresstill_values.rake diff --git a/app/models/form/sales/questions/buyer_still_serving.rb b/app/models/form/sales/questions/buyer_still_serving.rb index fc7b9fcb2..6ef135f40 100644 --- a/app/models/form/sales/questions/buyer_still_serving.rb +++ b/app/models/form/sales/questions/buyer_still_serving.rb @@ -19,13 +19,18 @@ class Form::Sales::Questions::BuyerStillServing < ::Form::Question else { "4" => { "value" => "Yes" }, - "5" => { "value" => "No" }, - "6" => { "value" => "Buyer prefers not to say" }, + "5" => { "value" => "No - they left up to and including 2 years ago" }, + "6" => { "value" => "No - they left more than 2 years ago" }, "divider" => { "value" => true }, - "7" => { "value" => "Don’t know" }, + "9" => { "value" => "Don’t know" }, + "10" => { "value" => "No" }, }.freeze end end + def displayed_answer_options(_log, _user = nil) + answer_options.reject { |key, _v| key == "10" } + end + QUESTION_NUMBER_FROM_YEAR = { 2023 => 63, 2024 => 65, 2025 => 62, 2026 => 70 }.freeze end diff --git a/lib/tasks/remap_2025_hhregresstill_values.rake b/lib/tasks/remap_2025_hhregresstill_values.rake new file mode 100644 index 000000000..30ec38e10 --- /dev/null +++ b/lib/tasks/remap_2025_hhregresstill_values.rake @@ -0,0 +1,24 @@ +desc "Remaps hhregresstill values for manually created 2025/26 sales logs" +task :remap_2025_hhregresstill_values, %i[before_datetime] => :environment do |_task, args| + usage_message = "Usage: rake remap_2025_hhregresstill_values['before_datetime']. before_datetime must be in format YYYY-MM-DDTHH:MM:SS" + raise usage_message if args[:before_datetime].blank? + + before_datetime = Time.zone.parse(args[:before_datetime]) + raise usage_message if before_datetime.nil? + + logs = SalesLog.filter_by_year(2025).where(bulk_upload_id: nil).where(hhregresstill: [5, 6, 7]).where("created_at < ?", before_datetime) + puts "Updating #{logs.count} sales logs" + + updated_ids = [] + logs.find_each do |log| + new_value = case log.hhregresstill + when 5 then 10 + when 6, 7 then 9 + end + log.update!(hhregresstill: new_value) + updated_ids << log.id + end + + puts "Updated log IDs: #{updated_ids.join(', ')}" + puts "Done" +end diff --git a/spec/models/form/sales/questions/buyer_still_serving_spec.rb b/spec/models/form/sales/questions/buyer_still_serving_spec.rb index 4b89879f6..d9222fae2 100644 --- a/spec/models/form/sales/questions/buyer_still_serving_spec.rb +++ b/spec/models/form/sales/questions/buyer_still_serving_spec.rb @@ -32,10 +32,21 @@ RSpec.describe Form::Sales::Questions::BuyerStillServing, type: :model do it "has the correct answer_options" do expect(question.answer_options).to eq({ "4" => { "value" => "Yes" }, - "5" => { "value" => "No" }, - "6" => { "value" => "Buyer prefers not to say" }, + "5" => { "value" => "No - they left up to and including 2 years ago" }, + "6" => { "value" => "No - they left more than 2 years ago" }, "divider" => { "value" => true }, - "7" => { "value" => "Don’t know" }, + "9" => { "value" => "Don’t know" }, + "10" => { "value" => "No" }, + }) + end + + it "has the correct displayed_answer_options" do + expect(question.displayed_answer_options(nil)).to eq({ + "4" => { "value" => "Yes" }, + "5" => { "value" => "No - they left up to and including 2 years ago" }, + "6" => { "value" => "No - they left more than 2 years ago" }, + "divider" => { "value" => true }, + "9" => { "value" => "Don’t know" }, }) end end @@ -52,5 +63,15 @@ RSpec.describe Form::Sales::Questions::BuyerStillServing, type: :model do "9" => { "value" => "Don’t know" }, }) end + + it "has the correct displayed_answer_options" do + expect(question.displayed_answer_options(nil)).to eq({ + "4" => { "value" => "Yes" }, + "5" => { "value" => "No - they left up to and including 2 years ago" }, + "6" => { "value" => "No - they left more than 2 years ago" }, + "divider" => { "value" => true }, + "9" => { "value" => "Don’t know" }, + }) + end end end From 6bccc2676e25595e6346e4ae2f29390dc4a61739 Mon Sep 17 00:00:00 2001 From: Samuel Young Date: Fri, 17 Apr 2026 16:08:45 +0100 Subject: [PATCH 4/4] CLDC-4435: Always show LA question if it can't be derived (#3314) * CLDC-4435: Always show LA question if it can't be derived * CLDC-4435: Update tests * fixup! CLDC-4435: Update tests clean up sales prop la spec --- .../pages/property_local_authority.rb | 4 +- .../sales/pages/property_local_authority.rb | 4 +- .../pages/property_local_authority_spec.rb | 72 +++++-------------- .../pages/property_local_authority_spec.rb | 61 +++------------- spec/requests/check_errors_controller_spec.rb | 2 +- 5 files changed, 32 insertions(+), 111 deletions(-) diff --git a/app/models/form/lettings/pages/property_local_authority.rb b/app/models/form/lettings/pages/property_local_authority.rb index 339ccb4d8..5656ec2d9 100644 --- a/app/models/form/lettings/pages/property_local_authority.rb +++ b/app/models/form/lettings/pages/property_local_authority.rb @@ -3,8 +3,8 @@ class Form::Lettings::Pages::PropertyLocalAuthority < ::Form::Page super @id = "property_local_authority" @depends_on = [ - { "is_la_inferred" => false, "is_general_needs?" => true, "form.start_year_2024_or_later?" => false }, - { "is_la_inferred" => false, "is_general_needs?" => true, "form.start_year_2024_or_later?" => true, "address_search_given?" => true }, + { "is_la_inferred" => false, "is_general_needs?" => true, "form.start_year_2025_or_later?" => false, "address_search_given?" => true }, + { "is_la_inferred" => false, "is_general_needs?" => true, "form.start_year_2025_or_later?" => true }, ] end diff --git a/app/models/form/sales/pages/property_local_authority.rb b/app/models/form/sales/pages/property_local_authority.rb index fe9ad1bc0..cd1d898e2 100644 --- a/app/models/form/sales/pages/property_local_authority.rb +++ b/app/models/form/sales/pages/property_local_authority.rb @@ -3,8 +3,8 @@ class Form::Sales::Pages::PropertyLocalAuthority < ::Form::Page super @id = "property_local_authority" @depends_on = [ - { "is_la_inferred" => false, "form.start_year_2024_or_later?" => false }, - { "is_la_inferred" => false, "form.start_year_2024_or_later?" => true, "address_search_given?" => true }, + { "is_la_inferred" => false, "form.start_year_2025_or_later?" => false, "address_search_given?" => true }, + { "is_la_inferred" => false, "form.start_year_2025_or_later?" => true }, ] end diff --git a/spec/models/form/lettings/pages/property_local_authority_spec.rb b/spec/models/form/lettings/pages/property_local_authority_spec.rb index 75d680ddd..5e29424e3 100644 --- a/spec/models/form/lettings/pages/property_local_authority_spec.rb +++ b/spec/models/form/lettings/pages/property_local_authority_spec.rb @@ -35,66 +35,26 @@ RSpec.describe Form::Lettings::Pages::PropertyLocalAuthority, type: :model do context "when routing to the page" do let(:log) { build(:lettings_log) } - context "with form before 2024" do - before do - allow(form).to receive(:start_year_2024_or_later?).and_return(false) - end - - it "is routed to when la is not inferred and it is general needs log" do - log.needstype = 1 - log.is_la_inferred = false - expect(page).to be_routed_to(log, nil) - end - - it "is not routed to when la is inferred" do - log.needstype = 1 - log.is_la_inferred = true - expect(page).not_to be_routed_to(log, nil) - end - - it "is not routed to when it's a supported housing log" do - log.needstype = 2 - log.is_la_inferred = false - expect(page).not_to be_routed_to(log, nil) - end + before do + allow(form).to receive(:start_year_2025_or_later?).and_return(true) end - context "with form after 2024" do - before do - allow(form).to receive(:start_year_2024_or_later?).and_return(true) - end - - it "is routed to when la is not inferred, it is general needs log and address search has been given" do - log.needstype = 1 - log.is_la_inferred = false - log.address_line1_input = "1" - log.postcode_full_input = "A11AA" - expect(page).to be_routed_to(log, nil) - end - - it "is not routed to when la is inferred" do - log.needstype = 1 - log.is_la_inferred = true - log.address_line1_input = "1" - log.postcode_full_input = "A11AA" - expect(page).not_to be_routed_to(log, nil) - end + it "is routed to when la is not inferred and it is general needs log" do + log.needstype = 1 + log.is_la_inferred = false + expect(page).to be_routed_to(log, nil) + end - it "is not routed to when it's a supported housing log" do - log.needstype = 2 - log.is_la_inferred = false - log.address_line1_input = "1" - log.postcode_full_input = "A11AA" - expect(page).not_to be_routed_to(log, nil) - end + it "is not routed to when la is inferred" do + log.needstype = 1 + log.is_la_inferred = true + expect(page).not_to be_routed_to(log, nil) + end - it "is not routed to when address search is not given" do - log.needstype = 1 - log.is_la_inferred = false - log.address_line1_input = nil - log.postcode_full_input = "A11AA" - expect(page).not_to be_routed_to(log, nil) - end + it "is not routed to when it's a supported housing log" do + log.needstype = 2 + log.is_la_inferred = false + expect(page).not_to be_routed_to(log, nil) end end end diff --git a/spec/models/form/sales/pages/property_local_authority_spec.rb b/spec/models/form/sales/pages/property_local_authority_spec.rb index 88d049bce..579b3d48a 100644 --- a/spec/models/form/sales/pages/property_local_authority_spec.rb +++ b/spec/models/form/sales/pages/property_local_authority_spec.rb @@ -17,18 +17,8 @@ RSpec.describe Form::Sales::Pages::PropertyLocalAuthority, type: :model do expect(page.subsection).to eq(subsection) end - describe "has correct questions" do - context "when 2023" do - let(:start_date) { Time.utc(2023, 2, 8) } - - it "has correct questions" do - expect(page.questions.map(&:id)).to eq( - %w[ - la - ], - ) - end - end + it "has correct questions" do + expect(page.questions.map(&:id)).to eq(%w[la]) end it "has the correct id" do @@ -42,47 +32,18 @@ RSpec.describe Form::Sales::Pages::PropertyLocalAuthority, type: :model do context "when routing to the page" do let(:log) { build(:sales_log) } - context "with form before 2024" do - before do - allow(form).to receive(:start_year_2024_or_later?).and_return(false) - end - - it "is routed to when la is not inferred" do - log.is_la_inferred = false - expect(page).to be_routed_to(log, nil) - end - - it "is not routed to when la is inferred" do - log.is_la_inferred = true - expect(page).not_to be_routed_to(log, nil) - end + before do + allow(form).to receive(:start_year_2025_or_later?).and_return(true) end - context "with form after 2024" do - before do - allow(form).to receive(:start_year_2024_or_later?).and_return(true) - end - - it "is routed to when la is not inferred and address search has been given" do - log.is_la_inferred = false - log.address_line1_input = "1" - log.postcode_full_input = "A11AA" - expect(page).to be_routed_to(log, nil) - end - - it "is not routed to when la is inferred" do - log.is_la_inferred = true - log.address_line1_input = "1" - log.postcode_full_input = "A11AA" - expect(page).not_to be_routed_to(log, nil) - end + it "is routed to when la is not inferred" do + log.is_la_inferred = false + expect(page).to be_routed_to(log, nil) + end - it "is not routed to when address search is not given" do - log.is_la_inferred = false - log.address_line1_input = nil - log.postcode_full_input = "A11AA" - expect(page).not_to be_routed_to(log, nil) - end + it "is not routed to when la is inferred" do + log.is_la_inferred = true + expect(page).not_to be_routed_to(log, nil) end end end diff --git a/spec/requests/check_errors_controller_spec.rb b/spec/requests/check_errors_controller_spec.rb index 017879d89..168931d71 100644 --- a/spec/requests/check_errors_controller_spec.rb +++ b/spec/requests/check_errors_controller_spec.rb @@ -84,7 +84,7 @@ RSpec.describe CheckErrorsController, type: :request do end it "displays correct clear and change links" do - expect(page.all(:button, value: "Clear").count).to eq(1) + expect(page.all(:button, value: "Clear").count).to eq(2) expect(page).to have_link("Change", count: 1) expect(page).to have_button("Clear all") end