Browse Source

CLDC-3752: Sales - Hide questions if a staircasing transaction (25/26) (#2780)

* Do not ask questions from these sections when it's a staircase transaction

* Hide section/subsections from task list

* Add tests

* Fix lint

* Move logic to section model
pull/2792/head^2
Manny Dinssa 2 months ago committed by GitHub
parent
commit
502d038e9e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 15
      app/models/form/sales/subsections/household_situation.rb
  2. 15
      app/models/form/sales/subsections/income_benefits_and_savings.rb
  3. 15
      app/models/form/sales/subsections/other_household_information.rb
  4. 4
      app/models/form/section.rb
  5. 5
      app/views/logs/_tasklist.html.erb
  6. 22
      spec/models/form/sales/subsections/household_situation_spec.rb
  7. 29
      spec/models/form/sales/subsections/income_benefits_and_savings_spec.rb
  8. 62
      spec/models/form/sales/subsections/other_household_information_spec.rb

15
app/models/form/sales/subsections/household_situation.rb

@ -3,7 +3,14 @@ class Form::Sales::Subsections::HouseholdSituation < ::Form::Subsection
super super
@id = "household_situation" @id = "household_situation"
@label = "Household situation" @label = "Household situation"
@depends_on = [{ "setup_completed?" => true }] end
def depends_on
if form.start_year_2025_or_later?
[{ "setup_completed?" => true, "is_staircase?" => false }]
else
[{ "setup_completed?" => true }]
end
end end
def pages def pages
@ -16,4 +23,10 @@ class Form::Sales::Subsections::HouseholdSituation < ::Form::Subsection
Form::Sales::Pages::Buyer2PreviousHousingSituation.new(nil, nil, self), Form::Sales::Pages::Buyer2PreviousHousingSituation.new(nil, nil, self),
].flatten.compact ].flatten.compact
end end
def displayed_in_tasklist?(log)
return true unless form.start_year_2025_or_later?
log.staircase != 1
end
end end

15
app/models/form/sales/subsections/income_benefits_and_savings.rb

@ -3,7 +3,14 @@ class Form::Sales::Subsections::IncomeBenefitsAndSavings < ::Form::Subsection
super super
@id = "income_benefits_and_savings" @id = "income_benefits_and_savings"
@label = "Income, benefits and savings" @label = "Income, benefits and savings"
@depends_on = [{ "setup_completed?" => true }] end
def depends_on
if form.start_year_2025_or_later?
[{ "setup_completed?" => true, "is_staircase?" => false }]
else
[{ "setup_completed?" => true }]
end
end end
def pages def pages
@ -36,6 +43,12 @@ class Form::Sales::Subsections::IncomeBenefitsAndSavings < ::Form::Subsection
].compact ].compact
end end
def displayed_in_tasklist?(log)
return true unless form.start_year_2025_or_later?
log.staircase != 1
end
private private
def previous_shared_page def previous_shared_page

15
app/models/form/sales/subsections/other_household_information.rb

@ -3,7 +3,14 @@ class Form::Sales::Subsections::OtherHouseholdInformation < ::Form::Subsection
super super
@id = "other_household_information" @id = "other_household_information"
@label = "Other household information" @label = "Other household information"
@depends_on = [{ "setup_completed?" => true }] end
def depends_on
if form.start_year_2025_or_later?
[{ "setup_completed?" => true, "is_staircase?" => false }]
else
[{ "setup_completed?" => true }]
end
end end
def pages def pages
@ -17,4 +24,10 @@ class Form::Sales::Subsections::OtherHouseholdInformation < ::Form::Subsection
Form::Sales::Pages::HouseholdWheelchairCheck.new("wheelchair_check", nil, self), Form::Sales::Pages::HouseholdWheelchairCheck.new("wheelchair_check", nil, self),
] ]
end end
def displayed_in_tasklist?(log)
return true unless form.start_year_2025_or_later?
log.staircase != 1
end
end end

4
app/models/form/section.rb

@ -10,4 +10,8 @@ class Form::Section
@subsections = hsh["subsections"].map { |s_id, s| Form::Subsection.new(s_id, s, self) } @subsections = hsh["subsections"].map { |s_id, s| Form::Subsection.new(s_id, s, self) }
end end
end end
def displayed_in_tasklist?(log)
subsections.any? { |subsection| subsection.displayed_in_tasklist?(log) }
end
end end

5
app/views/logs/_tasklist.html.erb

@ -1,5 +1,6 @@
<ol class="app-task-list govuk-!-margin-top-8"> <ol class="app-task-list govuk-!-margin-top-8">
<% @log.form.sections.map do |section| %> <% @log.form.sections.each do |section| %>
<% next unless section.displayed_in_tasklist?(@log) %>
<li> <li>
<h2 class="app-task-list__section-heading"> <h2 class="app-task-list__section-heading">
<%= section.label %> <%= section.label %>
@ -8,7 +9,7 @@
<p class="govuk-body"><%= section.description.html_safe %></p> <p class="govuk-body"><%= section.description.html_safe %></p>
<% end %> <% end %>
<ul class="app-task-list__items"> <ul class="app-task-list__items">
<% section.subsections.map do |subsection| %> <% section.subsections.each do |subsection| %>
<% if subsection.displayed_in_tasklist?(@log) && (subsection.applicable_questions(@log).count > 0 || !subsection.enabled?(@log)) %> <% if subsection.displayed_in_tasklist?(@log) && (subsection.applicable_questions(@log).count > 0 || !subsection.enabled?(@log)) %>
<% subsection_status = subsection.status(@log) %> <% subsection_status = subsection.status(@log) %>
<li class="app-task-list__item"> <li class="app-task-list__item">

