Browse Source

feat: add person relationship to buyer 1 page and tests

pull/1093/head
natdeanlewissoftwire 3 years ago
parent
commit
9eb271da70
  1. 28
      app/models/form/sales/pages/person_relationship_to_buyer_1.rb
  2. 27
      app/models/form/sales/questions/person_relationship_to_buyer_1.rb
  3. 8
      app/models/form/sales/subsections/household_characteristics.rb
  4. 9
      db/migrate/20221215103247_add_relats_to_sales_log.rb
  5. 8
      db/schema.rb
  6. 168
      spec/models/form/sales/pages/person_relationship_to_buyer_1_spec.rb
  7. 238
      spec/models/form/sales/questions/person_relationship_to_buyer_1_spec.rb

28
app/models/form/sales/pages/person_relationship_to_buyer_1.rb

@ -0,0 +1,28 @@
class Form::Sales::Pages::PersonRelationshipToBuyer1 < ::Form::Page
def initialize(id, hsh, subsection)
super
@header = ""
@description = ""
@subsection = subsection
@depends_on = [
{ "details_known_#{person_display_number(PERSON_INDEX)}" => 1, "jointpur" => joint_purchase? ? 1 : 2 },
]
end
PERSON_INDEX = {
"person_1_relationship_to_buyer_1" => 2,
"person_2_relationship_to_buyer_1" => 3,
"person_3_relationship_to_buyer_1" => 4,
"person_4_relationship_to_buyer_1" => 5,
"person_1_relationship_to_buyer_1_joint_purchase" => 3,
"person_2_relationship_to_buyer_1_joint_purchase" => 4,
"person_3_relationship_to_buyer_1_joint_purchase" => 5,
"person_4_relationship_to_buyer_1_joint_purchase" => 6,
}.freeze
def questions
@questions ||= [
Form::Sales::Questions::PersonRelationshipToBuyer1.new("relat#{person_database_number(PERSON_INDEX)}", nil, self),
]
end
end

27
app/models/form/sales/questions/person_relationship_to_buyer_1.rb

@ -0,0 +1,27 @@
class Form::Sales::Questions::PersonRelationshipToBuyer1 < ::Form::Question
def initialize(id, hsh, page)
super
@check_answer_label = "Person #{person_display_number(PERSON_INDEX)}’s relationship to buyer 1"
@header = "What is Person #{person_display_number(PERSON_INDEX)}’s relationship to buyer 1?"
@type = "radio"
@hint_text = ""
@page = page
@answer_options = ANSWER_OPTIONS
@check_answers_card_number = person_database_number(PERSON_INDEX)
end
ANSWER_OPTIONS = {
"P" => { "value" => "Partner" },
"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" => "Person prefers not to say" },
}.freeze
PERSON_INDEX = {
"relat2" => 2,
"relat3" => 3,
"relat4" => 4,
"relat5" => 5,
"relat6" => 6,
}.freeze
end

8
app/models/form/sales/subsections/household_characteristics.rb

