From 82f23d74fa071292c172ef1f27a51ef66f6510a8 Mon Sep 17 00:00:00 2001 From: Manny Dinssa <44172848+Dinssa@users.noreply.github.com> Date: Thu, 21 Nov 2024 12:18:59 +0000 Subject: [PATCH] Update displayed answer options --- .../form/sales/questions/mortgageused.rb | 2 +- .../form/sales/questions/mortgageused_spec.rb | 100 ++++++++++++++---- 2 files changed, 79 insertions(+), 23 deletions(-) diff --git a/app/models/form/sales/questions/mortgageused.rb b/app/models/form/sales/questions/mortgageused.rb index 8059796bb..433fdef16 100644 --- a/app/models/form/sales/questions/mortgageused.rb +++ b/app/models/form/sales/questions/mortgageused.rb @@ -13,7 +13,7 @@ class Form::Sales::Questions::Mortgageused < ::Form::Question def displayed_answer_options(log, _user = nil) if log.outright_sale? && log.saledate && !form.start_year_2024_or_later? answer_options_without_dont_know - elsif log.stairowned == 100 || log.outright_sale? || form.start_year_2025_or_later? + elsif log.stairowned_100? || log.outright_sale? || (log.is_staircase? && form.start_year_2025_or_later?) ANSWER_OPTIONS else answer_options_without_dont_know diff --git a/spec/models/form/sales/questions/mortgageused_spec.rb b/spec/models/form/sales/questions/mortgageused_spec.rb index e85238a4d..305d7cb82 100644 --- a/spec/models/form/sales/questions/mortgageused_spec.rb +++ b/spec/models/form/sales/questions/mortgageused_spec.rb @@ -3,28 +3,39 @@ require "rails_helper" RSpec.describe Form::Sales::Questions::Mortgageused, type: :model do subject(:question) { described_class.new(question_id, question_definition, page, ownershipsch:) } - let(:ownershipsch) { 1 } let(:question_id) { nil } let(:question_definition) { nil } - let(:form) { instance_double(Form, start_date: Time.zone.local(2024, 4, 1)) } - let(:page) { instance_double(Form::Page, subsection: instance_double(Form::Subsection, form:)) } let(:stairowned) { nil } let(:staircase) { nil } let(:saledate) { Time.zone.today } let(:log) { build(:sales_log, :in_progress, ownershipsch:, stairowned:, staircase:) } - 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 + context "when the form start year is 2024" do + let(:form) { instance_double(Form, start_date: Time.zone.local(2024, 4, 1)) } + let(:page) { instance_double(Form::Page, subsection: instance_double(Form::Subsection, form:)) } + let(:saledate) { Time.zone.local(2024, 5, 1) } + let(:ownershipsch) { 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 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 - describe "the displayed answer options" do context "when it is a discounted ownership sale" do let(:ownershipsch) { 2 } + it "shows the correct question number" do + expect(question.question_number).to eq 104 + end + it "does not show the don't know option" do expect_the_question_not_to_show_dont_know end @@ -34,20 +45,14 @@ RSpec.describe Form::Sales::Questions::Mortgageused, type: :model do let(:ownershipsch) { 3 } context "and the saledate is before 24/25" do - before do - allow(form).to receive(:start_year_2024_or_later?).and_return false - end + let(:saledate) { Time.zone.local(2023, 5, 1) }\ - it "does not show the don't know option" do - expect_the_question_not_to_show_dont_know + it "does show the don't know option" do + expect_the_question_to_show_dont_know end end - context "and the saledate is 24/25 or after" do - before do - allow(form).to receive(:start_year_2024_or_later?).and_return true - end - + context "and the saledate is 24/25" do it "shows the don't know option" do expect_the_question_to_show_dont_know end @@ -87,7 +92,58 @@ RSpec.describe Form::Sales::Questions::Mortgageused, type: :model do end end -private + context "when the form start year is 2025" do + let(:form) { instance_double(Form, start_date: Time.zone.local(2025, 4, 1)) } + let(:page) { instance_double(Form::Page, subsection: instance_double(Form::Subsection, form:)) } + let(:saledate) { Time.zone.local(2025, 5, 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 + end + + context "when it is a discounted ownership sale" do + let(:ownershipsch) { 2 } + + it "shows the correct question number" do + expect(question.question_number).to eq 104 + end + + it "does not show the don't know option" do + expect_the_question_not_to_show_dont_know + end + end + + context "when it is a shared ownership scheme" do + let(:ownershipsch) { 1 } + + context "and it is a staircasing transaction" do + let(:staircase) { 1 } + + it "does show the don't know option" do + expect_the_question_to_show_dont_know + end + + context "and stairowned is 100" do + let(:stairowned) { 100 } + + it "shows the don't know option" do + expect_the_question_to_show_dont_know + end + end + end + + context "and it is not a staircasing transaction" do + let(:staircase) { 2 } + + it "does not show the don't know option" do + expect_the_question_not_to_show_dont_know + end + end + end + end + + private def expect_the_question_not_to_show_dont_know expect(question.displayed_answer_options(log)).to eq({