Browse Source

Merge branch 'main' into CLDC-3752-sales-2025-hide-sections-if-staircasing-transaction

pull/2780/head
Manny Dinssa 7 months ago
parent
commit
0b64c30742
  1. 2
      Dockerfile
  2. 14
      app/controllers/schemes_controller.rb
  3. 3
      app/frontend/styles/_table-group.scss
  4. 2
      app/helpers/form_page_error_helper.rb
  5. 10
      app/helpers/schemes_helper.rb
  6. 2
      app/models/form/sales/questions/staircase.rb
  7. 14
      app/models/form/sales/subsections/discounted_ownership_scheme.rb
  8. 1
      app/models/form/sales/subsections/shared_ownership_scheme.rb
  9. 4
      app/models/form/subsection.rb
  10. 4
      app/models/validations/sales/soft_validations.rb
  11. 6
      app/views/schemes/confirm_secondary.html.erb
  12. 2
      app/views/schemes/details.html.erb
  13. 2
      app/views/schemes/edit_name.html.erb
  14. 8
      app/views/schemes/primary_client_group.html.erb
  15. 6
      app/views/schemes/secondary_client_group.html.erb
  16. 6
      app/views/schemes/support.html.erb
  17. 27
      spec/features/schemes_spec.rb
  18. 4
      spec/models/form/sales/pages/staircase_spec.rb
  19. 4
      spec/models/form/sales/questions/staircase_spec.rb
  20. 44
      spec/models/form/sales/subsections/discounted_ownership_scheme_spec.rb
  21. 27
      spec/models/validations/sales/soft_validations_spec.rb
  22. 42
      spec/requests/schemes_controller_spec.rb

2
Dockerfile

@ -10,7 +10,7 @@ RUN apk add --update --no-cache tzdata && \
# build-base: compilation tools for bundle # build-base: compilation tools for bundle
# yarn: node package manager # yarn: node package manager
# postgresql-dev: postgres driver and libraries # 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 # Bundler version should be the same version as what the Gemfile.lock was bundled with
RUN gem install bundler:2.3.14 --no-document RUN gem install bundler:2.3.14 --no-document

14
app/controllers/schemes_controller.rb