@ -30,6 +30,8 @@ class Form::Sales::Subsections::HouseholdCharacteristics < ::Form::Subsection
Form::Sales::Pages::Buyer2LiveInProperty.new(nil, nil, self), Form::Sales::Pages::Buyer2LiveInProperty.new(nil, nil, self),
Form::Sales::Pages::NumberOfOthersInProperty.new(nil, nil, self), Form::Sales::Pages::NumberOfOthersInProperty.new(nil, nil, self),
Form::Sales::Pages::Person1Known.new(nil, nil, self), Form::Sales::Pages::Person1Known.new(nil, nil, self),
Form::Sales::Pages::PersonRelationshipToBuyer1.new("person_1_relationship_to_buyer_1", nil, self),
Form::Sales::Pages::PersonRelationshipToBuyer1.new("person_1_relationship_to_buyer_1_joint_purchase", nil, self),
Form::Sales::Pages::PersonAge.new("person_1_age", nil, self), Form::Sales::Pages::PersonAge.new("person_1_age", nil, self),
Form::Sales::Pages::PersonAge.new("person_1_age_joint_purchase", nil, self), Form::Sales::Pages::PersonAge.new("person_1_age_joint_purchase", nil, self),
Form::Sales::Pages::Person1GenderIdentity.new(nil, nil, self), Form::Sales::Pages::Person1GenderIdentity.new(nil, nil, self),
@ -37,16 +39,22 @@ class Form::Sales::Subsections::HouseholdCharacteristics < ::Form::Subsection
Form::Sales::Pages::PersonWorkingSituation.new("person_1_working_situation", nil, self), Form::Sales::Pages::PersonWorkingSituation.new("person_1_working_situation", nil, self),
Form::Sales::Pages::PersonWorkingSituation.new("person_1_working_situation_joint_purchase", nil, self), Form::Sales::Pages::PersonWorkingSituation.new("person_1_working_situation_joint_purchase", nil, self),
Form::Sales::Pages::Person2Known.new(nil, nil, self), Form::Sales::Pages::Person2Known.new(nil, nil, self),
Form::Sales::Pages::PersonRelationshipToBuyer1.new("person_2_relationship_to_buyer_1", nil, self),
Form::Sales::Pages::PersonRelationshipToBuyer1.new("person_2_relationship_to_buyer_1_joint_purchase", nil, self),
Form::Sales::Pages::PersonAge.new("person_2_age", nil, self), Form::Sales::Pages::PersonAge.new("person_2_age", nil, self),
Form::Sales::Pages::PersonAge.new("person_2_age_joint_purchase", nil, self), Form::Sales::Pages::PersonAge.new("person_2_age_joint_purchase", nil, self),
Form::Sales::Pages::PersonWorkingSituation.new("person_2_working_situation", nil, self), Form::Sales::Pages::PersonWorkingSituation.new("person_2_working_situation", nil, self),
Form::Sales::Pages::PersonWorkingSituation.new("person_2_working_situation_joint_purchase", nil, self), Form::Sales::Pages::PersonWorkingSituation.new("person_2_working_situation_joint_purchase", nil, self),
Form::Sales::Pages::Person3Known.new(nil, nil, self), Form::Sales::Pages::Person3Known.new(nil, nil, self),
Form::Sales::Pages::PersonRelationshipToBuyer1.new("person_3_relationship_to_buyer_1", nil, self),
Form::Sales::Pages::PersonRelationshipToBuyer1.new("person_3_relationship_to_buyer_1_joint_purchase", nil, self),
Form::Sales::Pages::PersonAge.new("person_3_age", nil, self), Form::Sales::Pages::PersonAge.new("person_3_age", nil, self),
Form::Sales::Pages::PersonAge.new("person_3_age_joint_purchase", nil, self), Form::Sales::Pages::PersonAge.new("person_3_age_joint_purchase", nil, self),
Form::Sales::Pages::PersonWorkingSituation.new("person_3_working_situation", nil, self), Form::Sales::Pages::PersonWorkingSituation.new("person_3_working_situation", nil, self),
Form::Sales::Pages::PersonWorkingSituation.new("person_3_working_situation_joint_purchase", nil, self), Form::Sales::Pages::PersonWorkingSituation.new("person_3_working_situation_joint_purchase", nil, self),
Form::Sales::Pages::Person4Known.new(nil, nil, self), Form::Sales::Pages::Person4Known.new(nil, nil, self),
Form::Sales::Pages::PersonRelationshipToBuyer1.new("person_4_relationship_to_buyer_1", nil, self),
Form::Sales::Pages::PersonRelationshipToBuyer1.new("person_4_relationship_to_buyer_1_joint_purchase", nil, self),
Form::Sales::Pages::PersonAge.new("person_4_age", nil, self), Form::Sales::Pages::PersonAge.new("person_4_age", nil, self),
Form::Sales::Pages::PersonAge.new("person_4_age_joint_purchase", nil, self), Form::Sales::Pages::PersonAge.new("person_4_age_joint_purchase", nil, self),
Form::Sales::Pages::PersonWorkingSituation.new("person_4_working_situation", nil, self), Form::Sales::Pages::PersonWorkingSituation.new("person_4_working_situation", nil, self),

