From 7309768e0800288f924f6ff16918715c4faa9707 Mon Sep 17 00:00:00 2001 From: natdeanlewissoftwire <94526761+natdeanlewissoftwire@users.noreply.github.com> Date: Fri, 30 Sep 2022 10:03:07 +0100 Subject: [PATCH] Cldc 1522 buyer 2 relationship (#919) * feat: add buyer 2-1 relationship question and page (migration and schema to come in next commit) * feat: add buyer 2-1 migration and schema * feat: update schema * feat: add depends_on and tests * feat: add hint text * tests: add new tests * refactor: lint appeasing --- .../pages/buyer2_relationship_to_buyer1.rb | 19 ++++++ .../buyer2_relationship_to_buyer1.rb | 29 +++++++++ .../other_buyer2_relationship_to_buyer1.rb | 10 +++ .../subsections/household_characteristics.rb | 1 + ...dd_buyer2_relationship_to_buyer1_column.rb | 8 +++ db/schema.rb | 4 +- spec/factories/sales_log.rb | 1 + .../buyer2_relationship_to_buyer1_spec.rb | 33 ++++++++++ .../buyer2_relationship_to_buyer1_spec.rb | 62 +++++++++++++++++++ ...ther_buyer2_relationship_to_buyer1_spec.rb | 37 +++++++++++ .../household_characteristics_spec.rb | 2 +- 11 files changed, 204 insertions(+), 2 deletions(-) create mode 100644 app/models/form/sales/pages/buyer2_relationship_to_buyer1.rb create mode 100644 app/models/form/sales/questions/buyer2_relationship_to_buyer1.rb create mode 100644 app/models/form/sales/questions/other_buyer2_relationship_to_buyer1.rb create mode 100644 db/migrate/20220929125204_add_buyer2_relationship_to_buyer1_column.rb create mode 100644 spec/models/form/sales/pages/buyer2_relationship_to_buyer1_spec.rb create mode 100644 spec/models/form/sales/questions/buyer2_relationship_to_buyer1_spec.rb create mode 100644 spec/models/form/sales/questions/other_buyer2_relationship_to_buyer1_spec.rb diff --git a/app/models/form/sales/pages/buyer2_relationship_to_buyer1.rb b/app/models/form/sales/pages/buyer2_relationship_to_buyer1.rb new file mode 100644 index 000000000..7576e947c --- /dev/null +++ b/app/models/form/sales/pages/buyer2_relationship_to_buyer1.rb @@ -0,0 +1,19 @@ +class Form::Sales::Pages::Buyer2RelationshipToBuyer1 < ::Form::Page + def initialize(id, hsh, subsection) + super + @id = "buyer_2_relationship_to_buyer_1" + @header = "" + @description = "" + @subsection = subsection + @depends_on = [{ + "jointpur" => 1, + }] + end + + def questions + @questions ||= [ + Form::Sales::Questions::Buyer2RelationshipToBuyer1.new(nil, nil, self), + Form::Sales::Questions::OtherBuyer2RelationshipToBuyer1.new(nil, nil, self), + ] + end +end diff --git a/app/models/form/sales/questions/buyer2_relationship_to_buyer1.rb b/app/models/form/sales/questions/buyer2_relationship_to_buyer1.rb new file mode 100644 index 000000000..67db6677d --- /dev/null +++ b/app/models/form/sales/questions/buyer2_relationship_to_buyer1.rb @@ -0,0 +1,29 @@ +class Form::Sales::Questions::Buyer2RelationshipToBuyer1 < ::Form::Question + def initialize(id, hsh, page) + super + @id = "relat2" + @check_answer_label = "Buyer 2's relationship to buyer 1" + @header = "What is buyer 2's relationship to buyer 1?" + @type = "radio" + @hint_text = "" + @page = page + @answer_options = ANSWER_OPTIONS + @conditional_for = { + "otherrelat2" => %w[X], + } + @hidden_in_check_answers = { + "depends_on" => [ + { + "relat2" => "X", + }, + ], + } + end + + ANSWER_OPTIONS = { + "P" => { "value" => "Parent" }, + "C" => { "value" => "Child", "hint" => "Must be eligible for child benefit, aged under 16 or under 20 if still in full-time education." }, + "X" => { "value" => "Other" }, + "R" => { "value" => "Buyer prefers not to say" }, + }.freeze +end diff --git a/app/models/form/sales/questions/other_buyer2_relationship_to_buyer1.rb b/app/models/form/sales/questions/other_buyer2_relationship_to_buyer1.rb new file mode 100644 index 000000000..f9959e3bd --- /dev/null +++ b/app/models/form/sales/questions/other_buyer2_relationship_to_buyer1.rb @@ -0,0 +1,10 @@ +class Form::Sales::Questions::OtherBuyer2RelationshipToBuyer1 < ::Form::Question + def initialize(id, hsh, page) + super + @id = "otherrelat2" + @check_answer_label = "Buyer 2's relationship to buyer 1" + @header = "Buyer 2's relationship to buyer 1" + @type = "text" + @page = page + end +end diff --git a/app/models/form/sales/subsections/household_characteristics.rb b/app/models/form/sales/subsections/household_characteristics.rb index 5bfaa7675..6a6cb2824 100644 --- a/app/models/form/sales/subsections/household_characteristics.rb +++ b/app/models/form/sales/subsections/household_characteristics.rb @@ -12,6 +12,7 @@ class Form::Sales::Subsections::HouseholdCharacteristics < ::Form::Subsection Form::Sales::Pages::Age1.new(nil, nil, self), Form::Sales::Pages::GenderIdentity1.new(nil, nil, self), Form::Sales::Pages::Buyer1LiveInProperty.new(nil, nil, self), + Form::Sales::Pages::Buyer2RelationshipToBuyer1.new(nil, nil, self), Form::Sales::Pages::Age2.new(nil, nil, self), ] end diff --git a/db/migrate/20220929125204_add_buyer2_relationship_to_buyer1_column.rb b/db/migrate/20220929125204_add_buyer2_relationship_to_buyer1_column.rb new file mode 100644 index 000000000..e59b63c05 --- /dev/null +++ b/db/migrate/20220929125204_add_buyer2_relationship_to_buyer1_column.rb @@ -0,0 +1,8 @@ +class AddBuyer2RelationshipToBuyer1Column < ActiveRecord::Migration[7.0] + def change + change_table :sales_logs, bulk: true do |t| + t.column :relat2, :string + t.column :otherrelat2, :string + end + end +end diff --git a/db/schema.rb b/db/schema.rb index 7f0a843d0..fa885644b 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: 2022_09_29_105157) do +ActiveRecord::Schema[7.0].define(version: 2022_09_29_125204) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -341,6 +341,8 @@ ActiveRecord::Schema[7.0].define(version: 2022_09_29_105157) do t.integer "buylivein" t.integer "builtype" t.integer "proptype" + t.string "relat2" + t.string "otherrelat2" t.integer "age2" t.integer "age2_known" t.index ["created_by_id"], name: "index_sales_logs_on_created_by_id" diff --git a/spec/factories/sales_log.rb b/spec/factories/sales_log.rb index 437ba6361..670131681 100644 --- a/spec/factories/sales_log.rb +++ b/spec/factories/sales_log.rb @@ -23,6 +23,7 @@ FactoryBot.define do age1 { 30 } sex1 { "X" } buy1livein { 1 } + relat2 { "P" } proptype { 1 } age2_known { 0 } age2 { 35 } diff --git a/spec/models/form/sales/pages/buyer2_relationship_to_buyer1_spec.rb b/spec/models/form/sales/pages/buyer2_relationship_to_buyer1_spec.rb new file mode 100644 index 000000000..675913419 --- /dev/null +++ b/spec/models/form/sales/pages/buyer2_relationship_to_buyer1_spec.rb @@ -0,0 +1,33 @@ +require "rails_helper" + +RSpec.describe Form::Sales::Pages::Buyer2RelationshipToBuyer1, type: :model do + subject(:page) { described_class.new(page_id, page_definition, subsection) } + + let(:page_id) { nil } + let(:page_definition) { nil } + let(:subsection) { instance_double(Form::Subsection) } + + 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[relat2 otherrelat2]) + end + + it "has the correct id" do + expect(page.id).to eq("buyer_2_relationship_to_buyer_1") + end + + it "has the correct header" do + expect(page.header).to eq("") + end + + it "has the correct description" do + expect(page.description).to eq("") + end + + it "has correct depends_on" do + expect(page.depends_on).to eq([{ "jointpur" => 1 }]) + end +end diff --git a/spec/models/form/sales/questions/buyer2_relationship_to_buyer1_spec.rb b/spec/models/form/sales/questions/buyer2_relationship_to_buyer1_spec.rb new file mode 100644 index 000000000..cabd2168a --- /dev/null +++ b/spec/models/form/sales/questions/buyer2_relationship_to_buyer1_spec.rb @@ -0,0 +1,62 @@ +require "rails_helper" + +RSpec.describe Form::Sales::Questions::Buyer2RelationshipToBuyer1, type: :model do + subject(:question) { described_class.new(question_id, question_definition, page) } + + let(:question_id) { nil } + let(:question_definition) { nil } + let(:page) { instance_double(Form::Page) } + + it "has correct page" do + expect(question.page).to eq(page) + end + + it "has the correct id" do + expect(question.id).to eq("relat2") + end + + it "has the correct header" do + expect(question.header).to eq("What is buyer 2's relationship to buyer 1?") + end + + it "has the correct check_answer_label" do + expect(question.check_answer_label).to eq("Buyer 2's relationship to buyer 1") + end + + it "has the correct type" do + expect(question.type).to eq("radio") + 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("") + end + + it "has the correct answer_options" do + expect(question.answer_options).to eq({ + "P" => { "value" => "Parent" }, + "C" => { "value" => "Child", "hint" => "Must be eligible for child benefit, aged under 16 or under 20 if still in full-time education." }, + "X" => { "value" => "Other" }, + "R" => { "value" => "Buyer prefers not to say" }, + }) + end + + it "has correct conditional for" do + expect(question.conditional_for).to eq({ + "otherrelat2" => %w[X], + }) + end + + it "has correct hidden in check answers" do + expect(question.hidden_in_check_answers).to eq({ + "depends_on" => [ + { + "relat2" => "X", + }, + ], + }) + end +end diff --git a/spec/models/form/sales/questions/other_buyer2_relationship_to_buyer1_spec.rb b/spec/models/form/sales/questions/other_buyer2_relationship_to_buyer1_spec.rb new file mode 100644 index 000000000..1b4b3f91e --- /dev/null +++ b/spec/models/form/sales/questions/other_buyer2_relationship_to_buyer1_spec.rb @@ -0,0 +1,37 @@ +require "rails_helper" + +RSpec.describe Form::Sales::Questions::OtherBuyer2RelationshipToBuyer1, type: :model do + subject(:question) { described_class.new(question_id, question_definition, page) } + + let(:question_id) { nil } + let(:question_definition) { nil } + let(:page) { instance_double(Form::Page) } + + it "has correct page" do + expect(question.page).to eq(page) + end + + it "has the correct id" do + expect(question.id).to eq("otherrelat2") + end + + it "has the correct header" do + expect(question.header).to eq("Buyer 2's relationship to buyer 1") + end + + it "has the correct check_answer_label" do + expect(question.check_answer_label).to eq("Buyer 2's relationship to buyer 1") + end + + it "has the correct type" do + expect(question.type).to eq("text") + 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 be_nil + end +end diff --git a/spec/models/form/sales/subsections/household_characteristics_spec.rb b/spec/models/form/sales/subsections/household_characteristics_spec.rb index 1be1ae79c..71a8e898d 100644 --- a/spec/models/form/sales/subsections/household_characteristics_spec.rb +++ b/spec/models/form/sales/subsections/household_characteristics_spec.rb @@ -13,7 +13,7 @@ RSpec.describe Form::Sales::Subsections::HouseholdCharacteristics, type: :model it "has correct pages" do expect(household_characteristics.pages.map(&:id)).to eq( - %w[buyer_1_age buyer_1_gender_identity buyer_1_live_in_property buyer_2_age], + %w[buyer_1_age buyer_1_gender_identity buyer_1_live_in_property buyer_2_relationship_to_buyer_1 buyer_2_age], ) end