22
spec/models/form/sales/subsections/household_situation_spec.rb

@ -25,6 +25,14 @@ RSpec.describe Form::Sales::Subsections::HouseholdSituation, type: :model do
], ],
) )
end end
it "has the correct id" do
expect(household_characteristics.id).to eq("household_situation")
end
it "has the correct label" do
expect(household_characteristics.label).to eq("Household situation")
end
end end
context "when the start year is 2025" do context "when the start year is 2025" do
@ -41,17 +49,9 @@ RSpec.describe Form::Sales::Subsections::HouseholdSituation, type: :model do
], ],
) )
end end
end
it "has the correct id" do it "has correct depends on" do
expect(household_characteristics.id).to eq("household_situation") expect(household_characteristics.depends_on).to eq([{ "setup_completed?" => true, "is_staircase?" => false }])
end end
it "has the correct label" do
expect(household_characteristics.label).to eq("Household situation")
end
it "has correct depends on" do
expect(household_characteristics.depends_on).to eq([{ "setup_completed?" => true }])
end end
end end

29
spec/models/form/sales/subsections/income_benefits_and_savings_spec.rb

@ -11,8 +11,16 @@ RSpec.describe Form::Sales::Subsections::IncomeBenefitsAndSavings, type: :model
expect(subsection.section).to eq(section) expect(subsection.section).to eq(section)
end end
it "has the correct id" do
expect(subsection.id).to eq("income_benefits_and_savings")
end
it "has the correct label" do
expect(subsection.label).to eq("Income, benefits and savings")
end
describe "pages" do describe "pages" do
let(:section) { instance_double(Form::Sales::Sections::Household, form: instance_double(Form, start_date:)) } let(:section) { instance_double(Form::Sales::Sections::Household, form: instance_double(Form, start_date:, start_year_2025_or_later?: false)) }
context "when 2022" do context "when 2022" do
let(:start_date) { Time.utc(2022, 2, 8) } let(:start_date) { Time.utc(2022, 2, 8) }
@ -83,18 +91,19 @@ RSpec.describe Form::Sales::Subsections::IncomeBenefitsAndSavings, type: :model
], ],
) )
end end
end
end
it "has the correct id" do it "has correct depends on" do
expect(subsection.id).to eq("income_benefits_and_savings") expect(subsection.depends_on).to eq([{ "setup_completed?" => true }])
end
end
end end
it "has the correct label" do context "when 2025" do
expect(subsection.label).to eq("Income, benefits and savings") let(:start_date) { Time.utc(2025, 2, 8) }
end let(:section) { instance_double(Form::Sales::Sections::Household, form: instance_double(Form, start_date:, start_year_2025_or_later?: true)) }
it "has correct depends on" do it "has correct depends on" do
expect(subsection.depends_on).to eq([{ "setup_completed?" => true }]) expect(subsection.depends_on).to eq([{ "setup_completed?" => true, "is_staircase?" => false }])
end
end end
end end

62
spec/models/form/sales/subsections/other_household_information_spec.rb

@ -5,36 +5,48 @@ RSpec.describe Form::Sales::Subsections::OtherHouseholdInformation, 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(:section) { instance_double(Form::Sales::Sections::Household, form:) }
it "has correct section" do context "when 2024" do
expect(household_characteristics.section).to eq(section) let(:form) { instance_double(Form, start_date: Time.zone.local(2024, 4, 1), start_year_2025_or_later?: false) }
end let(:section) { instance_double(Form::Sales::Sections::Household, form:) }
it "has correct pages" do it "has correct section" do
expect(household_characteristics.pages.map(&:id)).to eq( expect(household_characteristics.section).to eq(section)
%w[ end
armed_forces
buyer_still_serving
armed_forces_spouse
household_disability
disability_wheelchair_check
household_wheelchair
wheelchair_check
],
)
end
it "has the correct id" do it "has correct pages" do
expect(household_characteristics.id).to eq("other_household_information") expect(household_characteristics.pages.map(&:id)).to eq(
end %w[
armed_forces
buyer_still_serving
armed_forces_spouse
household_disability
disability_wheelchair_check
household_wheelchair
wheelchair_check
],
)
end
it "has the correct label" do it "has the correct id" do
expect(household_characteristics.label).to eq("Other household information") expect(household_characteristics.id).to eq("other_household_information")
end
it "has the correct label" do
expect(household_characteristics.label).to eq("Other household information")
end
it "has correct depends on" do
expect(household_characteristics.depends_on).to eq([{ "setup_completed?" => true }])
end
end end
it "has correct depends on" do context "when 2025" do
expect(household_characteristics.depends_on).to eq([{ "setup_completed?" => true }]) let(:form) { instance_double(Form, start_date: Time.zone.local(2025, 4, 1), start_year_2025_or_later?: true) }
let(:section) { instance_double(Form::Sales::Sections::Household, form:) }
it "has correct depends on" do
expect(household_characteristics.depends_on).to eq([{ "setup_completed?" => true, "is_staircase?" => false }])
end
end end
end end

Loading…
Cancel
Save