9
db/migrate/20221215103247_add_relats_to_sales_log.rb

@ -0,0 +1,9 @@
class AddRelatsToSalesLog < ActiveRecord::Migration[7.0]
def change
change_table :sales_logs, bulk: true do |t|
t.column :relat4, :string
t.column :relat5, :string
t.column :relat6, :string
end
end
end

8
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: 2022_12_14_110208) do ActiveRecord::Schema[7.0].define(version: 2022_12_15_103247) 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"
@ -401,11 +401,12 @@ ActiveRecord::Schema[7.0].define(version: 2022_12_14_110208) do
t.integer "inc1mort" t.integer "inc1mort"
t.integer "income2" t.integer "income2"
t.integer "income2nk" t.integer "income2nk"
t.integer "prevown"
t.integer "savingsnk" t.integer "savingsnk"
t.integer "savings" t.integer "savings"
t.integer "prevown"
t.string "sex3" t.string "sex3"
t.integer "details_known_1" t.integer "details_known_1"
t.string "relat3"
t.integer "income1_value_check" t.integer "income1_value_check"
t.integer "mortgage" t.integer "mortgage"
t.integer "inc2mort" t.integer "inc2mort"
@ -415,6 +416,9 @@ ActiveRecord::Schema[7.0].define(version: 2022_12_14_110208) do
t.integer "ecstat4" t.integer "ecstat4"
t.integer "ecstat5" t.integer "ecstat5"
t.integer "ecstat6" t.integer "ecstat6"
t.string "relat4"
t.string "relat5"
t.string "relat6"
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 ["managing_organisation_id"], name: "index_sales_logs_on_managing_organisation_id" t.index ["managing_organisation_id"], name: "index_sales_logs_on_managing_organisation_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"

168
spec/models/form/sales/pages/person_relationship_to_buyer_1_spec.rb