@ -145,8 +145,8 @@ class SchemesController < ApplicationController
if @scheme.errors.empty? && @scheme.update(scheme_params) if @scheme.errors.empty? && @scheme.update(scheme_params)
@scheme.update!(secondary_client_group: nil) if @scheme.has_other_client_group == "No" @scheme.update!(secondary_client_group: nil) if @scheme.has_other_client_group == "No"
if scheme_params[:confirmed] == "true" || @scheme.confirmed? if scheme_params[:confirmed] == "true" || @scheme.confirmed?
if check_answers && confirm_secondary_page?(page) if check_answers && should_direct_via_secondary_client_group_page?(page)
redirect_to scheme_secondary_client_group_path(@scheme, check_answers: "true") redirect_to scheme_secondary_client_group_path(@scheme, referrer: "check-answers")
else else
@scheme.locations.update!(confirmed: true) @scheme.locations.update!(confirmed: true)
flash[:notice] = if scheme_previously_confirmed flash[:notice] = if scheme_previously_confirmed
@ -157,8 +157,8 @@ class SchemesController < ApplicationController
redirect_to scheme_path(@scheme) redirect_to scheme_path(@scheme)
end end
elsif check_answers elsif check_answers
if confirm_secondary_page?(page) if should_direct_via_secondary_client_group_page?(page)
redirect_to scheme_secondary_client_group_path(@scheme, check_answers: "true") redirect_to scheme_secondary_client_group_path(@scheme, referrer: "check-answers")
else else
redirect_to scheme_check_answers_path(@scheme) redirect_to scheme_check_answers_path(@scheme)
end end
@ -249,8 +249,8 @@ private
end end
end end
def confirm_secondary_page?(page) def should_direct_via_secondary_client_group_page?(page)
page == "confirm-secondary" && @scheme.has_other_client_group == "Yes" page == "confirm-secondary" && @scheme.has_other_client_group == "Yes" && @scheme.secondary_client_group.nil?
end end
def current_template(page) def current_template(page)
@ -293,9 +293,9 @@ private
def scheme_params def scheme_params
required_params = params.require(:scheme).permit(:service_name, required_params = params.require(:scheme).permit(:service_name,
:sensitive, :sensitive,
:owning_organisation_id,
:scheme_type, :scheme_type,
:registered_under_care_act, :registered_under_care_act,
:owning_organisation_id,
:id, :id,
:has_other_client_group, :has_other_client_group,
:primary_client_group, :primary_client_group,

3
app/frontend/styles/_table-group.scss

@ -24,7 +24,8 @@
} }
.scheme-name-cell { .scheme-name-cell {
word-break: break-all; overflow-wrap: break-word;
word-break: break-word;
} }
.app-table-group:focus { .app-table-group:focus {

2
app/helpers/form_page_error_helper.rb

@ -14,6 +14,6 @@ module FormPageErrorHelper
end end
def all_questions_affected_by_errors(log) def all_questions_affected_by_errors(log)
log.errors.map(&:attribute) - [:base] (log.errors.map(&:attribute) - [:base]).uniq
end end
end end

10
app/helpers/schemes_helper.rb

@ -64,15 +64,15 @@ module SchemesHelper
def change_answer_link(scheme, question_id, user) def change_answer_link(scheme, question_id, user)
case question_id case question_id
when "service_name", "sensitive", "scheme_type", "registered_under_care_act", "owning_organisation_id", "arrangement_type" 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" 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" 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" 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" when "support_type", "intended_stay"
scheme_support_path(scheme, check_answers: true) scheme_support_path(scheme, referrer: "check-answers")
end end
end end

2
app/models/form/sales/questions/staircase.rb

@ -2,7 +2,7 @@ class Form::Sales::Questions::Staircase < ::Form::Question
def initialize(id, hsh, page) def initialize(id, hsh, page)
super super
@id = "staircase" @id = "staircase"
@copy_key = "sales.#{page.subsection.id}.staircasing" @copy_key = "sales.#{page.subsection.copy_key}.staircasing"
@type = "radio" @type = "radio"
@question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max]
end end

14
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::DiscountedSaleValueCheck.new("discounted_sale_mortgage_value_check", nil, self),
Form::Sales::Pages::ExtraBorrowingValueCheck.new("extra_borrowing_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::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), mortgage_lender_questions,
Form::Sales::Pages::MortgageLenderOther.new("mortgage_lender_other_discounted_ownership", nil, self, ownershipsch: 2),
Form::Sales::Pages::MortgageLength.new("mortgage_length_discounted_ownership", nil, self, ownershipsch: 2), 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::ExtraBorrowing.new("extra_borrowing_discounted_ownership", nil, self, ownershipsch: 2),
Form::Sales::Pages::ExtraBorrowingValueCheck.new("extra_borrowing_value_check", nil, self), 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::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::LeaseholdCharges.new("leasehold_charges_discounted_ownership", nil, self, ownershipsch: 2),
Form::Sales::Pages::MonthlyChargesValueCheck.new("monthly_charges_discounted_ownership_value_check", nil, self), Form::Sales::Pages::MonthlyChargesValueCheck.new("monthly_charges_discounted_ownership_value_check", nil, self),
] ].flatten.compact
end end
def displayed_in_tasklist?(log) def displayed_in_tasklist?(log)
log.ownershipsch.nil? || log.ownershipsch == 2 log.ownershipsch.nil? || log.ownershipsch == 2
end 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 end

1
app/models/form/sales/subsections/shared_ownership_scheme.rb

@ -4,6 +4,7 @@ class Form::Sales::Subsections::SharedOwnershipScheme < ::Form::Subsection
@id = "shared_ownership_scheme" @id = "shared_ownership_scheme"
@label = "Shared ownership scheme" @label = "Shared ownership scheme"
@depends_on = [{ "ownershipsch" => 1, "setup_completed?" => true }] @depends_on = [{ "ownershipsch" => 1, "setup_completed?" => true }]
@copy_key = "sale_information"
end end
def pages def pages

4
app/models/form/subsection.rb

@ -14,6 +14,10 @@ class Form::Subsection
delegate :form, to: :section delegate :form, to: :section
def copy_key
@copy_key ||= @id
end
def questions def questions
@questions ||= pages.flat_map(&:questions) @questions ||= pages.flat_map(&:questions)
end end

4
app/models/validations/sales/soft_validations.rb

@ -58,7 +58,9 @@ module Validations::Sales::SoftValidations
end end
def savings_over_soft_max? 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 end
def deposit_over_soft_max? def deposit_over_soft_max?

6
app/views/schemes/confirm_secondary.html.erb

