Browse Source

Cldc 1528 person relationship to buyer 1 (#1150)

* feat: add person relationship to buyer 1 page and tests

* refactor: linting

* tests: update tests

* feat: refactor out person classes and update tests

* test: update tests

* refactor: linting

* feat: update db

* feat: update db

* feat: update db
pull/1097/head
natdeanlewissoftwire 2 years ago committed by GitHub
parent
commit
0ba16fc307
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 17
      app/models/form/sales/pages/person_relationship_to_buyer_1.rb
  2. 19
      app/models/form/sales/questions/person_relationship_to_buyer_1.rb
  3. 8
      app/models/form/sales/subsections/household_characteristics.rb
  4. 10
      db/migrate/20221215103247_add_relats_to_sales_log.rb
  5. 4
      db/schema.rb
  6. 4
      spec/factories/sales_log.rb
  7. 178
      spec/models/form/sales/pages/person_relationship_to_buyer1_spec.rb
  8. 247
      spec/models/form/sales/questions/person_relationship_to_buyer1_spec.rb
  9. 8
      spec/models/form/sales/subsections/household_characteristics_spec.rb
  10. 4
      spec/models/form_handler_spec.rb

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

@ -0,0 +1,17 @@
class Form::Sales::Pages::PersonRelationshipToBuyer1 < ::Form::Sales::Pages::Person
def initialize(id, hsh, subsection, person_index:)
super
@header = ""
@description = ""
@subsection = subsection
@depends_on = [
{ details_known_question_id => 1, "jointpur" => joint_purchase? ? 1 : 2 },
]
end
def questions
@questions ||= [
Form::Sales::Questions::PersonRelationshipToBuyer1.new(field_for_person("relat"), nil, self, person_index: @person_index),
]
end
end

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

@ -0,0 +1,19 @@
class Form::Sales::Questions::PersonRelationshipToBuyer1 < ::Form::Sales::Questions::Person
def initialize(id, hsh, page, person_index:)
super
@check_answer_label = "Person #{person_display_number}’s relationship to Buyer 1"
@header = "What is Person #{person_display_number}’s relationship to Buyer 1?"
@type = "radio"
@hint_text = ""
@page = page
@answer_options = ANSWER_OPTIONS
@check_answers_card_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
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::NumberOfOthersInProperty.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, person_index: 2),
Form::Sales::Pages::PersonRelationshipToBuyer1.new("person_1_relationship_to_buyer_1_joint_purchase", nil, self, person_index: 3),
Form::Sales::Pages::PersonAge.new("person_1_age", nil, self, person_index: 2),
Form::Sales::Pages::PersonAge.new("person_1_age_joint_purchase", nil, self, person_index: 3),
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, person_index: 2),
Form::Sales::Pages::PersonWorkingSituation.new("person_1_working_situation_joint_purchase", nil, self, person_index: 3),
Form::Sales::Pages::Person2Known.new(nil, nil, self),
Form::Sales::Pages::PersonRelationshipToBuyer1.new("person_2_relationship_to_buyer_1", nil, self, person_index: 3),
Form::Sales::Pages::PersonRelationshipToBuyer1.new("person_2_relationship_to_buyer_1_joint_purchase", nil, self, person_index: 4),
Form::Sales::Pages::PersonAge.new("person_2_age", nil, self, person_index: 3),
Form::Sales::Pages::PersonAge.new("person_2_age_joint_purchase", nil, self, person_index: 4),
Form::Sales::Pages::PersonWorkingSituation.new("person_2_working_situation", nil, self, person_index: 3),
Form::Sales::Pages::PersonWorkingSituation.new("person_2_working_situation_joint_purchase", nil, self, person_index: 4),
Form::Sales::Pages::Person3Known.new(nil, nil, self),
Form::Sales::Pages::PersonRelationshipToBuyer1.new("person_3_relationship_to_buyer_1", nil, self, person_index: 4),
Form::Sales::Pages::PersonRelationshipToBuyer1.new("person_3_relationship_to_buyer_1_joint_purchase", nil, self, person_index: 5),
Form::Sales::Pages::PersonAge.new("person_3_age", nil, self, person_index: 4),
Form::Sales::Pages::PersonAge.new("person_3_age_joint_purchase", nil, self, person_index: 5),
Form::Sales::Pages::PersonWorkingSituation.new("person_3_working_situation", nil, self, person_index: 4),
Form::Sales::Pages::PersonWorkingSituation.new("person_3_working_situation_joint_purchase", nil, self, person_index: 5),
Form::Sales::Pages::Person4Known.new(nil, nil, self),
Form::Sales::Pages::PersonRelationshipToBuyer1.new("person_4_relationship_to_buyer_1", nil, self, person_index: 5),
Form::Sales::Pages::PersonRelationshipToBuyer1.new("person_4_relationship_to_buyer_1_joint_purchase", nil, self, person_index: 6),
Form::Sales::Pages::PersonAge.new("person_4_age", nil, self, person_index: 5),
Form::Sales::Pages::PersonAge.new("person_4_age_joint_purchase", nil, self, person_index: 6),
Form::Sales::Pages::PersonWorkingSituation.new("person_4_working_situation", nil, self, person_index: 5),