@ -0,0 +1,168 @@
require "rails_helper"
RSpec.describe Form::Sales::Pages::PersonRelationshipToBuyer1, type: :model do
subject(:page) { described_class.new(page_id, page_definition, subsection) }
let(:page_definition) { nil }
let(:subsection) { instance_double(Form::Subsection) }
context "without joint purchase" do
let(:page_id) { "person_1_relationship_to_buyer_1" }
it "has correct subsection" do
expect(page.subsection).to eq(subsection)
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
context "with person 1" do
let(:page_id) { "person_1_relationship_to_buyer_1" }
it "has correct questions" do
expect(page.questions.map(&:id)).to eq(%w[relat2])
end
it "has the correct id" do
expect(page.id).to eq("person_1_relationship_to_buyer_1")
end
it "has correct depends_on" do
expect(page.depends_on).to eq([{ "details_known_1" => 1, "jointpur" => 2 }])
end
end
context "with person 2" do
let(:page_id) { "person_2_relationship_to_buyer_1" }
it "has correct questions" do
expect(page.questions.map(&:id)).to eq(%w[relat3])
end
it "has the correct id" do
expect(page.id).to eq("person_2_relationship_to_buyer_1")
end
it "has correct depends_on" do
expect(page.depends_on).to eq([{ "details_known_2" => 1, "jointpur" => 2 }])
end
end
context "with person 3" do
let(:page_id) { "person_3_relationship_to_buyer_1" }
it "has correct questions" do
expect(page.questions.map(&:id)).to eq(%w[relat4])
end
it "has the correct id" do
expect(page.id).to eq("person_3_relationship_to_buyer_1")
end
it "has correct depends_on" do
expect(page.depends_on).to eq([{ "details_known_3" => 1, "jointpur" => 2 }])
end
end
context "with person 4" do
let(:page_id) { "person_4_relationship_to_buyer_1" }
it "has correct questions" do
expect(page.questions.map(&:id)).to eq(%w[relat5])
end
it "has the correct id" do
expect(page.id).to eq("person_4_relationship_to_buyer_1")
end
it "has correct depends_on" do
expect(page.depends_on).to eq([{ "details_known_4" => 1, "jointpur" => 2 }])
end
end
end
context "with joint purchase" do
let(:page_id) { "person_1_relationship_to_buyer_1_joint_purchase" }
it "has correct subsection" do
expect(page.subsection).to eq(subsection)
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
context "with person 1" do
let(:page_id) { "person_1_relationship_to_buyer_1_joint_purchase" }
it "has correct questions" do
expect(page.questions.map(&:id)).to eq(%w[relat3])
end
it "has the correct id" do
expect(page.id).to eq("person_1_relationship_to_buyer_1_joint_purchase")
end
it "has correct depends_on" do
expect(page.depends_on).to eq([{ "details_known_1" => 1, "jointpur" => 1 }])
end
end
context "with person 2" do
let(:page_id) { "person_2_relationship_to_buyer_1_joint_purchase" }
it "has correct questions" do
expect(page.questions.map(&:id)).to eq(%w[relat4])
end
it "has the correct id" do
expect(page.id).to eq("person_2_relationship_to_buyer_1_joint_purchase")
end
it "has correct depends_on" do
expect(page.depends_on).to eq([{ "details_known_2" => 1, "jointpur" => 1 }])
end
end
context "with person 3" do
let(:page_id) { "person_3_relationship_to_buyer_1_joint_purchase" }
it "has correct questions" do
expect(page.questions.map(&:id)).to eq(%w[relat5])
end
it "has the correct id" do
expect(page.id).to eq("person_3_relationship_to_buyer_1_joint_purchase")
end
it "has correct depends_on" do
expect(page.depends_on).to eq([{ "details_known_3" => 1, "jointpur" => 1 }])
end
end
context "with person 4" do
let(:page_id) { "person_4_relationship_to_buyer_1_joint_purchase" }
it "has correct questions" do
expect(page.questions.map(&:id)).to eq(%w[relat6])
end
it "has the correct id" do
expect(page.id).to eq("person_4_relationship_to_buyer_1_joint_purchase")
end
it "has correct depends_on" do
expect(page.depends_on).to eq([{ "details_known_4" => 1, "jointpur" => 1 }])
end
end
end
end

238
spec/models/form/sales/questions/person_relationship_to_buyer_1_spec.rb