@ -1,9 +1,7 @@
<% content_for :title, "Does this scheme provide for another client group?" %> <% content_for :title, "Does this scheme provide for another client group?" %>
<% content_for :before_content do %> <% content_for :before_content do %>
<%= govuk_back_link( <%= govuk_back_link(href: :back) %>
href: request.query_parameters["check_answers"] ? "check-answers" : "primary-client-group",
) %>
<% end %> <% end %>
<%= render partial: "organisations/headings", locals: { main: "Does this scheme provide for another client group?", sub: @scheme.service_name } %> <%= render partial: "organisations/headings", locals: { main: "Does this scheme provide for another client group?", sub: @scheme.service_name } %>
@ -22,7 +20,7 @@
legend: nil %> legend: nil %>
<%= f.hidden_field :page, value: "confirm-secondary" %> <%= 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.hidden_field :check_answers, value: "true" %>
<%= f.govuk_submit "Save changes" %> <%= f.govuk_submit "Save changes" %>
<% else %> <% else %>

2
app/views/schemes/details.html.erb

@ -75,7 +75,7 @@
legend: { text: "Who provides the support services used by this scheme?", size: "m" } %> legend: { text: "Who provides the support services used by this scheme?", size: "m" } %>
<%= f.hidden_field :page, value: "details" %> <%= 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.hidden_field :check_answers, value: "true" %>
<%= f.govuk_submit "Save changes" %> <%= f.govuk_submit "Save changes" %>
<% else %> <% else %>

2
app/views/schemes/edit_name.html.erb

@ -39,7 +39,7 @@
<%= f.hidden_field :page, value: "edit-name" %> <%= 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" %> <%= f.hidden_field :check_answers, value: "true" %>
<% end %> <% end %>

8
app/views/schemes/primary_client_group.html.erb

@ -1,9 +1,9 @@
<% content_for :title, "What client group is this scheme intended for?" %> <% 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) %> <% back_button_path = scheme_details_path(@scheme) %>
<% elsif request.query_parameters["check_answers"] %> <% else %>
<% back_button_path = scheme_check_answers_path(@scheme) %> <% back_button_path = :back %>
<% end %> <% end %>
<% content_for :before_content do %> <% content_for :before_content do %>
@ -30,7 +30,7 @@
<%= f.hidden_field :check_answers, value: "true" %> <%= f.hidden_field :check_answers, value: "true" %>
<% end %> <% end %>
<% if request.query_parameters["check_answers"] == "true" %> <% if params[:referrer] == "check-answers" %>
<%= f.hidden_field :check_answers, value: "true" %> <%= f.hidden_field :check_answers, value: "true" %>
<%= f.govuk_submit "Save changes" %> <%= f.govuk_submit "Save changes" %>
<% else %> <% else %>

6
app/views/schemes/secondary_client_group.html.erb

@ -1,9 +1,7 @@
<% content_for :title, "What is the other client group?" %> <% content_for :title, "What is the other client group?" %>
<% content_for :before_content do %> <% content_for :before_content do %>
<%= govuk_back_link( <%= govuk_back_link(href: :back) %>
href: request.query_parameters["check_answers"] ? "check-answers" : "confirm-secondary-client-group",
) %>
<% end %> <% end %>
<%= form_for(@scheme, method: :patch) do |f| %> <%= form_for(@scheme, method: :patch) do |f| %>
@ -22,7 +20,7 @@
legend: nil %> legend: nil %>
<%= f.hidden_field :page, value: "secondary-client-group" %> <%= 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.hidden_field :check_answers, value: "true" %>
<%= f.govuk_submit "Save changes" %> <%= f.govuk_submit "Save changes" %>
<% else %> <% else %>

6
app/views/schemes/support.html.erb

@ -1,9 +1,7 @@
<% content_for :title, "What support does this scheme provide?" %> <% content_for :title, "What support does this scheme provide?" %>
<% content_for :before_content do %> <% content_for :before_content do %>
<%= govuk_back_link( <%= govuk_back_link(href: :back) %>
href: request.query_parameters["check_answers"] ? "check-answers" : "secondary-client-group",
) %>
<% end %> <% end %>
<%= form_for(@scheme, method: :patch) do |f| %> <%= form_for(@scheme, method: :patch) do |f| %>
@ -38,7 +36,7 @@
<%= f.hidden_field :page, value: "support" %> <%= 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.hidden_field :check_answers, value: "true" %>
<%= f.govuk_submit "Save changes" %> <%= f.govuk_submit "Save changes" %>
<% else %> <% else %>

