Browse Source

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
pull/1285/head^2
natdeanlewissoftwire 2 years ago committed by GitHub
parent
commit
223f142060
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 11
      app/models/form/sales/pages/living_before_purchase.rb
  2. 31
      app/models/form/sales/questions/living_before_purchase.rb
  3. 31
      app/models/form/sales/questions/living_before_purchase_years.rb
  4. 5
      db/migrate/20230213140932_add_proplen_asked_to_sales_log.rb
  5. 5
      db/schema.rb
  6. 16
      spec/models/form/sales/pages/living_before_purchase_spec.rb
  7. 31
      spec/models/form/sales/questions/living_before_purchase_spec.rb
  8. 114
      spec/models/form/sales/questions/living_before_purchase_years_spec.rb

11
app/models/form/sales/pages/living_before_purchase.rb

@ -1,7 +1,14 @@
class Form::Sales::Pages::LivingBeforePurchase < ::Form::Page class Form::Sales::Pages::LivingBeforePurchase < ::Form::Page
def questions def questions
@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
end end

31
app/models/form/sales/questions/living_before_purchase.rb

@ -1,15 +1,26 @@
class Form::Sales::Questions::LivingBeforePurchase < ::Form::Question class Form::Sales::Questions::LivingBeforePurchase < ::Form::Question
def initialize(id, hsh, page) def initialize(id, hsh, page)
super super
@id = "proplen" @id = "proplen_asked"
@check_answer_label = "Number of years living in the property before purchase" @check_answer_label = "Buyer lived in the property before purchasing"
@header = "How long did the buyer(s) live in the property before purchase?" @header = "Did the buyer live in the property before purchasing it?"
@hint_text = "You should round this up to the nearest year. If the buyers haven't been living in the property, enter '0'" @hint_text = nil
@type = "numeric" @type = "radio"
@min = 0 @answer_options = ANSWER_OPTIONS
@max = 80 @conditional_for = {
@step = 1 "proplen" => [0],
@width = 5 }
@suffix = " years" @hidden_in_check_answers = {
"depends_on" => [
{
"proplen_asked" => 0,
},
],
}
end end
ANSWER_OPTIONS = {
"0" => { "value" => "Yes" },
"1" => { "value" => "No" },
}.freeze
end end

31
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

5
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

5
db/schema.rb

@ -10,7 +10,7 @@
# #
# It's strongly recommended that you check this file into your version control system. # 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 # These are extensions that must be enabled in order to support this database
enable_extension "plpgsql" enable_extension "plpgsql"
@ -490,6 +490,7 @@ ActiveRecord::Schema[7.0].define(version: 2023_02_10_143120) do
t.integer "prevten" t.integer "prevten"
t.integer "mortgageused" t.integer "mortgageused"
t.integer "wchair" t.integer "wchair"
t.integer "income2_value_check"
t.integer "armedforcesspouse" t.integer "armedforcesspouse"
t.datetime "hodate", precision: nil t.datetime "hodate", precision: nil
t.integer "hoday" 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 "value_value_check"
t.integer "old_persons_shared_ownership_value_check" t.integer "old_persons_shared_ownership_value_check"
t.integer "staircase_bought_value_check" t.integer "staircase_bought_value_check"
t.integer "income2_value_check"
t.integer "monthly_charges_value_check" t.integer "monthly_charges_value_check"
t.integer "details_known_5" t.integer "details_known_5"
t.integer "details_known_6" 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 "staircasesale"
t.integer "ethnic_group2" t.integer "ethnic_group2"
t.integer "ethnicbuy2" t.integer "ethnicbuy2"
t.integer "proplen_asked"
t.index ["bulk_upload_id"], name: "index_sales_logs_on_bulk_upload_id" 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 ["created_by_id"], name: "index_sales_logs_on_created_by_id"
t.index ["owning_organisation_id"], name: "index_sales_logs_on_owning_organisation_id" t.index ["owning_organisation_id"], name: "index_sales_logs_on_owning_organisation_id"

16
spec/models/form/sales/pages/living_before_purchase_spec.rb

@ -11,9 +11,25 @@ RSpec.describe Form::Sales::Pages::LivingBeforePurchase, type: :model do
expect(page.subsection).to eq(subsection) expect(page.subsection).to eq(subsection)
end end
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 it "has correct questions" do
expect(page.questions.map(&:id)).to eq(%w[proplen]) expect(page.questions.map(&:id)).to eq(%w[proplen])
end 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 it "has the correct id" do
expect(page.id).to eq(nil) expect(page.id).to eq(nil)

31
spec/models/form/sales/questions/living_before_purchase_spec.rb

@ -12,19 +12,19 @@ RSpec.describe Form::Sales::Questions::LivingBeforePurchase, type: :model do
end end
it "has the correct id" do it "has the correct id" do
expect(question.id).to eq("proplen") expect(question.id).to eq("proplen_asked")
end end
it "has the correct header" do 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 end
it "has the correct check_answer_label" do 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 end
it "has the correct type" do it "has the correct type" do
expect(question.type).to eq("numeric") expect(question.type).to eq("radio")
end end
it "is not marked as derived" do it "is not marked as derived" do
@ -32,26 +32,11 @@ RSpec.describe Form::Sales::Questions::LivingBeforePurchase, type: :model do
end end
it "has the correct hint" do 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 end
it "has correct width" do it "has the correct answer_options" do
expect(question.width).to eq(5) expect(question.answer_options).to eq("0" => { "value" => "Yes" },
end "1" => { "value" => "No" })
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 end

114
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
Loading…
Cancel
Save