From de1d28c27e2b1a065f24a1275f054aecdf8a252d Mon Sep 17 00:00:00 2001 From: kosiakkatrina <54268893+kosiakkatrina@users.noreply.github.com> Date: Thu, 14 Nov 2024 16:46:52 +0000 Subject: [PATCH 1/8] Increase soft max for old persons shared ownership savings (#2778) --- .../validations/sales/soft_validations.rb | 4 ++- .../sales/soft_validations_spec.rb | 27 +++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/app/models/validations/sales/soft_validations.rb b/app/models/validations/sales/soft_validations.rb index fe05ec13c..5095e5ff9 100644 --- a/app/models/validations/sales/soft_validations.rb +++ b/app/models/validations/sales/soft_validations.rb @@ -58,7 +58,9 @@ module Validations::Sales::SoftValidations end def savings_over_soft_max? - savings && savings > 100_000 + soft_max = form.start_year_2025_or_later? && type == 24 ? 200_000 : 100_000 + + savings && savings > soft_max end def deposit_over_soft_max? diff --git a/spec/models/validations/sales/soft_validations_spec.rb b/spec/models/validations/sales/soft_validations_spec.rb index c8e8618fc..99c615250 100644 --- a/spec/models/validations/sales/soft_validations_spec.rb +++ b/spec/models/validations/sales/soft_validations_spec.rb @@ -371,6 +371,33 @@ RSpec.describe Validations::Sales::SoftValidations do expect(record) .not_to be_mortgage_over_soft_max end + + context "with log for 2025 of after" do + before do + record.saledate = Time.zone.local(2025, 5, 1) + end + + it "allows savings over 100_000 for old persons shared ownership" do + record.savings = 100_001 + record.type = 24 + expect(record) + .not_to be_savings_over_soft_max + end + + it "does not allows savings over 200_000 for old persons shared ownership" do + record.savings = 200_001 + record.type = 24 + expect(record) + .to be_savings_over_soft_max + end + + it "does not allows savings over 100_000 for other type" do + record.savings = 100_001 + record.type = 8 + expect(record) + .to be_savings_over_soft_max + end + end end end From 4f3526c447889a1c9d6c4f67d4b7ee69ff8ef3c6 Mon Sep 17 00:00:00 2001 From: kosiakkatrina <54268893+kosiakkatrina@users.noreply.github.com> Date: Mon, 18 Nov 2024 15:39:24 +0000 Subject: [PATCH 2/8] Update hardcoded postgres version in docker (#2787) --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 46bd31b5f..74faebfd8 100644 --- a/Dockerfile +++ b/Dockerfile @@ -10,7 +10,7 @@ RUN apk add --update --no-cache tzdata && \ # build-base: compilation tools for bundle # yarn: node package manager # postgresql-dev: postgres driver and libraries -RUN apk add --no-cache build-base=0.5-r3 busybox=1.36.1-r7 nodejs-current=20.8.1-r0 yarn=1.22.19-r0 postgresql13-dev=13.16-r0 git=2.40.3-r0 bash=5.2.15-r5 +RUN apk add --no-cache build-base=0.5-r3 busybox=1.36.1-r7 nodejs-current=20.8.1-r0 yarn=1.22.19-r0 postgresql13-dev=13.17-r0 git=2.40.3-r0 bash=5.2.15-r5 # Bundler version should be the same version as what the Gemfile.lock was bundled with RUN gem install bundler:2.3.14 --no-document From aeae0c1806c9ed4a80a1b3d17243028a533fe120 Mon Sep 17 00:00:00 2001 From: Rachael Booth Date: Mon, 18 Nov 2024 16:18:29 +0000 Subject: [PATCH 3/8] CLDC-3766: Ensure copy for sales Q78 is found correctly for 2024 logs (#2790) * CLDC-3766: Ensure copy for Q78 is found correctly * Fix tests --- app/models/form/sales/questions/staircase.rb | 2 +- app/models/form/sales/subsections/shared_ownership_scheme.rb | 1 + app/models/form/subsection.rb | 4 ++++ spec/models/form/sales/pages/staircase_spec.rb | 4 ++-- spec/models/form/sales/questions/staircase_spec.rb | 4 ++-- 5 files changed, 10 insertions(+), 5 deletions(-) diff --git a/app/models/form/sales/questions/staircase.rb b/app/models/form/sales/questions/staircase.rb index 6c98397ff..d61456a8e 100644 --- a/app/models/form/sales/questions/staircase.rb +++ b/app/models/form/sales/questions/staircase.rb @@ -2,7 +2,7 @@ class Form::Sales::Questions::Staircase < ::Form::Question def initialize(id, hsh, page) super @id = "staircase" - @copy_key = "sales.#{page.subsection.id}.staircasing" + @copy_key = "sales.#{page.subsection.copy_key}.staircasing" @type = "radio" @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] end diff --git a/app/models/form/sales/subsections/shared_ownership_scheme.rb b/app/models/form/sales/subsections/shared_ownership_scheme.rb index 455755e31..f5d52153e 100644 --- a/app/models/form/sales/subsections/shared_ownership_scheme.rb +++ b/app/models/form/sales/subsections/shared_ownership_scheme.rb @@ -4,6 +4,7 @@ class Form::Sales::Subsections::SharedOwnershipScheme < ::Form::Subsection @id = "shared_ownership_scheme" @label = "Shared ownership scheme" @depends_on = [{ "ownershipsch" => 1, "setup_completed?" => true }] + @copy_key = "sale_information" end def pages diff --git a/app/models/form/subsection.rb b/app/models/form/subsection.rb index 25a473e98..3b74e29a5 100644 --- a/app/models/form/subsection.rb +++ b/app/models/form/subsection.rb @@ -14,6 +14,10 @@ class Form::Subsection delegate :form, to: :section + def copy_key + @copy_key ||= @id + end + def questions @questions ||= pages.flat_map(&:questions) end diff --git a/spec/models/form/sales/pages/staircase_spec.rb b/spec/models/form/sales/pages/staircase_spec.rb index 3c26181c2..6ce969ec2 100644 --- a/spec/models/form/sales/pages/staircase_spec.rb +++ b/spec/models/form/sales/pages/staircase_spec.rb @@ -8,7 +8,7 @@ RSpec.describe Form::Sales::Pages::Staircase, type: :model do let(:subsection) { instance_double(Form::Subsection, form: instance_double(Form, start_date: Time.zone.local(2023, 4, 1))) } context "when start year is 2024" do - let(:subsection) { instance_double(Form::Subsection, form: instance_double(Form, start_date: Time.zone.local(2023, 4, 1)), id: "sale_information") } + let(:subsection) { instance_double(Form::Subsection, form: instance_double(Form, start_date: Time.zone.local(2023, 4, 1)), id: "shared_ownership_scheme", copy_key: "sale_information") } before do allow(subsection.form).to receive(:start_year_2025_or_later?).and_return(false) @@ -32,7 +32,7 @@ RSpec.describe Form::Sales::Pages::Staircase, type: :model do end context "when start year is >= 2025" do - let(:subsection) { instance_double(Form::Subsection, form: instance_double(Form, start_date: Time.zone.local(2023, 4, 1)), id: "setup") } + let(:subsection) { instance_double(Form::Subsection, form: instance_double(Form, start_date: Time.zone.local(2023, 4, 1)), id: "setup", copy_key: "setup") } before do allow(subsection.form).to receive(:start_year_2025_or_later?).and_return(true) diff --git a/spec/models/form/sales/questions/staircase_spec.rb b/spec/models/form/sales/questions/staircase_spec.rb index 29ba34d31..c9a9f44d8 100644 --- a/spec/models/form/sales/questions/staircase_spec.rb +++ b/spec/models/form/sales/questions/staircase_spec.rb @@ -7,7 +7,7 @@ RSpec.describe Form::Sales::Questions::Staircase, type: :model do let(:question_definition) { nil } context "when start year is 2024" do - let(:page) { instance_double(Form::Page, subsection: instance_double(Form::Subsection, form: instance_double(Form, start_date: Time.zone.local(2024, 4, 1)), id: "sale_information")) } + let(:page) { instance_double(Form::Page, subsection: instance_double(Form::Subsection, form: instance_double(Form, start_date: Time.zone.local(2024, 4, 1)), id: "shared_ownership_scheme", copy_key: "sale_information")) } before do allow(page.subsection.form).to receive(:start_year_2025_or_later?).and_return(false) @@ -43,7 +43,7 @@ RSpec.describe Form::Sales::Questions::Staircase, type: :model do end context "when start year is 2025" do - let(:page) { instance_double(Form::Page, subsection: instance_double(Form::Subsection, form: instance_double(Form, start_date: Time.zone.local(2025, 4, 1)), id: "setup")) } + let(:page) { instance_double(Form::Page, subsection: instance_double(Form::Subsection, form: instance_double(Form, start_date: Time.zone.local(2025, 4, 1)), id: "setup", copy_key: "setup")) } before do allow(page.subsection.form).to receive(:start_year_2025_or_later?).and_return(true) From f0603c35dda68f1e9b444de3c49038df3799dd95 Mon Sep 17 00:00:00 2001 From: Rachael Booth Date: Mon, 18 Nov 2024 17:33:37 +0000 Subject: [PATCH 4/8] CLDC-3705: Rework referrers and back links for scheme creation (#2775) * CLDC-3705: Rework referrers and back links for scheme creation * Fix typo on primary client group page * Only direct via secondary client group page when newly required * Update hardcoded postgres version in docker --------- Co-authored-by: Kat <54268893+kosiakkatrina@users.noreply.github.com> --- app/controllers/schemes_controller.rb | 12 +++--- app/helpers/schemes_helper.rb | 10 ++--- app/views/schemes/confirm_secondary.html.erb | 6 +-- app/views/schemes/details.html.erb | 2 +- app/views/schemes/edit_name.html.erb | 2 +- .../schemes/primary_client_group.html.erb | 8 ++-- .../schemes/secondary_client_group.html.erb | 6 +-- app/views/schemes/support.html.erb | 6 +-- spec/features/schemes_spec.rb | 27 +++++------- spec/requests/schemes_controller_spec.rb | 42 +++++++++++++++++-- 10 files changed, 71 insertions(+), 50 deletions(-) diff --git a/app/controllers/schemes_controller.rb b/app/controllers/schemes_controller.rb index 1468bc013..be5d3f7ef 100644 --- a/app/controllers/schemes_controller.rb +++ b/app/controllers/schemes_controller.rb @@ -145,8 +145,8 @@ class SchemesController < ApplicationController if @scheme.errors.empty? && @scheme.update(scheme_params) @scheme.update!(secondary_client_group: nil) if @scheme.has_other_client_group == "No" if scheme_params[:confirmed] == "true" || @scheme.confirmed? - if check_answers && confirm_secondary_page?(page) - redirect_to scheme_secondary_client_group_path(@scheme, check_answers: "true") + if check_answers && should_direct_via_secondary_client_group_page?(page) + redirect_to scheme_secondary_client_group_path(@scheme, referrer: "check-answers") else @scheme.locations.update!(confirmed: true) flash[:notice] = if scheme_previously_confirmed @@ -157,8 +157,8 @@ class SchemesController < ApplicationController redirect_to scheme_path(@scheme) end elsif check_answers - if confirm_secondary_page?(page) - redirect_to scheme_secondary_client_group_path(@scheme, check_answers: "true") + if should_direct_via_secondary_client_group_page?(page) + redirect_to scheme_secondary_client_group_path(@scheme, referrer: "check-answers") else redirect_to scheme_check_answers_path(@scheme) end @@ -249,8 +249,8 @@ private end end - def confirm_secondary_page?(page) - page == "confirm-secondary" && @scheme.has_other_client_group == "Yes" + def should_direct_via_secondary_client_group_page?(page) + page == "confirm-secondary" && @scheme.has_other_client_group == "Yes" && @scheme.secondary_client_group.nil? end def current_template(page) diff --git a/app/helpers/schemes_helper.rb b/app/helpers/schemes_helper.rb index 7efb9fffd..bcd40b082 100644 --- a/app/helpers/schemes_helper.rb +++ b/app/helpers/schemes_helper.rb @@ -64,15 +64,15 @@ module SchemesHelper def change_answer_link(scheme, question_id, user) case question_id when "service_name", "sensitive", "scheme_type", "registered_under_care_act", "owning_organisation_id", "arrangement_type" - user.support? || !scheme.confirmed? ? scheme_details_path(scheme, check_answers: true) : scheme_edit_name_path(scheme) + user.support? || !scheme.confirmed? ? scheme_details_path(scheme, referrer: "check-answers") : scheme_edit_name_path(scheme) when "primary_client_group" - scheme_primary_client_group_path(scheme, check_answers: true) + scheme_primary_client_group_path(scheme, referrer: "check-answers") when "has_other_client_group" - scheme_confirm_secondary_client_group_path(scheme, check_answers: true) + scheme_confirm_secondary_client_group_path(scheme, referrer: "check-answers") when "secondary_client_group" - scheme_secondary_client_group_path(scheme, check_answers: true) + scheme_secondary_client_group_path(scheme, referrer: "check-answers") when "support_type", "intended_stay" - scheme_support_path(scheme, check_answers: true) + scheme_support_path(scheme, referrer: "check-answers") end end diff --git a/app/views/schemes/confirm_secondary.html.erb b/app/views/schemes/confirm_secondary.html.erb index 7e7cfeebf..9b715c264 100644 --- a/app/views/schemes/confirm_secondary.html.erb +++ b/app/views/schemes/confirm_secondary.html.erb @@ -1,9 +1,7 @@ <% content_for :title, "Does this scheme provide for another client group?" %> <% content_for :before_content do %> - <%= govuk_back_link( - href: request.query_parameters["check_answers"] ? "check-answers" : "primary-client-group", - ) %> + <%= govuk_back_link(href: :back) %> <% end %> <%= render partial: "organisations/headings", locals: { main: "Does this scheme provide for another client group?", sub: @scheme.service_name } %> @@ -22,7 +20,7 @@ legend: nil %> <%= f.hidden_field :page, value: "confirm-secondary" %> - <% if request.query_parameters["check_answers"] == "true" %> + <% if params[:referrer] == "check-answers" %> <%= f.hidden_field :check_answers, value: "true" %> <%= f.govuk_submit "Save changes" %> <% else %> diff --git a/app/views/schemes/details.html.erb b/app/views/schemes/details.html.erb index 71f924782..cb29a56dc 100644 --- a/app/views/schemes/details.html.erb +++ b/app/views/schemes/details.html.erb @@ -75,7 +75,7 @@ legend: { text: "Who provides the support services used by this scheme?", size: "m" } %> <%= f.hidden_field :page, value: "details" %> - <% if request.query_parameters["check_answers"] %> + <% if params[:referrer] == "check-answers" %> <%= f.hidden_field :check_answers, value: "true" %> <%= f.govuk_submit "Save changes" %> <% else %> diff --git a/app/views/schemes/edit_name.html.erb b/app/views/schemes/edit_name.html.erb index 030635b79..2cb0f791a 100644 --- a/app/views/schemes/edit_name.html.erb +++ b/app/views/schemes/edit_name.html.erb @@ -39,7 +39,7 @@ <%= f.hidden_field :page, value: "edit-name" %> - <% if request.query_parameters["check_answers"] %> + <% if params[:referrer] == "check-answers" %> <%= f.hidden_field :check_answers, value: "true" %> <% end %> diff --git a/app/views/schemes/primary_client_group.html.erb b/app/views/schemes/primary_client_group.html.erb index 85db05b55..55dc504b4 100644 --- a/app/views/schemes/primary_client_group.html.erb +++ b/app/views/schemes/primary_client_group.html.erb @@ -1,9 +1,9 @@ <% content_for :title, "What client group is this scheme intended for?" %> -<% if request.referer&.include?("new") || request.referer&.include?("details") %> +<% if request.referer&.include?("new") %> <% back_button_path = scheme_details_path(@scheme) %> -<% elsif request.query_parameters["check_answers"] %> - <% back_button_path = scheme_check_answers_path(@scheme) %> +<% else %> + <% back_button_path = :back %> <% end %> <% content_for :before_content do %> @@ -30,7 +30,7 @@ <%= f.hidden_field :check_answers, value: "true" %> <% end %> - <% if request.query_parameters["check_answers"] == "true" %> + <% if params[:referrer] == "check-answers" %> <%= f.hidden_field :check_answers, value: "true" %> <%= f.govuk_submit "Save changes" %> <% else %> diff --git a/app/views/schemes/secondary_client_group.html.erb b/app/views/schemes/secondary_client_group.html.erb index 1e70fd92b..cd50283e3 100644 --- a/app/views/schemes/secondary_client_group.html.erb +++ b/app/views/schemes/secondary_client_group.html.erb @@ -1,9 +1,7 @@ <% content_for :title, "What is the other client group?" %> <% content_for :before_content do %> - <%= govuk_back_link( - href: request.query_parameters["check_answers"] ? "check-answers" : "confirm-secondary-client-group", - ) %> + <%= govuk_back_link(href: :back) %> <% end %> <%= form_for(@scheme, method: :patch) do |f| %> @@ -22,7 +20,7 @@ legend: nil %> <%= f.hidden_field :page, value: "secondary-client-group" %> - <% if request.query_parameters["check_answers"] == "true" %> + <% if params[:referrer] == "check-answers" %> <%= f.hidden_field :check_answers, value: "true" %> <%= f.govuk_submit "Save changes" %> <% else %> diff --git a/app/views/schemes/support.html.erb b/app/views/schemes/support.html.erb index a004a3da9..a5d30ed7f 100644 --- a/app/views/schemes/support.html.erb +++ b/app/views/schemes/support.html.erb @@ -1,9 +1,7 @@ <% content_for :title, "What support does this scheme provide?" %> <% content_for :before_content do %> - <%= govuk_back_link( - href: request.query_parameters["check_answers"] ? "check-answers" : "secondary-client-group", - ) %> + <%= govuk_back_link(href: :back) %> <% end %> <%= form_for(@scheme, method: :patch) do |f| %> @@ -38,7 +36,7 @@ <%= f.hidden_field :page, value: "support" %> - <% if request.query_parameters["check_answers"] == "true" %> + <% if params[:referrer] == "check-answers" %> <%= f.hidden_field :check_answers, value: "true" %> <%= f.govuk_submit "Save changes" %> <% else %> diff --git a/spec/features/schemes_spec.rb b/spec/features/schemes_spec.rb index 0706a0d7e..33ab00b34 100644 --- a/spec/features/schemes_spec.rb +++ b/spec/features/schemes_spec.rb @@ -644,8 +644,8 @@ RSpec.describe "Schemes scheme Features" do end it "allows changing details questions" do - click_link("Change", href: "/schemes/#{scheme.id}/details?check_answers=true", match: :first) - expect(page).to have_current_path("/schemes/#{scheme.id}/details?check_answers=true") + click_link("Change", href: "/schemes/#{scheme.id}/details?referrer=check-answers", match: :first) + expect(page).to have_current_path("/schemes/#{scheme.id}/details?referrer=check-answers") fill_in "Scheme name", with: "Example" click_button "Save changes" @@ -655,14 +655,14 @@ RSpec.describe "Schemes scheme Features" do end it "lets me select the support answers after navigating back" do - click_link("Change", href: "/schemes/#{scheme.id}/details?check_answers=true", match: :first) + click_link("Change", href: "/schemes/#{scheme.id}/details?referrer=check-answers", match: :first) click_link "Back" expect(page).to have_current_path("/schemes/#{scheme.id}/check-answers") expect(page).to have_content "Check your changes before creating this scheme" end it "indicates if the scheme is not complete" do - click_link("Change", href: "/schemes/#{scheme.id}/confirm-secondary-client-group?check_answers=true", match: :first) + click_link("Change", href: "/schemes/#{scheme.id}/confirm-secondary-client-group?referrer=check-answers", match: :first) choose "Yes" click_button "Save changes" visit("/schemes/#{scheme.id}/check-answers") @@ -710,8 +710,8 @@ RSpec.describe "Schemes scheme Features" do end it "allows changing details questions" do - click_link("Change", href: "/schemes/#{scheme.id}/details?check_answers=true", match: :first) - expect(page).to have_current_path("/schemes/#{scheme.id}/details?check_answers=true") + click_link("Change", href: "/schemes/#{scheme.id}/details?referrer=check-answers", match: :first) + expect(page).to have_current_path("/schemes/#{scheme.id}/details?referrer=check-answers") fill_in "Scheme name", with: "Example" click_button "Save changes" @@ -721,21 +721,14 @@ RSpec.describe "Schemes scheme Features" do end it "lets me select the support answers after navigating back" do - click_link("Change", href: "/schemes/#{scheme.id}/details?check_answers=true", match: :first) + click_link("Change", href: "/schemes/#{scheme.id}/details?referrer=check-answers", match: :first) click_link "Back" expect(page).to have_current_path("/schemes/#{scheme.id}/check-answers") expect(page).to have_content "Check your changes before creating this scheme" end - it "keeps the provider answer when switching between other provider options" do - click_link("Change", href: "/schemes/#{scheme.id}/confirm-secondary-client-group?check_answers=true", match: :first) - choose "Yes" - click_button "Save changes" - expect(find_field("Offenders and people at risk of offending")).to be_checked - end - it "does not display the answer if it's changed to the same support provider" do - click_link("Change", href: "/schemes/#{scheme.id}/details?check_answers=true", match: :first) + click_link("Change", href: "/schemes/#{scheme.id}/details?referrer=check-answers", match: :first) choose "The same organisation that owns the housing stock" click_button "Save changes" expect(page).not_to have_content("Organisation providing support") @@ -787,11 +780,11 @@ RSpec.describe "Schemes scheme Features" do context "when I click to change scheme name" do before do - click_link("Change", href: "/schemes/#{scheme.id}/details?check_answers=true", match: :first) + click_link("Change", href: "/schemes/#{scheme.id}/details?referrer=check-answers", match: :first) end it "shows available fields to edit" do - expect(page).to have_current_path("/schemes/#{scheme.id}/details?check_answers=true") + expect(page).to have_current_path("/schemes/#{scheme.id}/details?referrer=check-answers") expect(page).to have_content "Scheme details" end diff --git a/spec/requests/schemes_controller_spec.rb b/spec/requests/schemes_controller_spec.rb index d93bc873d..19ede5cc4 100644 --- a/spec/requests/schemes_controller_spec.rb +++ b/spec/requests/schemes_controller_spec.rb @@ -1405,10 +1405,11 @@ RSpec.describe SchemesController, type: :request do expect(scheme_to_update.reload.has_other_client_group).to eq("Yes") end - context "when updating from check answers page with the answer YES" do + context "when updating from check answers page with the answer YES and no secondary client group set" do + let(:scheme_to_update) { create(:scheme, owning_organisation: user.organisation, confirmed: nil, secondary_client_group: nil) } let(:params) { { scheme: { has_other_client_group: "Yes", page: "confirm-secondary", check_answers: "true" } } } - it "renders check answers page after successful update" do + it "renders secondary client group page after successful update" do follow_redirect! expect(response).to have_http_status(:ok) expect(page).to have_content("What is the other client group?") @@ -1420,6 +1421,22 @@ RSpec.describe SchemesController, type: :request do end end + context "when updating from check answers page with the answer YES and a secondary client group set" do + let(:scheme_to_update) { create(:scheme, owning_organisation: user.organisation, confirmed: nil, secondary_client_group: "F") } + let(:params) { { scheme: { has_other_client_group: "Yes", page: "confirm-secondary", check_answers: "true" } } } + + it "renders check answers page after successful update" do + follow_redirect! + expect(response).to have_http_status(:ok) + expect(page).to have_content("Check your changes before creating this scheme") + end + + it "updates a scheme with valid params" do + follow_redirect! + expect(scheme_to_update.reload.has_other_client_group).to eq("Yes") + end + end + context "when updating from check answers page with the answer NO" do let(:params) { { scheme: { has_other_client_group: "No", page: "confirm-secondary", check_answers: "true" } } } @@ -1716,10 +1733,11 @@ RSpec.describe SchemesController, type: :request do expect(scheme_to_update.reload.has_other_client_group).to eq("Yes") end - context "when updating from check answers page with the answer YES" do + context "when updating from check answers page with the answer YES and no existing secondary client group set" do + let(:scheme_to_update) { create(:scheme, owning_organisation: user.organisation, confirmed: nil, secondary_client_group: nil) } let(:params) { { scheme: { has_other_client_group: "Yes", page: "confirm-secondary", check_answers: "true" } } } - it "renders check answers page after successful update" do + it "renders secondary client group page after successful update" do follow_redirect! expect(response).to have_http_status(:ok) expect(page).to have_content("What is the other client group?") @@ -1731,6 +1749,22 @@ RSpec.describe SchemesController, type: :request do end end + context "when updating from check answers page with the answer YES and an existing secondary client group set" do + let(:scheme_to_update) { create(:scheme, owning_organisation: user.organisation, confirmed: nil, secondary_client_group: "F") } + let(:params) { { scheme: { has_other_client_group: "Yes", page: "confirm-secondary", check_answers: "true" } } } + + it "renders check answers page after successful update" do + follow_redirect! + expect(response).to have_http_status(:ok) + expect(page).to have_content("Check your changes before creating this scheme") + end + + it "updates a scheme with valid params" do + follow_redirect! + expect(scheme_to_update.reload.has_other_client_group).to eq("Yes") + end + end + context "when updating from check answers page with the answer NO" do let(:params) { { scheme: { has_other_client_group: "No", page: "confirm-secondary", check_answers: "true" } } } From 6fb1384364d589f6d8e8dcc181f7827a48333907 Mon Sep 17 00:00:00 2001 From: kosiakkatrina <54268893+kosiakkatrina@users.noreply.github.com> Date: Tue, 19 Nov 2024 09:37:15 +0000 Subject: [PATCH 5/8] Remove mortgage lender questions for 2025 discounted sales (#2784) --- .../discounted_ownership_scheme.rb | 14 ++++-- .../discounted_ownership_scheme_spec.rb | 44 ++++++++++++++++++- 2 files changed, 54 insertions(+), 4 deletions(-) diff --git a/app/models/form/sales/subsections/discounted_ownership_scheme.rb b/app/models/form/sales/subsections/discounted_ownership_scheme.rb index 8131df4a7..63ce4af47 100644 --- a/app/models/form/sales/subsections/discounted_ownership_scheme.rb +++ b/app/models/form/sales/subsections/discounted_ownership_scheme.rb @@ -28,8 +28,7 @@ class Form::Sales::Subsections::DiscountedOwnershipScheme < ::Form::Subsection Form::Sales::Pages::DiscountedSaleValueCheck.new("discounted_sale_mortgage_value_check", nil, self), Form::Sales::Pages::ExtraBorrowingValueCheck.new("extra_borrowing_mortgage_value_check", nil, self), Form::Sales::Pages::DepositAndMortgageValueCheck.new("discounted_ownership_deposit_and_mortgage_value_check_after_mortgage", nil, self), - Form::Sales::Pages::MortgageLender.new("mortgage_lender_discounted_ownership", nil, self, ownershipsch: 2), - Form::Sales::Pages::MortgageLenderOther.new("mortgage_lender_other_discounted_ownership", nil, self, ownershipsch: 2), + mortgage_lender_questions, Form::Sales::Pages::MortgageLength.new("mortgage_length_discounted_ownership", nil, self, ownershipsch: 2), Form::Sales::Pages::ExtraBorrowing.new("extra_borrowing_discounted_ownership", nil, self, ownershipsch: 2), Form::Sales::Pages::ExtraBorrowingValueCheck.new("extra_borrowing_value_check", nil, self), @@ -41,10 +40,19 @@ class Form::Sales::Subsections::DiscountedOwnershipScheme < ::Form::Subsection Form::Sales::Pages::DiscountedSaleValueCheck.new("discounted_sale_deposit_value_check", nil, self), Form::Sales::Pages::LeaseholdCharges.new("leasehold_charges_discounted_ownership", nil, self, ownershipsch: 2), Form::Sales::Pages::MonthlyChargesValueCheck.new("monthly_charges_discounted_ownership_value_check", nil, self), - ] + ].flatten.compact end def displayed_in_tasklist?(log) log.ownershipsch.nil? || log.ownershipsch == 2 end + + def mortgage_lender_questions + unless form.start_year_2025_or_later? + [ + Form::Sales::Pages::MortgageLender.new("mortgage_lender_discounted_ownership", nil, self, ownershipsch: 2), + Form::Sales::Pages::MortgageLenderOther.new("mortgage_lender_other_discounted_ownership", nil, self, ownershipsch: 2), + ] + end + end end diff --git a/spec/models/form/sales/subsections/discounted_ownership_scheme_spec.rb b/spec/models/form/sales/subsections/discounted_ownership_scheme_spec.rb index bfd5313fb..a573103a3 100644 --- a/spec/models/form/sales/subsections/discounted_ownership_scheme_spec.rb +++ b/spec/models/form/sales/subsections/discounted_ownership_scheme_spec.rb @@ -5,7 +5,7 @@ RSpec.describe Form::Sales::Subsections::DiscountedOwnershipScheme, type: :model let(:subsection_id) { nil } let(:subsection_definition) { nil } - let(:form) { instance_double(Form, start_date: Time.zone.local(2024, 4, 1)) } + let(:form) { instance_double(Form, start_date: Time.zone.local(2024, 4, 1), start_year_2025_or_later?: false) } let(:section) { instance_double(Form::Sales::Sections::SaleInformation, form:) } it "has correct section" do @@ -83,4 +83,46 @@ RSpec.describe Form::Sales::Subsections::DiscountedOwnershipScheme, type: :model expect(discounted_ownership_scheme.displayed_in_tasklist?(log)).to eq(false) end end + + context "with form on or after 2025" do + let(:form) { instance_double(Form, start_date: Time.zone.local(2025, 4, 1), start_year_2025_or_later?: true) } + + it "has correct pages" do + expect(discounted_ownership_scheme.pages.map(&:id)).to eq( + %w[ + living_before_purchase_discounted_ownership_joint_purchase + living_before_purchase_discounted_ownership + purchase_price + discount + extra_borrowing_price_value_check + percentage_discount_value_check + grant + grant_value_check + purchase_price_discounted_ownership + discounted_sale_grant_value_check + about_price_discounted_ownership_value_check + discounted_ownership_deposit_and_mortgage_value_check_after_value_and_discount + mortgage_used_discounted_ownership + discounted_ownership_mortgage_used_mortgage_value_check + discounted_sale_mortgage_used_value_check + mortgage_amount_discounted_ownership + discounted_ownership_mortgage_amount_mortgage_value_check + discounted_sale_mortgage_value_check + extra_borrowing_mortgage_value_check + discounted_ownership_deposit_and_mortgage_value_check_after_mortgage + mortgage_length_discounted_ownership + extra_borrowing_discounted_ownership + extra_borrowing_value_check + deposit_discounted_ownership + extra_borrowing_deposit_value_check + discounted_ownership_deposit_joint_purchase_value_check + discounted_ownership_deposit_value_check + discounted_ownership_deposit_and_mortgage_value_check_after_deposit + discounted_sale_deposit_value_check + leasehold_charges_discounted_ownership + monthly_charges_discounted_ownership_value_check + ], + ) + end + end end From 045249a9ed459fdab2375470a2a4e37697109d8e Mon Sep 17 00:00:00 2001 From: kosiakkatrina <54268893+kosiakkatrina@users.noreply.github.com> Date: Tue, 19 Nov 2024 11:04:01 +0000 Subject: [PATCH 6/8] Update scheme name wrapping (#2786) --- app/frontend/styles/_table-group.scss | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/frontend/styles/_table-group.scss b/app/frontend/styles/_table-group.scss index 6f488d6cb..a38f749dd 100644 --- a/app/frontend/styles/_table-group.scss +++ b/app/frontend/styles/_table-group.scss @@ -24,7 +24,8 @@ } .scheme-name-cell { - word-break: break-all; + overflow-wrap: break-word; + word-break: break-word; } .app-table-group:focus { From 2f221e412cf03c6247cdb3f2f64486e00bdfb53a Mon Sep 17 00:00:00 2001 From: kosiakkatrina <54268893+kosiakkatrina@users.noreply.github.com> Date: Tue, 19 Nov 2024 11:06:37 +0000 Subject: [PATCH 7/8] Count unique attributes (#2791) --- app/helpers/form_page_error_helper.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/helpers/form_page_error_helper.rb b/app/helpers/form_page_error_helper.rb index c2c13e0c6..2c90bfd2a 100644 --- a/app/helpers/form_page_error_helper.rb +++ b/app/helpers/form_page_error_helper.rb @@ -14,6 +14,6 @@ module FormPageErrorHelper end def all_questions_affected_by_errors(log) - log.errors.map(&:attribute) - [:base] + (log.errors.map(&:attribute) - [:base]).uniq end end From 05e000276dd113e9566c55e4b332ae5165919122 Mon Sep 17 00:00:00 2001 From: kosiakkatrina <54268893+kosiakkatrina@users.noreply.github.com> Date: Tue, 19 Nov 2024 11:09:00 +0000 Subject: [PATCH 8/8] Update scheme_params order (#2773) --- app/controllers/schemes_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/schemes_controller.rb b/app/controllers/schemes_controller.rb index be5d3f7ef..3df38a237 100644 --- a/app/controllers/schemes_controller.rb +++ b/app/controllers/schemes_controller.rb @@ -293,9 +293,9 @@ private def scheme_params required_params = params.require(:scheme).permit(:service_name, :sensitive, - :owning_organisation_id, :scheme_type, :registered_under_care_act, + :owning_organisation_id, :id, :has_other_client_group, :primary_client_group,