10
db/migrate/20221215103247_add_relats_to_sales_log.rb

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

4
db/schema.rb

@ -415,6 +415,10 @@ ActiveRecord::Schema[7.0].define(version: 2023_01_04_164318) do
t.integer "ecstat4"
t.integer "ecstat5"
t.integer "ecstat6"
t.string "relat3"
t.string "relat4"
t.string "relat5"
t.string "relat6"
t.integer "frombeds"
t.integer "staircase"
t.integer "stairbought"

4
spec/factories/sales_log.rb

@ -82,6 +82,10 @@ FactoryBot.define do
ppcodenk { 1 }
prevten { 1 }
previous_la_known { 0 }
relat3 { "P" }
relat4 { "P" }
relat5 { "P" }
relat6 { "P" }
end
end
end

178
spec/models/form/sales/pages/person_relationship_to_buyer1_spec.rb

@ -0,0 +1,178 @@
require "rails_helper"
RSpec.describe Form::Sales::Pages::PersonRelationshipToBuyer1, type: :model do
subject(:page) { described_class.new(page_id, page_definition, subsection, person_index:) }
let(:page_definition) { nil }
let(:subsection) { instance_double(Form::Subsection) }
let(:person_index) { 1 }
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(:person_index) { 2 }
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(:person_index) { 3 }
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(:person_index) { 4 }
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(:person_index) { 5 }
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(:person_index) { 3 }
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(:person_index) { 4 }
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(:person_index) { 5 }
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(:person_index) { 6 }
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

247
spec/models/form/sales/questions/person_relationship_to_buyer1_spec.rb

@ -0,0 +1,247 @@
require "rails_helper"
RSpec.describe Form::Sales::Questions::PersonRelationshipToBuyer1, type: :model do
subject(:question) { described_class.new(question_id, question_definition, page, person_index:) }
let(:question_id) { "relat2" }
let(:question_definition) { nil }
let(:page) { instance_double(Form::Page) }
let(:person_index) { 2 }
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" }
let(:person_index) { 2 }
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(:person_index) { 3 }
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" }
let(:person_index) { 3 }
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" }
let(:person_index) { 4 }
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" }
let(:person_index) { 4 }
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" }
let(:person_index) { 5 }
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" }
let(:person_index) { 5 }
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" }
let(:person_index) { 6 }
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

8
spec/models/form/sales/subsections/household_characteristics_spec.rb

@ -35,6 +35,8 @@ RSpec.describe Form::Sales::Subsections::HouseholdCharacteristics, type: :model
buyer_2_live_in_property
number_of_others_in_property
person_1_known
person_1_relationship_to_buyer_1
person_1_relationship_to_buyer_1_joint_purchase
person_1_age
person_1_age_joint_purchase
person_1_gender_identity
@ -42,16 +44,22 @@ RSpec.describe Form::Sales::Subsections::HouseholdCharacteristics, type: :model
person_1_working_situation
person_1_working_situation_joint_purchase
person_2_known
person_2_relationship_to_buyer_1
person_2_relationship_to_buyer_1_joint_purchase
person_2_age
person_2_age_joint_purchase
person_2_working_situation
person_2_working_situation_joint_purchase
person_3_known
person_3_relationship_to_buyer_1
person_3_relationship_to_buyer_1_joint_purchase
person_3_age
person_3_age_joint_purchase
person_3_working_situation
person_3_working_situation_joint_purchase
person_4_known
person_4_relationship_to_buyer_1
person_4_relationship_to_buyer_1_joint_purchase
person_4_age
person_4_age_joint_purchase
person_4_working_situation

4
spec/models/form_handler_spec.rb

@ -52,14 +52,14 @@ RSpec.describe FormHandler do
it "is able to load a current sales form" do
form = form_handler.get_form("current_sales")
expect(form).to be_a(Form)
expect(form.pages.count).to eq(97)
expect(form.pages.count).to eq(105)
expect(form.name).to eq("2022_2023_sales")
end
it "is able to load a previous sales form" do
form = form_handler.get_form("previous_sales")
expect(form).to be_a(Form)
expect(form.pages.count).to eq(97)
expect(form.pages.count).to eq(105)
expect(form.name).to eq("2021_2022_sales")
end
end

Loading…
Cancel
Save