27
spec/features/schemes_spec.rb

@ -644,8 +644,8 @@ RSpec.describe "Schemes scheme Features" do
end end
it "allows changing details questions" do it "allows changing details questions" 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)
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")
fill_in "Scheme name", with: "Example" fill_in "Scheme name", with: "Example"
click_button "Save changes" click_button "Save changes"
@ -655,14 +655,14 @@ RSpec.describe "Schemes scheme Features" do
end end
it "lets me select the support answers after navigating back" do 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" click_link "Back"
expect(page).to have_current_path("/schemes/#{scheme.id}/check-answers") expect(page).to have_current_path("/schemes/#{scheme.id}/check-answers")
expect(page).to have_content "Check your changes before creating this scheme" expect(page).to have_content "Check your changes before creating this scheme"
end end
it "indicates if the scheme is not complete" do 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" choose "Yes"
click_button "Save changes" click_button "Save changes"
visit("/schemes/#{scheme.id}/check-answers") visit("/schemes/#{scheme.id}/check-answers")
@ -710,8 +710,8 @@ RSpec.describe "Schemes scheme Features" do
end end
it "allows changing details questions" do it "allows changing details questions" 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)
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")
fill_in "Scheme name", with: "Example" fill_in "Scheme name", with: "Example"
click_button "Save changes" click_button "Save changes"
@ -721,21 +721,14 @@ RSpec.describe "Schemes scheme Features" do
end end
it "lets me select the support answers after navigating back" do 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" click_link "Back"
expect(page).to have_current_path("/schemes/#{scheme.id}/check-answers") expect(page).to have_current_path("/schemes/#{scheme.id}/check-answers")
expect(page).to have_content "Check your changes before creating this scheme" expect(page).to have_content "Check your changes before creating this scheme"
end 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 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" choose "The same organisation that owns the housing stock"
click_button "Save changes" click_button "Save changes"
expect(page).not_to have_content("Organisation providing support") 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 context "when I click to change scheme name" do
before 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 end
it "shows available fields to edit" do 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" expect(page).to have_content "Scheme details"
end end

4
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))) } 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 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 before do
allow(subsection.form).to receive(:start_year_2025_or_later?).and_return(false) 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 end
context "when start year is >= 2025" do 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 before do
allow(subsection.form).to receive(:start_year_2025_or_later?).and_return(true) allow(subsection.form).to receive(:start_year_2025_or_later?).and_return(true)

4
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 } let(:question_definition) { nil }
context "when start year is 2024" do 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 before do
allow(page.subsection.form).to receive(:start_year_2025_or_later?).and_return(false) 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 end
context "when start year is 2025" do 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 before do
allow(page.subsection.form).to receive(:start_year_2025_or_later?).and_return(true) allow(page.subsection.form).to receive(:start_year_2025_or_later?).and_return(true)

44
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_id) { nil }
let(:subsection_definition) { 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:) } let(:section) { instance_double(Form::Sales::Sections::SaleInformation, form:) }
it "has correct section" do 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) expect(discounted_ownership_scheme.displayed_in_tasklist?(log)).to eq(false)
end end
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 end

27
spec/models/validations/sales/soft_validations_spec.rb

@ -371,6 +371,33 @@ RSpec.describe Validations::Sales::SoftValidations do
expect(record) expect(record)
.not_to be_mortgage_over_soft_max .not_to be_mortgage_over_soft_max
end 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
end end

42
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") expect(scheme_to_update.reload.has_other_client_group).to eq("Yes")
end 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" } } } 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! follow_redirect!
expect(response).to have_http_status(:ok) expect(response).to have_http_status(:ok)
expect(page).to have_content("What is the other client group?") expect(page).to have_content("What is the other client group?")
@ -1420,6 +1421,22 @@ RSpec.describe SchemesController, type: :request do
end end
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 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" } } } 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") expect(scheme_to_update.reload.has_other_client_group).to eq("Yes")
end 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" } } } 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! follow_redirect!
expect(response).to have_http_status(:ok) expect(response).to have_http_status(:ok)
expect(page).to have_content("What is the other client group?") expect(page).to have_content("What is the other client group?")
@ -1731,6 +1749,22 @@ RSpec.describe SchemesController, type: :request do
end end
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 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" } } } let(:params) { { scheme: { has_other_client_group: "No", page: "confirm-secondary", check_answers: "true" } } }

Loading…
Cancel
Save