From 223f1420601ff0babad49d2fd1aae2aafe47285e Mon Sep 17 00:00:00 2001 From: natdeanlewissoftwire <94526761+natdeanlewissoftwire@users.noreply.github.com> Date: Thu, 23 Feb 2023 15:05:15 +0000 Subject: [PATCH] CLDC-1812 Length of stay in property before purchase updates (#1296) * feat: conditional question * db:update * tests: add tests for year dependent behaviour * db: migrate --- .../sales/pages/living_before_purchase.rb | 11 +- .../sales/questions/living_before_purchase.rb | 31 +++-- .../questions/living_before_purchase_years.rb | 31 +++++ ...13140932_add_proplen_asked_to_sales_log.rb | 5 + db/schema.rb | 5 +- .../pages/living_before_purchase_spec.rb | 20 ++- .../questions/living_before_purchase_spec.rb | 31 ++--- .../living_before_purchase_years_spec.rb | 114 ++++++++++++++++++ 8 files changed, 209 insertions(+), 39 deletions(-) create mode 100644 app/models/form/sales/questions/living_before_purchase_years.rb create mode 100644 db/migrate/20230213140932_add_proplen_asked_to_sales_log.rb create mode 100644 spec/models/form/sales/questions/living_before_purchase_years_spec.rb diff --git a/app/models/form/sales/pages/living_before_purchase.rb b/app/models/form/sales/pages/living_before_purchase.rb index 5fa695bbc..ac61ab1de 100644 --- a/app/models/form/sales/pages/living_before_purchase.rb +++ b/app/models/form/sales/pages/living_before_purchase.rb @@ -1,7 +1,14 @@ class Form::Sales::Pages::LivingBeforePurchase < ::Form::Page def questions @questions ||= [ - Form::Sales::Questions::LivingBeforePurchase.new(nil, nil, self), - ] + living_before_purchase, + Form::Sales::Questions::LivingBeforePurchaseYears.new(nil, nil, self), + ].compact + end + + def living_before_purchase + if form.start_date.year >= 2023 + Form::Sales::Questions::LivingBeforePurchase.new(nil, nil, self) + end end end diff --git a/app/models/form/sales/questions/living_before_purchase.rb b/app/models/form/sales/questions/living_before_purchase.rb index feedaac63..f631220dc 100644 --- a/app/models/form/sales/questions/living_before_purchase.rb +++ b/app/models/form/sales/questions/living_before_purchase.rb @@ -1,15 +1,26 @@ class Form::Sales::Questions::LivingBeforePurchase < ::Form::Question def initialize(id, hsh, page) super - @id = "proplen" - @check_answer_label = "Number of years living in the property before purchase" - @header = "How long did the buyer(s) live in the property before purchase?" - @hint_text = "You should round this up to the nearest year. If the buyers haven't been living in the property, enter '0'" - @type = "numeric" - @min = 0 - @max = 80 - @step = 1 - @width = 5 - @suffix = " years" + @id = "proplen_asked" + @check_answer_label = "Buyer lived in the property before purchasing" + @header = "Did the buyer live in the property before purchasing it?" + @hint_text = nil + @type = "radio" + @answer_options = ANSWER_OPTIONS + @conditional_for = { + "proplen" => [0], + } + @hidden_in_check_answers = { + "depends_on" => [ + { + "proplen_asked" => 0, + }, + ], + } end + + ANSWER_OPTIONS = { + "0" => { "value" => "Yes" }, + "1" => { "value" => "No" }, + }.freeze end diff --git a/app/models/form/sales/questions/living_before_purchase_years.rb b/app/models/form/sales/questions/living_before_purchase_years.rb new file mode 100644 index 000000000..f3f1e58a7 --- /dev/null +++ b/app/models/form/sales/questions/living_before_purchase_years.rb @@ -0,0 +1,31 @@ +class Form::Sales::Questions::LivingBeforePurchaseYears < ::Form::Question + def initialize(id, hsh, page) + super + @id = "proplen" + @check_answer_label = "Number of years living in the property before purchase" + @header = header_text + @hint_text = hint_text + @type = "numeric" + @min = 0 + @max = 80 + @step = 1 + @width = 5 + @suffix = " years" + end + + def header_text + if form.start_date.year >= 2023 + "How long did they live there?" + else + "How long did the buyer(s) live in the property before purchase?" + end + end + + def hint_text + if form.start_date.year >= 2023 + "You should round up to the nearest year" + else + "You should round this up to the nearest year. If the buyers haven't been living in the property, enter '0'" + end + end +end diff --git a/db/migrate/20230213140932_add_proplen_asked_to_sales_log.rb b/db/migrate/20230213140932_add_proplen_asked_to_sales_log.rb new file mode 100644 index 000000000..e32a5836e --- /dev/null +++ b/db/migrate/20230213140932_add_proplen_asked_to_sales_log.rb @@ -0,0 +1,5 @@ +class AddProplenAskedToSalesLog < ActiveRecord::Migration[7.0] + def change + add_column :sales_logs, :proplen_asked, :integer + end +end diff --git a/db/schema.rb b/db/schema.rb index 6cb5420d5..1747fa6c5 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema[7.0].define(version: 2023_02_10_143120) do +ActiveRecord::Schema[7.0].define(version: 2023_02_13_140932) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -490,6 +490,7 @@ ActiveRecord::Schema[7.0].define(version: 2023_02_10_143120) do t.integer "prevten" t.integer "mortgageused" t.integer "wchair" + t.integer "income2_value_check" t.integer "armedforcesspouse" t.datetime "hodate", precision: nil t.integer "hoday" @@ -520,7 +521,6 @@ ActiveRecord::Schema[7.0].define(version: 2023_02_10_143120) do t.integer "value_value_check" t.integer "old_persons_shared_ownership_value_check" t.integer "staircase_bought_value_check" - t.integer "income2_value_check" t.integer "monthly_charges_value_check" t.integer "details_known_5" t.integer "details_known_6" @@ -529,6 +529,7 @@ ActiveRecord::Schema[7.0].define(version: 2023_02_10_143120) do t.integer "staircasesale" t.integer "ethnic_group2" t.integer "ethnicbuy2" + t.integer "proplen_asked" t.index ["bulk_upload_id"], name: "index_sales_logs_on_bulk_upload_id" t.index ["created_by_id"], name: "index_sales_logs_on_created_by_id" t.index ["owning_organisation_id"], name: "index_sales_logs_on_owning_organisation_id" diff --git a/spec/models/form/sales/pages/living_before_purchase_spec.rb b/spec/models/form/sales/pages/living_before_purchase_spec.rb index 435229831..76dbd7609 100644 --- a/spec/models/form/sales/pages/living_before_purchase_spec.rb +++ b/spec/models/form/sales/pages/living_before_purchase_spec.rb @@ -11,8 +11,24 @@ RSpec.describe Form::Sales::Pages::LivingBeforePurchase, type: :model do expect(page.subsection).to eq(subsection) end - it "has correct questions" do - expect(page.questions.map(&:id)).to eq(%w[proplen]) + describe "questions" do + let(:subsection) { instance_double(Form::Subsection, form: instance_double(Form, start_date:)) } + + context "when 2022" do + let(:start_date) { Time.utc(2022, 2, 8) } + + it "has correct questions" do + expect(page.questions.map(&:id)).to eq(%w[proplen]) + end + end + + context "when 2023" do + let(:start_date) { Time.utc(2023, 2, 8) } + + it "has correct questions" do + expect(page.questions.map(&:id)).to eq(%w[proplen_asked proplen]) + end + end end it "has the correct id" do diff --git a/spec/models/form/sales/questions/living_before_purchase_spec.rb b/spec/models/form/sales/questions/living_before_purchase_spec.rb index 29f785c06..530bb151a 100644 --- a/spec/models/form/sales/questions/living_before_purchase_spec.rb +++ b/spec/models/form/sales/questions/living_before_purchase_spec.rb @@ -12,19 +12,19 @@ RSpec.describe Form::Sales::Questions::LivingBeforePurchase, type: :model do end it "has the correct id" do - expect(question.id).to eq("proplen") + expect(question.id).to eq("proplen_asked") end it "has the correct header" do - expect(question.header).to eq("How long did the buyer(s) live in the property before purchase?") + expect(question.header).to eq("Did the buyer live in the property before purchasing it?") end it "has the correct check_answer_label" do - expect(question.check_answer_label).to eq("Number of years living in the property before purchase") + expect(question.check_answer_label).to eq("Buyer lived in the property before purchasing") end it "has the correct type" do - expect(question.type).to eq("numeric") + expect(question.type).to eq("radio") end it "is not marked as derived" do @@ -32,26 +32,11 @@ RSpec.describe Form::Sales::Questions::LivingBeforePurchase, type: :model do end it "has the correct hint" do - expect(question.hint_text).to eq("You should round this up to the nearest year. If the buyers haven't been living in the property, enter '0'") + expect(question.hint_text).to be_nil end - it "has correct width" do - expect(question.width).to eq(5) - end - - it "has correct step" do - expect(question.step).to eq(1) - end - - it "has correct suffix" do - expect(question.suffix).to eq(" years") - end - - it "has correct min" do - expect(question.min).to eq(0) - end - - it "has correct max" do - expect(question.max).to eq(80) + it "has the correct answer_options" do + expect(question.answer_options).to eq("0" => { "value" => "Yes" }, + "1" => { "value" => "No" }) end end diff --git a/spec/models/form/sales/questions/living_before_purchase_years_spec.rb b/spec/models/form/sales/questions/living_before_purchase_years_spec.rb new file mode 100644 index 000000000..5fdb5ccba --- /dev/null +++ b/spec/models/form/sales/questions/living_before_purchase_years_spec.rb @@ -0,0 +1,114 @@ +require "rails_helper" + +RSpec.describe Form::Sales::Questions::LivingBeforePurchaseYears, type: :model do + subject(:question) { described_class.new(question_id, question_definition, page) } + + let(:question_id) { nil } + let(:question_definition) { nil } + let(:subsection) { instance_double(Form::Subsection, form: instance_double(Form, start_date:)) } + let(:page) { instance_double(Form::Page, subsection:) } + + context "when 2022" do + let(:start_date) { Time.utc(2022, 2, 8) } + + it "has correct page" do + expect(question.page).to eq(page) + end + + it "has the correct id" do + expect(question.id).to eq("proplen") + end + + it "has the correct header" do + expect(question.header).to eq("How long did the buyer(s) live in the property before purchase?") + end + + it "has the correct check_answer_label" do + expect(question.check_answer_label).to eq("Number of years living in the property before purchase") + end + + it "has the correct type" do + expect(question.type).to eq("numeric") + end + + it "is not marked as derived" do + expect(question.derived?).to be false + end + + it "has the correct hint" do + expect(question.hint_text).to eq("You should round this up to the nearest year. If the buyers haven't been living in the property, enter '0'") + end + + it "has correct width" do + expect(question.width).to eq(5) + end + + it "has correct step" do + expect(question.step).to eq(1) + end + + it "has correct suffix" do + expect(question.suffix).to eq(" years") + end + + it "has correct min" do + expect(question.min).to eq(0) + end + + it "has correct max" do + expect(question.max).to eq(80) + end + end + + context "when 2023" do + let(:start_date) { Time.utc(2023, 2, 8) } + + it "has correct page" do + expect(question.page).to eq(page) + end + + it "has the correct id" do + expect(question.id).to eq("proplen") + end + + it "has the correct header" do + expect(question.header).to eq("How long did they live there?") + end + + it "has the correct check_answer_label" do + expect(question.check_answer_label).to eq("Number of years living in the property before purchase") + end + + it "has the correct type" do + expect(question.type).to eq("numeric") + end + + it "is not marked as derived" do + expect(question.derived?).to be false + end + + it "has the correct hint" do + expect(question.hint_text).to eq("You should round up to the nearest year") + end + + it "has correct width" do + expect(question.width).to eq(5) + end + + it "has correct step" do + expect(question.step).to eq(1) + end + + it "has correct suffix" do + expect(question.suffix).to eq(" years") + end + + it "has correct min" do + expect(question.min).to eq(0) + end + + it "has correct max" do + expect(question.max).to eq(80) + end + end +end