@ -0,0 +1,238 @@
require "rails_helper"
RSpec.describe Form::Sales::Questions::PersonRelationshipToBuyer1, type: :model do
subject(:question) { described_class.new(question_id, question_definition, page) }
let(:question_id) { "relat2" }
let(:question_definition) { nil }
let(:page) { instance_double(Form::Page) }
before do
allow(page).to receive(:id).and_return("person_1_relationship_to_buyer_1")
end
it "has correct page" do
expect(question.page).to eq(page)
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 expected check answers card number" do
expect(question.check_answers_card_number).to eq(2)
end
it "has the correct answer_options" do
expect(question.answer_options).to eq({
"P" => { "value" => "Partner" },
"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" => "Person prefers not to say" },
})
end
context "when person 1" do
context "and not joint purchase" do
let(:question_id) { "relat2" }
before do
allow(page).to receive(:id).and_return("person_1_relationship_to_buyer_1")
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 Person 1’s relationship to buyer 1?")
end
it "has the correct check_answer_label" do
expect(question.check_answer_label).to eq("Person 1’s relationship to buyer 1")
end
it "has expected check answers card number" do
expect(question.check_answers_card_number).to eq(2)
end
end
context "and joint purchase" do
let(:question_id) { "relat3" }
before do
allow(page).to receive(:id).and_return("person_1_relationship_to_buyer_1_joint_purchase")
end
it "has the correct id" do
expect(question.id).to eq("relat3")
end
it "has the correct header" do
expect(question.header).to eq("What is Person 1’s relationship to buyer 1?")
end
it "has the correct check_answer_label" do
expect(question.check_answer_label).to eq("Person 1’s relationship to buyer 1")
end
it "has expected check answers card number" do
expect(question.check_answers_card_number).to eq(3)
end
end
end
context "when person 2" do
context "and not joint purchase" do
let(:question_id) { "relat3" }
before do
allow(page).to receive(:id).and_return("person_2_relationship_to_buyer_1")
end
it "has the correct id" do
expect(question.id).to eq("relat3")
end
it "has the correct header" do
expect(question.header).to eq("What is Person 2’s relationship to buyer 1?")
end
it "has the correct check_answer_label" do
expect(question.check_answer_label).to eq("Person 2’s relationship to buyer 1")
end
it "has expected check answers card number" do
expect(question.check_answers_card_number).to eq(3)
end
end
context "and joint purchase" do
let(:question_id) { "relat4" }
before do
allow(page).to receive(:id).and_return("person_2_relationship_to_buyer_1_joint_purchase")
end
it "has the correct id" do
expect(question.id).to eq("relat4")
end
it "has the correct header" do
expect(question.header).to eq("What is Person 2’s relationship to buyer 1?")
end
it "has the correct check_answer_label" do
expect(question.check_answer_label).to eq("Person 2’s relationship to buyer 1")
end
it "has expected check answers card number" do
expect(question.check_answers_card_number).to eq(4)
end
end
end
context "when person 3" do
context "and not joint purchase" do
let(:question_id) { "relat4" }
before do
allow(page).to receive(:id).and_return("person_3_relationship_to_buyer_1")
end
it "has the correct id" do
expect(question.id).to eq("relat4")
end
it "has the correct header" do
expect(question.header).to eq("What is Person 3’s relationship to buyer 1?")
end
it "has the correct check_answer_label" do
expect(question.check_answer_label).to eq("Person 3’s relationship to buyer 1")
end
it "has expected check answers card number" do
expect(question.check_answers_card_number).to eq(4)
end
end
context "and joint purchase" do
let(:question_id) { "relat5" }
before do
allow(page).to receive(:id).and_return("person_3_relationship_to_buyer_1_joint_purchase")
end
it "has the correct id" do
expect(question.id).to eq("relat5")
end
it "has the correct header" do
expect(question.header).to eq("What is Person 3’s relationship to buyer 1?")
end
it "has the correct check_answer_label" do
expect(question.check_answer_label).to eq("Person 3’s relationship to buyer 1")
end
it "has expected check answers card number" do
expect(question.check_answers_card_number).to eq(5)
end
end
end
context "when person 4" do
context "and not joint purchase" do
let(:question_id) { "relat5" }
before do
allow(page).to receive(:id).and_return("person_4_relationship_to_buyer_1")
end
it "has the correct id" do
expect(question.id).to eq("relat5")
end
it "has the correct header" do
expect(question.header).to eq("What is Person 4’s relationship to buyer 1?")
end
it "has the correct check_answer_label" do
expect(question.check_answer_label).to eq("Person 4’s relationship to buyer 1")
end
it "has expected check answers card number" do
expect(question.check_answers_card_number).to eq(5)
end
end
context "and joint purchase" do
let(:question_id) { "relat6" }
before do
allow(page).to receive(:id).and_return("person_4_relationship_to_buyer_1_joint_purchase")
end
it "has the correct id" do
expect(question.id).to eq("relat6")
end
it "has the correct header" do
expect(question.header).to eq("What is Person 4’s relationship to buyer 1?")
end
it "has the correct check_answer_label" do
expect(question.check_answer_label).to eq("Person 4’s relationship to buyer 1")
end
it "has expected check answers card number" do
expect(question.check_answers_card_number).to eq(6)
end
end
end
end
Loading…
Cancel
Save