diff --git a/app/models/form/sales/pages/buyer_live.rb b/app/models/form/sales/pages/buyer_live.rb index d0b772355..8bde09ddb 100644 --- a/app/models/form/sales/pages/buyer_live.rb +++ b/app/models/form/sales/pages/buyer_live.rb @@ -2,9 +2,10 @@ class Form::Sales::Pages::BuyerLive < ::Form::Page def initialize(id, hsh, subsection) super @id = "buyer_live" - @depends_on = [{ - "companybuy" => 2, - }] + end + + def depends_on + [{ "companybuy" => 2 }] unless form.start_year_2025_or_later? end def questions diff --git a/app/models/form/sales/pages/joint_purchase.rb b/app/models/form/sales/pages/joint_purchase.rb index bec7c88c1..a8382d1fb 100644 --- a/app/models/form/sales/pages/joint_purchase.rb +++ b/app/models/form/sales/pages/joint_purchase.rb @@ -2,11 +2,21 @@ class Form::Sales::Pages::JointPurchase < ::Form::Page def initialize(id, hsh, subsection) super @id = "joint_purchase" - @depends_on = [ - { "ownershipsch" => 1 }, - { "ownershipsch" => 2 }, - { "companybuy" => 2 }, - ] + end + + def depends_on + if form.start_year_2025_or_later? + [ + { "ownershipsch" => 1 }, + { "ownershipsch" => 2 }, + ] + else + [ + { "ownershipsch" => 1 }, + { "ownershipsch" => 2 }, + { "companybuy" => 2 }, + ] + end end def questions diff --git a/app/models/form/sales/pages/staircase.rb b/app/models/form/sales/pages/staircase.rb index 28b0d6b38..1413abadc 100644 --- a/app/models/form/sales/pages/staircase.rb +++ b/app/models/form/sales/pages/staircase.rb @@ -2,7 +2,8 @@ class Form::Sales::Pages::Staircase < ::Form::Page def initialize(id, hsh, subsection) super @id = "staircasing" - @copy_key = "sales.sale_information.staircasing" + @depends_on = [{ "ownershipsch" => 1 }] + @copy_key = "sales.#{subsection.id}.staircasing" end def questions diff --git a/app/models/form/sales/questions/staircase.rb b/app/models/form/sales/questions/staircase.rb index 9fc969735..6c98397ff 100644 --- a/app/models/form/sales/questions/staircase.rb +++ b/app/models/form/sales/questions/staircase.rb @@ -2,17 +2,25 @@ class Form::Sales::Questions::Staircase < ::Form::Question def initialize(id, hsh, page) super @id = "staircase" - @copy_key = "sales.sale_information.staircasing" + @copy_key = "sales.#{page.subsection.id}.staircasing" @type = "radio" - @answer_options = ANSWER_OPTIONS @question_number = QUESTION_NUMBER_FROM_YEAR[form.start_date.year] || QUESTION_NUMBER_FROM_YEAR[QUESTION_NUMBER_FROM_YEAR.keys.max] end - ANSWER_OPTIONS = { - "1" => { "value" => "Yes" }, - "2" => { "value" => "No" }, - "3" => { "value" => "Don’t know" }, - }.freeze + def answer_options + if form.start_year_2025_or_later? + { + "1" => { "value" => "Yes" }, + "2" => { "value" => "No" }, + }.freeze + else + { + "1" => { "value" => "Yes" }, + "2" => { "value" => "No" }, + "3" => { "value" => "Don’t know" }, + }.freeze + end + end QUESTION_NUMBER_FROM_YEAR = { 2023 => 76, 2024 => 78 }.freeze end diff --git a/app/models/form/sales/subsections/setup.rb b/app/models/form/sales/subsections/setup.rb index b0c7025c7..0c667ebda 100644 --- a/app/models/form/sales/subsections/setup.rb +++ b/app/models/form/sales/subsections/setup.rb @@ -13,11 +13,12 @@ class Form::Sales::Subsections::Setup < ::Form::Subsection Form::Sales::Pages::CreatedBy.new(nil, nil, self), Form::Sales::Pages::PurchaserCode.new(nil, nil, self), Form::Sales::Pages::OwnershipScheme.new(nil, nil, self), + (Form::Sales::Pages::Staircase.new(nil, nil, self) if form.start_year_2025_or_later?), Form::Sales::Pages::SharedOwnershipType.new(nil, nil, self), Form::Sales::Pages::DiscountedOwnershipType.new(nil, nil, self), (Form::Sales::Pages::OutrightOwnershipType.new(nil, nil, self) unless form.start_year_2025_or_later?), - Form::Sales::Pages::BuyerCompany.new(nil, nil, self), - Form::Sales::Pages::BuyerLive.new(nil, nil, self), + (Form::Sales::Pages::BuyerCompany.new(nil, nil, self) unless form.start_year_2025_or_later?), + (Form::Sales::Pages::BuyerLive.new(nil, nil, self) unless form.start_year_2025_or_later?), Form::Sales::Pages::JointPurchase.new(nil, nil, self), Form::Sales::Pages::NumberJointBuyers.new(nil, nil, self), (Form::Sales::Pages::BuyerInterview.new("buyer_interview_joint_purchase", nil, self, joint_purchase: true) if form.start_year_2024_or_later?), diff --git a/app/models/form/sales/subsections/shared_ownership_scheme.rb b/app/models/form/sales/subsections/shared_ownership_scheme.rb index 3fba8ef70..455755e31 100644 --- a/app/models/form/sales/subsections/shared_ownership_scheme.rb +++ b/app/models/form/sales/subsections/shared_ownership_scheme.rb @@ -10,7 +10,7 @@ class Form::Sales::Subsections::SharedOwnershipScheme < ::Form::Subsection @pages ||= [ Form::Sales::Pages::LivingBeforePurchase.new("living_before_purchase_shared_ownership_joint_purchase", nil, self, ownershipsch: 1, joint_purchase: true), Form::Sales::Pages::LivingBeforePurchase.new("living_before_purchase_shared_ownership", nil, self, ownershipsch: 1, joint_purchase: false), - Form::Sales::Pages::Staircase.new(nil, nil, self), + (Form::Sales::Pages::Staircase.new(nil, nil, self) unless form.start_year_2025_or_later?), Form::Sales::Pages::AboutStaircase.new("about_staircasing_joint_purchase", nil, self, joint_purchase: true), Form::Sales::Pages::AboutStaircase.new("about_staircasing_not_joint_purchase", nil, self, joint_purchase: false), Form::Sales::Pages::StaircaseBoughtValueCheck.new(nil, nil, self), diff --git a/config/locales/forms/2025/sales/sale_information.en.yml b/config/locales/forms/2025/sales/sale_information.en.yml index 51270a92e..33826e58b 100644 --- a/config/locales/forms/2025/sales/sale_information.en.yml +++ b/config/locales/forms/2025/sales/sale_information.en.yml @@ -25,11 +25,6 @@ en: hint_text: "" question_text: "Did the buyer live in the property before purchasing it?" - staircasing: - page_header: "" - check_answer_label: "Staircasing transaction" - hint_text: "A staircasing transaction is when the household purchases more shares in their property, increasing the proportion they own and decreasing the proportion the housing association owns. Once the household purchases 100% of the shares, they own the property" - question_text: "Is this a staircasing transaction?" about_staircasing: page_header: "About the staircasing transaction" stairbought: diff --git a/config/locales/forms/2025/sales/setup.en.yml b/config/locales/forms/2025/sales/setup.en.yml index 105d0ad0d..6f7c5da98 100644 --- a/config/locales/forms/2025/sales/setup.en.yml +++ b/config/locales/forms/2025/sales/setup.en.yml @@ -39,6 +39,12 @@ en: hint_text: "" question_text: "Was this purchase made through an ownership scheme?" + staircasing: + page_header: "" + check_answer_label: "Staircasing transaction" + hint_text: "A staircasing transaction is when the household purchases more shares in their property, increasing the proportion they own and decreasing the proportion the housing association owns. Once the household purchases 100% of the shares, they own the property" + question_text: "Is this a staircasing transaction?" + type: shared_ownership: page_header: "Type of shared ownership sale" @@ -51,18 +57,6 @@ en: hint_text: "" question_text: "What is the type of discounted ownership sale?" - companybuy: - page_header: "" - check_answer_label: "Company buyer" - hint_text: "" - question_text: "Is the buyer a company?" - - buylivein: - page_header: "" - check_answer_label: "Buyers living in property" - hint_text: "" - question_text: "Will any buyers live in the property?" - jointpur: page_header: "" check_answer_label: "Joint purchase" diff --git a/spec/models/form/sales/pages/buyer_live_spec.rb b/spec/models/form/sales/pages/buyer_live_spec.rb index ac5ac2c27..1880c37e3 100644 --- a/spec/models/form/sales/pages/buyer_live_spec.rb +++ b/spec/models/form/sales/pages/buyer_live_spec.rb @@ -8,32 +8,50 @@ RSpec.describe Form::Sales::Pages::BuyerLive, type: :model do let(:page_id) { nil } let(:page_definition) { nil } let(:subsection) { instance_double(Form::Subsection) } - let(:form) { instance_double(Form, start_date: current_collection_start_date) } - before do - allow(form).to receive(:start_year_2024_or_later?).and_return(true) - allow(subsection).to receive(:form).and_return(form) - end + context "when start year is 2024" do + let(:form) { instance_double(Form, start_date: Time.zone.local(2024, 4, 1)) } - it "has correct subsection" do - expect(page.subsection).to eq(subsection) - end + before do + allow(form).to receive(:start_year_2024_or_later?).and_return(true) + allow(form).to receive(:start_year_2025_or_later?).and_return(false) + allow(subsection).to receive(:form).and_return(form) + end - it "has correct questions" do - expect(page.questions.map(&:id)).to eq(%w[buylivein]) - end + it "has correct subsection" do + expect(page.subsection).to eq(subsection) + end - it "has the correct id" do - expect(page.id).to eq("buyer_live") - end + it "has correct questions" do + expect(page.questions.map(&:id)).to eq(%w[buylivein]) + end - it "has the correct description" do - expect(page.description).to be_nil + it "has the correct id" do + expect(page.id).to eq("buyer_live") + end + + it "has the correct description" do + expect(page.description).to be_nil + end + + it "has correct depends_on" do + expect(page.depends_on).to eq([{ + "companybuy" => 2, + }]) + end end - it "has correct depends_on" do - expect(page.depends_on).to eq([{ - "companybuy" => 2, - }]) + context "when start year is 2025" do + let(:form) { instance_double(Form, start_date: Time.zone.local(2025, 4, 1)) } + + before do + allow(form).to receive(:start_year_2024_or_later?).and_return(true) + allow(form).to receive(:start_year_2025_or_later?).and_return(true) + allow(subsection).to receive(:form).and_return(form) + end + + it "has correct depends_on" do + expect(page.depends_on).to be_nil + end end end diff --git a/spec/models/form/sales/pages/joint_purchase_spec.rb b/spec/models/form/sales/pages/joint_purchase_spec.rb index 4ccefd03d..bba9384ad 100644 --- a/spec/models/form/sales/pages/joint_purchase_spec.rb +++ b/spec/models/form/sales/pages/joint_purchase_spec.rb @@ -5,29 +5,53 @@ RSpec.describe Form::Sales::Pages::JointPurchase, type: :model do let(:page_id) { nil } let(:page_definition) { nil } - let(:subsection) { instance_double(Form::Subsection, form: instance_double(Form, start_date: Time.zone.local(2023, 4, 1))) } - it "has correct subsection" do - expect(page.subsection).to eq(subsection) - end + context "when start year is 2024" do + let(:subsection) { instance_double(Form::Subsection, form: instance_double(Form, start_date: Time.zone.local(2024, 4, 1))) } - it "has correct questions" do - expect(page.questions.map(&:id)).to eq(%w[jointpur]) - end + before do + allow(subsection.form).to receive(:start_year_2024_or_later?).and_return(true) + allow(subsection.form).to receive(:start_year_2025_or_later?).and_return(false) + end - it "has the correct id" do - expect(page.id).to eq("joint_purchase") - end + it "has correct subsection" do + expect(page.subsection).to eq(subsection) + end + + it "has correct questions" do + expect(page.questions.map(&:id)).to eq(%w[jointpur]) + end - it "has the correct description" do - expect(page.description).to be_nil + it "has the correct id" do + expect(page.id).to eq("joint_purchase") + end + + it "has the correct description" do + expect(page.description).to be_nil + end + + it "has correct depends_on" do + expect(page.depends_on).to eq([ + { "ownershipsch" => 1 }, + { "ownershipsch" => 2 }, + { "companybuy" => 2 }, + ]) + end end - it "has correct depends_on" do - expect(page.depends_on).to eq([ - { "ownershipsch" => 1 }, - { "ownershipsch" => 2 }, - { "companybuy" => 2 }, - ]) + context "when start year is 2025" do + let(:subsection) { instance_double(Form::Subsection, form: instance_double(Form, start_date: Time.zone.local(2025, 4, 1))) } + + before do + allow(subsection.form).to receive(:start_year_2024_or_later?).and_return(true) + allow(subsection.form).to receive(:start_year_2025_or_later?).and_return(true) + end + + it "has correct depends_on" do + expect(page.depends_on).to eq([ + { "ownershipsch" => 1 }, + { "ownershipsch" => 2 }, + ]) + end end end diff --git a/spec/models/form/sales/pages/staircase_spec.rb b/spec/models/form/sales/pages/staircase_spec.rb index 6f17e7e89..3c26181c2 100644 --- a/spec/models/form/sales/pages/staircase_spec.rb +++ b/spec/models/form/sales/pages/staircase_spec.rb @@ -7,19 +7,39 @@ RSpec.describe Form::Sales::Pages::Staircase, type: :model do let(:page_definition) { nil } let(:subsection) { instance_double(Form::Subsection, form: instance_double(Form, start_date: Time.zone.local(2023, 4, 1))) } - it "has correct subsection" do - expect(page.subsection).to eq(subsection) - end + 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") } - it "has correct questions" do - expect(page.questions.map(&:id)).to eq(%w[staircase]) - end + before do + allow(subsection.form).to receive(:start_year_2025_or_later?).and_return(false) + end + + it "has correct subsection" do + expect(page.subsection).to eq(subsection) + end + + it "has correct questions" do + expect(page.questions.map(&:id)).to eq(%w[staircase]) + end - it "has the correct id" do - expect(page.id).to eq("staircasing") + it "has the correct id" do + expect(page.id).to eq("staircasing") + end + + it "has the correct description" do + expect(page.description).to be_nil + end end - it "has the correct description" do - expect(page.description).to be_nil + 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") } + + before do + allow(subsection.form).to receive(:start_year_2025_or_later?).and_return(true) + end + + it "has correct subsection" do + expect(page.subsection).to eq(subsection) + end end end diff --git a/spec/models/form/sales/questions/staircase_spec.rb b/spec/models/form/sales/questions/staircase_spec.rb index 7b45891da..29ba34d31 100644 --- a/spec/models/form/sales/questions/staircase_spec.rb +++ b/spec/models/form/sales/questions/staircase_spec.rb @@ -5,33 +5,55 @@ RSpec.describe Form::Sales::Questions::Staircase, type: :model do let(:question_id) { nil } let(:question_definition) { nil } - let(:page) { instance_double(Form::Page, subsection: instance_double(Form::Subsection, form: instance_double(Form, start_date: Time.zone.local(2023, 4, 1)))) } - it "has correct page" do - expect(question.page).to eq(page) - end + 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")) } - it "has the correct id" do - expect(question.id).to eq("staircase") - end + before do + allow(page.subsection.form).to receive(:start_year_2025_or_later?).and_return(false) + end - it "has the correct type" do - expect(question.type).to eq("radio") - end + it "has correct page" do + expect(question.page).to eq(page) + end - it "is not marked as derived" do - expect(question.derived?(nil)).to be false - end + it "has the correct id" do + expect(question.id).to eq("staircase") + end + + it "has the correct type" do + expect(question.type).to eq("radio") + end - it "has the correct answer_options" do - expect(question.answer_options).to eq({ - "1" => { "value" => "Yes" }, - "2" => { "value" => "No" }, - "3" => { "value" => "Don’t know" }, - }) + it "is not marked as derived" do + expect(question.derived?(nil)).to be false + end + + it "has the correct answer_options" do + expect(question.answer_options).to eq({ + "1" => { "value" => "Yes" }, + "2" => { "value" => "No" }, + "3" => { "value" => "Don’t know" }, + }) + end + + it "has correct conditional for" do + expect(question.conditional_for).to eq(nil) + end end - it "has correct conditional for" do - expect(question.conditional_for).to eq(nil) + 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")) } + + before do + allow(page.subsection.form).to receive(:start_year_2025_or_later?).and_return(true) + end + + it "has the correct answer_options" do + expect(question.answer_options).to eq({ + "1" => { "value" => "Yes" }, + "2" => { "value" => "No" }, + }) + end end end diff --git a/spec/models/form/sales/subsections/setup_spec.rb b/spec/models/form/sales/subsections/setup_spec.rb index 1cd363105..ad01ccd41 100644 --- a/spec/models/form/sales/subsections/setup_spec.rb +++ b/spec/models/form/sales/subsections/setup_spec.rb @@ -93,10 +93,9 @@ RSpec.describe Form::Sales::Subsections::Setup, type: :model do assigned_to purchaser_code ownership_scheme + staircasing shared_ownership_type discounted_ownership_type - buyer_company - buyer_live joint_purchase number_joint_buyers buyer_interview_joint_purchase diff --git a/spec/models/form/sales/subsections/shared_ownership_scheme_spec.rb b/spec/models/form/sales/subsections/shared_ownership_scheme_spec.rb index 8c5674d0b..4c546d58c 100644 --- a/spec/models/form/sales/subsections/shared_ownership_scheme_spec.rb +++ b/spec/models/form/sales/subsections/shared_ownership_scheme_spec.rb @@ -8,7 +8,7 @@ RSpec.describe Form::Sales::Subsections::SharedOwnershipScheme, type: :model do let(:section) { instance_double(Form::Sales::Sections::SaleInformation) } before do - allow(section).to receive(:form).and_return(instance_double(Form, start_year_2024_or_later?: false, start_date: Time.zone.local(2023, 4, 1))) + allow(section).to receive(:form).and_return(instance_double(Form, start_year_2024_or_later?: false, start_year_2025_or_later?: false, start_date: Time.zone.local(2023, 4, 1))) end it "has correct section" do