diff --git a/app/models/form/sales/pages/person_relationship_to_buyer_1.rb b/app/models/form/sales/pages/person_relationship_to_buyer_1.rb new file mode 100644 index 000000000..cde673448 --- /dev/null +++ b/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 diff --git a/app/models/form/sales/questions/person_relationship_to_buyer_1.rb b/app/models/form/sales/questions/person_relationship_to_buyer_1.rb new file mode 100644 index 000000000..0666208e6 --- /dev/null +++ b/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 diff --git a/app/models/form/sales/subsections/household_characteristics.rb b/app/models/form/sales/subsections/household_characteristics.rb index 7d6e6fb42..c659817fd 100644 --- a/app/models/form/sales/subsections/household_characteristics.rb +++ b/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), + 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_joint_purchase", 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_joint_purchase", 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_joint_purchase", 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::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_joint_purchase", 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::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_joint_purchase", nil, self), Form::Sales::Pages::PersonWorkingSituation.new("person_4_working_situation", nil, self), diff --git a/db/migrate/20221215103247_add_relats_to_sales_log.rb b/db/migrate/20221215103247_add_relats_to_sales_log.rb new file mode 100644 index 000000000..f22004164 --- /dev/null +++ b/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 diff --git a/db/schema.rb b/db/schema.rb index 393022fd0..67ef33c28 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_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 enable_extension "plpgsql" @@ -401,11 +401,12 @@ ActiveRecord::Schema[7.0].define(version: 2022_12_14_110208) do t.integer "inc1mort" t.integer "income2" t.integer "income2nk" + t.integer "prevown" t.integer "savingsnk" t.integer "savings" - t.integer "prevown" t.string "sex3" t.integer "details_known_1" + t.string "relat3" t.integer "income1_value_check" t.integer "mortgage" t.integer "inc2mort" @@ -415,6 +416,9 @@ ActiveRecord::Schema[7.0].define(version: 2022_12_14_110208) do t.integer "ecstat4" t.integer "ecstat5" 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 ["managing_organisation_id"], name: "index_sales_logs_on_managing_organisation_id" t.index ["owning_organisation_id"], name: "index_sales_logs_on_owning_organisation_id" diff --git a/spec/models/form/sales/pages/person_relationship_to_buyer_1_spec.rb b/spec/models/form/sales/pages/person_relationship_to_buyer_1_spec.rb new file mode 100644 index 000000000..6eada4812 --- /dev/null +++ b/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 diff --git a/spec/models/form/sales/questions/person_relationship_to_buyer_1_spec.rb b/spec/models/form/sales/questions/person_relationship_to_buyer_1_spec.rb new file mode 100644 index 000000000..090a0219e --- /dev/null +++ b/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