From 00cb2347978cb55850e2b1ab01a96e11719187b4 Mon Sep 17 00:00:00 2001 From: kosiakkatrina <54268893+kosiakkatrina@users.noreply.github.com> Date: Wed, 15 Feb 2023 09:01:15 +0000 Subject: [PATCH] CLDC-1811 Add buyer 2 ethnicity question for 23/24 form (#1287) * Add buyer 2 ethnic questions and pages * Add ethnic fields for buyer 2 * Add the new questions to the correct year --- .../pages/buyer2_ethnic_background_arab.rb | 15 ++ .../pages/buyer2_ethnic_background_asian.rb | 15 ++ .../pages/buyer2_ethnic_background_black.rb | 15 ++ .../pages/buyer2_ethnic_background_mixed.rb | 15 ++ .../pages/buyer2_ethnic_background_white.rb | 15 ++ .../form/sales/pages/buyer2_ethnic_group.rb | 22 ++ .../buyer2_ethnic_background_arab.rb | 16 ++ .../buyer2_ethnic_background_asian.rb | 19 ++ .../buyer2_ethnic_background_black.rb | 17 ++ .../buyer2_ethnic_background_mixed.rb | 18 ++ .../buyer2_ethnic_background_white.rb | 18 ++ .../sales/questions/buyer2_ethnic_group.rb | 27 +++ .../subsections/household_characteristics.rb | 14 +- ...0210143120_add_ethnic_fields_for_buyer2.rb | 8 + db/schema.rb | 4 +- .../buyer2_ethnic_background_arab_spec.rb | 33 +++ .../buyer2_ethnic_background_asian_spec.rb | 33 +++ .../buyer2_ethnic_background_black_spec.rb | 33 +++ .../buyer2_ethnic_background_mixed_spec.rb | 33 +++ .../buyer2_ethnic_background_white_spec.rb | 33 +++ .../sales/pages/buyer2_ethnic_group_spec.rb | 42 ++++ .../buyer2_ethnic_background_arab_spec.rb | 48 ++++ .../buyer2_ethnic_background_asian_spec.rb | 51 ++++ .../buyer2_ethnic_background_black_spec.rb | 49 ++++ .../buyer2_ethnic_background_mixed_spec.rb | 50 ++++ .../buyer2_ethnic_background_white_spec.rb | 50 ++++ .../questions/buyer2_ethnic_group_spec.rb | 62 +++++ .../household_characteristics_spec.rb | 218 ++++++++++++------ 28 files changed, 906 insertions(+), 67 deletions(-) create mode 100644 app/models/form/sales/pages/buyer2_ethnic_background_arab.rb create mode 100644 app/models/form/sales/pages/buyer2_ethnic_background_asian.rb create mode 100644 app/models/form/sales/pages/buyer2_ethnic_background_black.rb create mode 100644 app/models/form/sales/pages/buyer2_ethnic_background_mixed.rb create mode 100644 app/models/form/sales/pages/buyer2_ethnic_background_white.rb create mode 100644 app/models/form/sales/pages/buyer2_ethnic_group.rb create mode 100644 app/models/form/sales/questions/buyer2_ethnic_background_arab.rb create mode 100644 app/models/form/sales/questions/buyer2_ethnic_background_asian.rb create mode 100644 app/models/form/sales/questions/buyer2_ethnic_background_black.rb create mode 100644 app/models/form/sales/questions/buyer2_ethnic_background_mixed.rb create mode 100644 app/models/form/sales/questions/buyer2_ethnic_background_white.rb create mode 100644 app/models/form/sales/questions/buyer2_ethnic_group.rb create mode 100644 db/migrate/20230210143120_add_ethnic_fields_for_buyer2.rb create mode 100644 spec/models/form/sales/pages/buyer2_ethnic_background_arab_spec.rb create mode 100644 spec/models/form/sales/pages/buyer2_ethnic_background_asian_spec.rb create mode 100644 spec/models/form/sales/pages/buyer2_ethnic_background_black_spec.rb create mode 100644 spec/models/form/sales/pages/buyer2_ethnic_background_mixed_spec.rb create mode 100644 spec/models/form/sales/pages/buyer2_ethnic_background_white_spec.rb create mode 100644 spec/models/form/sales/pages/buyer2_ethnic_group_spec.rb create mode 100644 spec/models/form/sales/questions/buyer2_ethnic_background_arab_spec.rb create mode 100644 spec/models/form/sales/questions/buyer2_ethnic_background_asian_spec.rb create mode 100644 spec/models/form/sales/questions/buyer2_ethnic_background_black_spec.rb create mode 100644 spec/models/form/sales/questions/buyer2_ethnic_background_mixed_spec.rb create mode 100644 spec/models/form/sales/questions/buyer2_ethnic_background_white_spec.rb create mode 100644 spec/models/form/sales/questions/buyer2_ethnic_group_spec.rb diff --git a/app/models/form/sales/pages/buyer2_ethnic_background_arab.rb b/app/models/form/sales/pages/buyer2_ethnic_background_arab.rb new file mode 100644 index 000000000..593e43ebc --- /dev/null +++ b/app/models/form/sales/pages/buyer2_ethnic_background_arab.rb @@ -0,0 +1,15 @@ +class Form::Sales::Pages::Buyer2EthnicBackgroundArab < ::Form::Page + def initialize(id, hsh, subsection) + super + @id = "buyer_2_ethnic_background_arab" + @depends_on = [{ + "ethnic_group2" => 4, + }] + end + + def questions + @questions ||= [ + Form::Sales::Questions::Buyer2EthnicBackgroundArab.new(nil, nil, self), + ] + end +end diff --git a/app/models/form/sales/pages/buyer2_ethnic_background_asian.rb b/app/models/form/sales/pages/buyer2_ethnic_background_asian.rb new file mode 100644 index 000000000..98a36476e --- /dev/null +++ b/app/models/form/sales/pages/buyer2_ethnic_background_asian.rb @@ -0,0 +1,15 @@ +class Form::Sales::Pages::Buyer2EthnicBackgroundAsian < ::Form::Page + def initialize(id, hsh, subsection) + super + @id = "buyer_2_ethnic_background_asian" + @depends_on = [{ + "ethnic_group2" => 2, + }] + end + + def questions + @questions ||= [ + Form::Sales::Questions::Buyer2EthnicBackgroundAsian.new(nil, nil, self), + ] + end +end diff --git a/app/models/form/sales/pages/buyer2_ethnic_background_black.rb b/app/models/form/sales/pages/buyer2_ethnic_background_black.rb new file mode 100644 index 000000000..a772f46ac --- /dev/null +++ b/app/models/form/sales/pages/buyer2_ethnic_background_black.rb @@ -0,0 +1,15 @@ +class Form::Sales::Pages::Buyer2EthnicBackgroundBlack < ::Form::Page + def initialize(id, hsh, subsection) + super + @id = "buyer_2_ethnic_background_black" + @depends_on = [{ + "ethnic_group2" => 3, + }] + end + + def questions + @questions ||= [ + Form::Sales::Questions::Buyer2EthnicBackgroundBlack.new(nil, nil, self), + ] + end +end diff --git a/app/models/form/sales/pages/buyer2_ethnic_background_mixed.rb b/app/models/form/sales/pages/buyer2_ethnic_background_mixed.rb new file mode 100644 index 000000000..f02165dfc --- /dev/null +++ b/app/models/form/sales/pages/buyer2_ethnic_background_mixed.rb @@ -0,0 +1,15 @@ +class Form::Sales::Pages::Buyer2EthnicBackgroundMixed < ::Form::Page + def initialize(id, hsh, subsection) + super + @id = "buyer_2_ethnic_background_mixed" + @depends_on = [{ + "ethnic_group2" => 1, + }] + end + + def questions + @questions ||= [ + Form::Sales::Questions::Buyer2EthnicBackgroundMixed.new(nil, nil, self), + ] + end +end diff --git a/app/models/form/sales/pages/buyer2_ethnic_background_white.rb b/app/models/form/sales/pages/buyer2_ethnic_background_white.rb new file mode 100644 index 000000000..2013c8682 --- /dev/null +++ b/app/models/form/sales/pages/buyer2_ethnic_background_white.rb @@ -0,0 +1,15 @@ +class Form::Sales::Pages::Buyer2EthnicBackgroundWhite < ::Form::Page + def initialize(id, hsh, subsection) + super + @id = "buyer_2_ethnic_background_white" + @depends_on = [{ + "ethnic_group2" => 0, + }] + end + + def questions + @questions ||= [ + Form::Sales::Questions::Buyer2EthnicBackgroundWhite.new(nil, nil, self), + ] + end +end diff --git a/app/models/form/sales/pages/buyer2_ethnic_group.rb b/app/models/form/sales/pages/buyer2_ethnic_group.rb new file mode 100644 index 000000000..1b815996e --- /dev/null +++ b/app/models/form/sales/pages/buyer2_ethnic_group.rb @@ -0,0 +1,22 @@ +class Form::Sales::Pages::Buyer2EthnicGroup < ::Form::Page + def initialize(id, hsh, subsection) + super + @id = "buyer_2_ethnic_group" + @depends_on = [ + { + "jointpur" => 1, + "privacynotice" => 1, + }, + { + "jointpur" => 1, + "noint" => 1, + }, + ] + end + + def questions + @questions ||= [ + Form::Sales::Questions::Buyer2EthnicGroup.new(nil, nil, self), + ] + end +end diff --git a/app/models/form/sales/questions/buyer2_ethnic_background_arab.rb b/app/models/form/sales/questions/buyer2_ethnic_background_arab.rb new file mode 100644 index 000000000..1766780b7 --- /dev/null +++ b/app/models/form/sales/questions/buyer2_ethnic_background_arab.rb @@ -0,0 +1,16 @@ +class Form::Sales::Questions::Buyer2EthnicBackgroundArab < ::Form::Question + def initialize(id, hsh, page) + super + @id = "ethnicbuy2" + @check_answer_label = "Buyer 2’s ethnic background" + @header = "Which of the following best describes the buyer 2’s Arab background?" + @type = "radio" + @answer_options = ANSWER_OPTIONS + @check_answers_card_number = 2 + end + + ANSWER_OPTIONS = { + "19" => { "value" => "Arab" }, + "16" => { "value" => "Other ethnic group" }, + }.freeze +end diff --git a/app/models/form/sales/questions/buyer2_ethnic_background_asian.rb b/app/models/form/sales/questions/buyer2_ethnic_background_asian.rb new file mode 100644 index 000000000..2578d220a --- /dev/null +++ b/app/models/form/sales/questions/buyer2_ethnic_background_asian.rb @@ -0,0 +1,19 @@ +class Form::Sales::Questions::Buyer2EthnicBackgroundAsian < ::Form::Question + def initialize(id, hsh, page) + super + @id = "ethnicbuy2" + @check_answer_label = "Buyer 2’s ethnic background" + @header = "Which of the following best describes the buyer 2’s Asian or Asian British background?" + @type = "radio" + @answer_options = ANSWER_OPTIONS + @check_answers_card_number = 2 + end + + ANSWER_OPTIONS = { + "10" => { "value" => "Bangladeshi" }, + "15" => { "value" => "Chinese" }, + "8" => { "value" => "Indian" }, + "9" => { "value" => "Pakistani" }, + "11" => { "value" => "Any other Asian or Asian British background" }, + }.freeze +end diff --git a/app/models/form/sales/questions/buyer2_ethnic_background_black.rb b/app/models/form/sales/questions/buyer2_ethnic_background_black.rb new file mode 100644 index 000000000..11d47790c --- /dev/null +++ b/app/models/form/sales/questions/buyer2_ethnic_background_black.rb @@ -0,0 +1,17 @@ +class Form::Sales::Questions::Buyer2EthnicBackgroundBlack < ::Form::Question + def initialize(id, hsh, page) + super + @id = "ethnicbuy2" + @check_answer_label = "Buyer 2’s ethnic background" + @header = "Which of the following best describes the buyer 2’s Black, African, Caribbean or Black British background?" + @type = "radio" + @answer_options = ANSWER_OPTIONS + @check_answers_card_number = 2 + end + + ANSWER_OPTIONS = { + "13" => { "value" => "African" }, + "12" => { "value" => "Caribbean" }, + "14" => { "value" => "Any other Black, African or Caribbean background" }, + }.freeze +end diff --git a/app/models/form/sales/questions/buyer2_ethnic_background_mixed.rb b/app/models/form/sales/questions/buyer2_ethnic_background_mixed.rb new file mode 100644 index 000000000..78600af34 --- /dev/null +++ b/app/models/form/sales/questions/buyer2_ethnic_background_mixed.rb @@ -0,0 +1,18 @@ +class Form::Sales::Questions::Buyer2EthnicBackgroundMixed < ::Form::Question + def initialize(id, hsh, page) + super + @id = "ethnicbuy2" + @check_answer_label = "Buyer 2’s ethnic background" + @header = "Which of the following best describes the buyer 2’s Mixed or Multiple ethnic groups background?" + @type = "radio" + @answer_options = ANSWER_OPTIONS + @check_answers_card_number = 2 + end + + ANSWER_OPTIONS = { + "4" => { "value" => "White and Black Caribbean" }, + "5" => { "value" => "White and Black African" }, + "6" => { "value" => "White and Asian" }, + "7" => { "value" => "Any other Mixed or Multiple ethnic background" }, + }.freeze +end diff --git a/app/models/form/sales/questions/buyer2_ethnic_background_white.rb b/app/models/form/sales/questions/buyer2_ethnic_background_white.rb new file mode 100644 index 000000000..5b5fc8e2c --- /dev/null +++ b/app/models/form/sales/questions/buyer2_ethnic_background_white.rb @@ -0,0 +1,18 @@ +class Form::Sales::Questions::Buyer2EthnicBackgroundWhite < ::Form::Question + def initialize(id, hsh, page) + super + @id = "ethnicbuy2" + @check_answer_label = "Buyer 2’s ethnic background" + @header = "Which of the following best describes the buyer 2’s White background?" + @type = "radio" + @answer_options = ANSWER_OPTIONS + @check_answers_card_number = 2 + end + + ANSWER_OPTIONS = { + "1" => { "value" => "English, Welsh, Northern Irish, Scottish or British" }, + "2" => { "value" => "Irish" }, + "18" => { "value" => "Gypsy or Irish Traveller" }, + "3" => { "value" => "Any other White background" }, + }.freeze +end diff --git a/app/models/form/sales/questions/buyer2_ethnic_group.rb b/app/models/form/sales/questions/buyer2_ethnic_group.rb new file mode 100644 index 000000000..5366910fe --- /dev/null +++ b/app/models/form/sales/questions/buyer2_ethnic_group.rb @@ -0,0 +1,27 @@ +class Form::Sales::Questions::Buyer2EthnicGroup < ::Form::Question + def initialize(id, hsh, page) + super + @id = "ethnic_group2" + @check_answer_label = "Buyer 2’s ethnic group" + @header = "What is buyer 2’s ethnic group?" + @type = "radio" + @answer_options = ANSWER_OPTIONS + @inferred_check_answers_value = [{ + "condition" => { + "ethnic_group2" => 17, + }, + "value" => "Prefers not to say", + }] + @check_answers_card_number = 2 + end + + ANSWER_OPTIONS = { + "0" => { "value" => "White" }, + "1" => { "value" => "Mixed or Multiple ethnic groups" }, + "2" => { "value" => "Asian or Asian British" }, + "3" => { "value" => "Black, African, Caribbean or Black British" }, + "4" => { "value" => "Arab or other ethnic group" }, + "divider" => { "value" => true }, + "17" => { "value" => "Buyer 1 prefers not to say" }, + }.freeze +end diff --git a/app/models/form/sales/subsections/household_characteristics.rb b/app/models/form/sales/subsections/household_characteristics.rb index 7e342499e..55ec0b137 100644 --- a/app/models/form/sales/subsections/household_characteristics.rb +++ b/app/models/form/sales/subsections/household_characteristics.rb @@ -32,6 +32,7 @@ class Form::Sales::Subsections::HouseholdCharacteristics < ::Form::Subsection Form::Sales::Pages::RetirementValueCheck.new("age_2_buyer_retirement_value_check", nil, self, person_index: 2), Form::Sales::Pages::GenderIdentity2.new(nil, nil, self), Form::Sales::Pages::RetirementValueCheck.new("gender_2_buyer_retirement_value_check", nil, self, person_index: 2), + ethnic_pages_for_buyer_2, Form::Sales::Pages::Buyer2WorkingSituation.new(nil, nil, self), Form::Sales::Pages::RetirementValueCheck.new("working_situation_2_buyer_retirement_value_check", nil, self, person_index: 2), Form::Sales::Pages::Buyer2LiveInProperty.new(nil, nil, self), @@ -68,6 +69,17 @@ class Form::Sales::Subsections::HouseholdCharacteristics < ::Form::Subsection Form::Sales::Pages::RetirementValueCheck.new("gender_5_retirement_value_check", nil, self, person_index: 5), Form::Sales::Pages::PersonWorkingSituation.new("person_5_working_situation", nil, self, person_index: 5), Form::Sales::Pages::RetirementValueCheck.new("working_situation_5_retirement_value_check", nil, self, person_index: 5), - ] + ].flatten.compact + end + + def ethnic_pages_for_buyer_2 + if form.start_date.year >= 2023 + [Form::Sales::Pages::Buyer2EthnicGroup.new(nil, nil, self), + Form::Sales::Pages::Buyer2EthnicBackgroundBlack.new(nil, nil, self), + Form::Sales::Pages::Buyer2EthnicBackgroundAsian.new(nil, nil, self), + Form::Sales::Pages::Buyer2EthnicBackgroundArab.new(nil, nil, self), + Form::Sales::Pages::Buyer2EthnicBackgroundMixed.new(nil, nil, self), + Form::Sales::Pages::Buyer2EthnicBackgroundWhite.new(nil, nil, self)] + end end end diff --git a/db/migrate/20230210143120_add_ethnic_fields_for_buyer2.rb b/db/migrate/20230210143120_add_ethnic_fields_for_buyer2.rb new file mode 100644 index 000000000..c545a0539 --- /dev/null +++ b/db/migrate/20230210143120_add_ethnic_fields_for_buyer2.rb @@ -0,0 +1,8 @@ +class AddEthnicFieldsForBuyer2 < ActiveRecord::Migration[7.0] + def change + change_table :sales_logs, bulk: true do |t| + t.column :ethnic_group2, :integer + t.column :ethnicbuy2, :integer + end + end +end diff --git a/db/schema.rb b/db/schema.rb index 679b582c1..ffea32c01 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: 2023_02_10_122037) do +ActiveRecord::Schema[7.0].define(version: 2023_02_10_143120) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -526,6 +526,8 @@ ActiveRecord::Schema[7.0].define(version: 2023_02_10_122037) do t.integer "saledate_check" t.integer "staircasesale" t.integer "prevshared" + t.integer "ethnic_group2" + t.integer "ethnicbuy2" 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 ["owning_organisation_id"], name: "index_sales_logs_on_owning_organisation_id" diff --git a/spec/models/form/sales/pages/buyer2_ethnic_background_arab_spec.rb b/spec/models/form/sales/pages/buyer2_ethnic_background_arab_spec.rb new file mode 100644 index 000000000..1fbbe3bc8 --- /dev/null +++ b/spec/models/form/sales/pages/buyer2_ethnic_background_arab_spec.rb @@ -0,0 +1,33 @@ +require "rails_helper" + +RSpec.describe Form::Sales::Pages::Buyer2EthnicBackgroundArab, 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[ethnicbuy2]) + end + + it "has the correct id" do + expect(page.id).to eq("buyer_2_ethnic_background_arab") + end + + it "has the correct header" do + expect(page.header).to be_nil + end + + it "has the correct description" do + expect(page.description).to be_nil + end + + it "has correct depends_on" do + expect(page.depends_on).to eq([{ "ethnic_group2" => 4 }]) + end +end diff --git a/spec/models/form/sales/pages/buyer2_ethnic_background_asian_spec.rb b/spec/models/form/sales/pages/buyer2_ethnic_background_asian_spec.rb new file mode 100644 index 000000000..60878f99a --- /dev/null +++ b/spec/models/form/sales/pages/buyer2_ethnic_background_asian_spec.rb @@ -0,0 +1,33 @@ +require "rails_helper" + +RSpec.describe Form::Sales::Pages::Buyer2EthnicBackgroundAsian, 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[ethnicbuy2]) + end + + it "has the correct id" do + expect(page.id).to eq("buyer_2_ethnic_background_asian") + end + + it "has the correct header" do + expect(page.header).to be_nil + end + + it "has the correct description" do + expect(page.description).to be_nil + end + + it "has correct depends_on" do + expect(page.depends_on).to eq([{ "ethnic_group2" => 2 }]) + end +end diff --git a/spec/models/form/sales/pages/buyer2_ethnic_background_black_spec.rb b/spec/models/form/sales/pages/buyer2_ethnic_background_black_spec.rb new file mode 100644 index 000000000..2643f460b --- /dev/null +++ b/spec/models/form/sales/pages/buyer2_ethnic_background_black_spec.rb @@ -0,0 +1,33 @@ +require "rails_helper" + +RSpec.describe Form::Sales::Pages::Buyer2EthnicBackgroundBlack, 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[ethnicbuy2]) + end + + it "has the correct id" do + expect(page.id).to eq("buyer_2_ethnic_background_black") + end + + it "has the correct header" do + expect(page.header).to be_nil + end + + it "has the correct description" do + expect(page.description).to be_nil + end + + it "has correct depends_on" do + expect(page.depends_on).to eq([{ "ethnic_group2" => 3 }]) + end +end diff --git a/spec/models/form/sales/pages/buyer2_ethnic_background_mixed_spec.rb b/spec/models/form/sales/pages/buyer2_ethnic_background_mixed_spec.rb new file mode 100644 index 000000000..4505ce08b --- /dev/null +++ b/spec/models/form/sales/pages/buyer2_ethnic_background_mixed_spec.rb @@ -0,0 +1,33 @@ +require "rails_helper" + +RSpec.describe Form::Sales::Pages::Buyer2EthnicBackgroundMixed, 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[ethnicbuy2]) + end + + it "has the correct id" do + expect(page.id).to eq("buyer_2_ethnic_background_mixed") + end + + it "has the correct header" do + expect(page.header).to be_nil + end + + it "has the correct description" do + expect(page.description).to be_nil + end + + it "has correct depends_on" do + expect(page.depends_on).to eq([{ "ethnic_group2" => 1 }]) + end +end diff --git a/spec/models/form/sales/pages/buyer2_ethnic_background_white_spec.rb b/spec/models/form/sales/pages/buyer2_ethnic_background_white_spec.rb new file mode 100644 index 000000000..7647f35af --- /dev/null +++ b/spec/models/form/sales/pages/buyer2_ethnic_background_white_spec.rb @@ -0,0 +1,33 @@ +require "rails_helper" + +RSpec.describe Form::Sales::Pages::Buyer2EthnicBackgroundWhite, 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[ethnicbuy2]) + end + + it "has the correct id" do + expect(page.id).to eq("buyer_2_ethnic_background_white") + end + + it "has the correct header" do + expect(page.header).to be_nil + end + + it "has the correct description" do + expect(page.description).to be_nil + end + + it "has correct depends_on" do + expect(page.depends_on).to eq([{ "ethnic_group2" => 0 }]) + end +end diff --git a/spec/models/form/sales/pages/buyer2_ethnic_group_spec.rb b/spec/models/form/sales/pages/buyer2_ethnic_group_spec.rb new file mode 100644 index 000000000..2767a2168 --- /dev/null +++ b/spec/models/form/sales/pages/buyer2_ethnic_group_spec.rb @@ -0,0 +1,42 @@ +require "rails_helper" + +RSpec.describe Form::Sales::Pages::Buyer2EthnicGroup, 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[ethnic_group2]) + end + + it "has the correct id" do + expect(page.id).to eq("buyer_2_ethnic_group") + end + + it "has the correct header" do + expect(page.header).to be_nil + end + + it "has the correct description" do + expect(page.description).to be_nil + end + + it "has correct depends_on" do + expect(page.depends_on).to eq([ + { + "jointpur" => 1, + "privacynotice" => 1, + }, + { + "jointpur" => 1, + "noint" => 1, + }, + ]) + end +end diff --git a/spec/models/form/sales/questions/buyer2_ethnic_background_arab_spec.rb b/spec/models/form/sales/questions/buyer2_ethnic_background_arab_spec.rb new file mode 100644 index 000000000..9fd408db9 --- /dev/null +++ b/spec/models/form/sales/questions/buyer2_ethnic_background_arab_spec.rb @@ -0,0 +1,48 @@ +require "rails_helper" + +RSpec.describe Form::Sales::Questions::Buyer2EthnicBackgroundArab, 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("ethnicbuy2") + end + + it "has the correct header" do + expect(question.header).to eq("Which of the following best describes the buyer 2’s Arab background?") + end + + it "has the correct check_answer_label" do + expect(question.check_answer_label).to eq("Buyer 2’s ethnic background") + 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_text" do + expect(question.hint_text).to be nil + end + + it "has the correct answer_options" do + expect(question.answer_options).to eq({ + "16" => { "value" => "Other ethnic group" }, + "19" => { "value" => "Arab" }, + }) + end + + it "has the correct check_answers_card_number" do + expect(question.check_answers_card_number).to eq(2) + end +end diff --git a/spec/models/form/sales/questions/buyer2_ethnic_background_asian_spec.rb b/spec/models/form/sales/questions/buyer2_ethnic_background_asian_spec.rb new file mode 100644 index 000000000..67ce60e43 --- /dev/null +++ b/spec/models/form/sales/questions/buyer2_ethnic_background_asian_spec.rb @@ -0,0 +1,51 @@ +require "rails_helper" + +RSpec.describe Form::Sales::Questions::Buyer2EthnicBackgroundAsian, 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("ethnicbuy2") + end + + it "has the correct header" do + expect(question.header).to eq("Which of the following best describes the buyer 2’s Asian or Asian British background?") + end + + it "has the correct check_answer_label" do + expect(question.check_answer_label).to eq("Buyer 2’s ethnic background") + 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_text" do + expect(question.hint_text).to be nil + end + + it "has the correct answer_options" do + expect(question.answer_options).to eq({ + "10" => { "value" => "Bangladeshi" }, + "11" => { "value" => "Any other Asian or Asian British background" }, + "15" => { "value" => "Chinese" }, + "8" => { "value" => "Indian" }, + "9" => { "value" => "Pakistani" }, + }) + end + + it "has the correct check_answers_card_number" do + expect(question.check_answers_card_number).to eq(2) + end +end diff --git a/spec/models/form/sales/questions/buyer2_ethnic_background_black_spec.rb b/spec/models/form/sales/questions/buyer2_ethnic_background_black_spec.rb new file mode 100644 index 000000000..8e772f870 --- /dev/null +++ b/spec/models/form/sales/questions/buyer2_ethnic_background_black_spec.rb @@ -0,0 +1,49 @@ +require "rails_helper" + +RSpec.describe Form::Sales::Questions::Buyer2EthnicBackgroundBlack, 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("ethnicbuy2") + end + + it "has the correct header" do + expect(question.header).to eq("Which of the following best describes the buyer 2’s Black, African, Caribbean or Black British background?") + end + + it "has the correct check_answer_label" do + expect(question.check_answer_label).to eq("Buyer 2’s ethnic background") + 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_text" do + expect(question.hint_text).to be nil + end + + it "has the correct answer_options" do + expect(question.answer_options).to eq({ + "12" => { "value" => "Caribbean" }, + "13" => { "value" => "African" }, + "14" => { "value" => "Any other Black, African or Caribbean background" }, + }) + end + + it "has the correct check_answers_card_number" do + expect(question.check_answers_card_number).to eq(2) + end +end diff --git a/spec/models/form/sales/questions/buyer2_ethnic_background_mixed_spec.rb b/spec/models/form/sales/questions/buyer2_ethnic_background_mixed_spec.rb new file mode 100644 index 000000000..6c1b12865 --- /dev/null +++ b/spec/models/form/sales/questions/buyer2_ethnic_background_mixed_spec.rb @@ -0,0 +1,50 @@ +require "rails_helper" + +RSpec.describe Form::Sales::Questions::Buyer2EthnicBackgroundMixed, 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("ethnicbuy2") + end + + it "has the correct header" do + expect(question.header).to eq("Which of the following best describes the buyer 2’s Mixed or Multiple ethnic groups background?") + end + + it "has the correct check_answer_label" do + expect(question.check_answer_label).to eq("Buyer 2’s ethnic background") + 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_text" do + expect(question.hint_text).to be nil + end + + it "has the correct answer_options" do + expect(question.answer_options).to eq({ + "4" => { "value" => "White and Black Caribbean" }, + "5" => { "value" => "White and Black African" }, + "6" => { "value" => "White and Asian" }, + "7" => { "value" => "Any other Mixed or Multiple ethnic background" }, + }) + end + + it "has the correct check_answers_card_number" do + expect(question.check_answers_card_number).to eq(2) + end +end diff --git a/spec/models/form/sales/questions/buyer2_ethnic_background_white_spec.rb b/spec/models/form/sales/questions/buyer2_ethnic_background_white_spec.rb new file mode 100644 index 000000000..d3f2da508 --- /dev/null +++ b/spec/models/form/sales/questions/buyer2_ethnic_background_white_spec.rb @@ -0,0 +1,50 @@ +require "rails_helper" + +RSpec.describe Form::Sales::Questions::Buyer2EthnicBackgroundWhite, 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("ethnicbuy2") + end + + it "has the correct header" do + expect(question.header).to eq("Which of the following best describes the buyer 2’s White background?") + end + + it "has the correct check_answer_label" do + expect(question.check_answer_label).to eq("Buyer 2’s ethnic background") + 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_text" do + expect(question.hint_text).to be nil + end + + it "has the correct answer_options" do + expect(question.answer_options).to eq({ + "1" => { "value" => "English, Welsh, Northern Irish, Scottish or British" }, + "18" => { "value" => "Gypsy or Irish Traveller" }, + "2" => { "value" => "Irish" }, + "3" => { "value" => "Any other White background" }, + }) + end + + it "has the correct check_answers_card_number" do + expect(question.check_answers_card_number).to eq(2) + end +end diff --git a/spec/models/form/sales/questions/buyer2_ethnic_group_spec.rb b/spec/models/form/sales/questions/buyer2_ethnic_group_spec.rb new file mode 100644 index 000000000..2e9e0c28c --- /dev/null +++ b/spec/models/form/sales/questions/buyer2_ethnic_group_spec.rb @@ -0,0 +1,62 @@ +require "rails_helper" + +RSpec.describe Form::Sales::Questions::Buyer2EthnicGroup, 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("ethnic_group2") + end + + it "has the correct header" do + expect(question.header).to eq("What is buyer 2’s ethnic group?") + end + + it "has the correct check_answer_label" do + expect(question.check_answer_label).to eq("Buyer 2’s ethnic group") + 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_text" do + expect(question.hint_text).to be nil + end + + it "has the correct answer_options" do + expect(question.answer_options).to eq({ + "0" => { "value" => "White" }, + "1" => { "value" => "Mixed or Multiple ethnic groups" }, + "17" => { "value" => "Buyer 1 prefers not to say" }, + "2" => { "value" => "Asian or Asian British" }, + "3" => { "value" => "Black, African, Caribbean or Black British" }, + "4" => { "value" => "Arab or other ethnic group" }, + "divider" => { "value" => true }, + }) + end + + it "has the correct check_answers_card_number" do + expect(question.check_answers_card_number).to eq(2) + end + + it "has the correct inferred_check_answers_value" do + expect(question.inferred_check_answers_value).to eq([{ + "condition" => { + "ethnic_group2" => 17, + }, + "value" => "Prefers not to say", + }]) + 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 681b4b50b..76109b7f4 100644 --- a/spec/models/form/sales/subsections/household_characteristics_spec.rb +++ b/spec/models/form/sales/subsections/household_characteristics_spec.rb @@ -6,76 +6,164 @@ RSpec.describe Form::Sales::Subsections::HouseholdCharacteristics, type: :model let(:subsection_id) { nil } let(:subsection_definition) { nil } let(:section) { instance_double(Form::Sales::Sections::Household) } + let(:form) { instance_double(Form) } it "has correct section" do expect(household_characteristics.section).to eq(section) end - it "has correct pages" do - expect(household_characteristics.pages.map(&:id)).to eq( - %w[ - buyer_interview - privacy_notice - buyer_1_age - age_1_retirement_value_check - age_1_old_persons_shared_ownership_value_check - buyer_1_gender_identity - gender_1_retirement_value_check - buyer_1_ethnic_group - buyer_1_ethnic_background_black - buyer_1_ethnic_background_asian - buyer_1_ethnic_background_arab - buyer_1_ethnic_background_mixed - buyer_1_ethnic_background_white - buyer_1_nationality - buyer_1_working_situation - working_situation_1_retirement_value_check - working_situation_buyer_1_income_value_check - buyer_1_live_in_property - buyer_2_relationship_to_buyer_1 - buyer_2_age - age_2_old_persons_shared_ownership_value_check - age_2_buyer_retirement_value_check - buyer_2_gender_identity - gender_2_buyer_retirement_value_check - buyer_2_working_situation - working_situation_2_buyer_retirement_value_check - buyer_2_live_in_property - number_of_others_in_property - person_2_known - person_2_relationship_to_buyer_1 - person_2_age - age_2_retirement_value_check - person_2_gender_identity - gender_2_retirement_value_check - person_2_working_situation - working_situation_2_retirement_value_check - person_3_known - person_3_relationship_to_buyer_1 - person_3_age - age_3_retirement_value_check - person_3_gender_identity - gender_3_retirement_value_check - person_3_working_situation - working_situation_3_retirement_value_check - person_4_known - person_4_relationship_to_buyer_1 - person_4_age - age_4_retirement_value_check - person_4_gender_identity - gender_4_retirement_value_check - person_4_working_situation - working_situation_4_retirement_value_check - person_5_known - person_5_relationship_to_buyer_1 - person_5_age - age_5_retirement_value_check - person_5_gender_identity - gender_5_retirement_value_check - person_5_working_situation - working_situation_5_retirement_value_check - ], - ) + context "with 2022/23 form" do + before do + allow(form).to receive(:start_date).and_return(Time.zone.local(2022, 4, 1)) + allow(section).to receive(:form).and_return(form) + end + + it "has correct pages" do + expect(household_characteristics.pages.map(&:id)).to eq( + %w[ + buyer_interview + privacy_notice + buyer_1_age + age_1_retirement_value_check + age_1_old_persons_shared_ownership_value_check + buyer_1_gender_identity + gender_1_retirement_value_check + buyer_1_ethnic_group + buyer_1_ethnic_background_black + buyer_1_ethnic_background_asian + buyer_1_ethnic_background_arab + buyer_1_ethnic_background_mixed + buyer_1_ethnic_background_white + buyer_1_nationality + buyer_1_working_situation + working_situation_1_retirement_value_check + working_situation_buyer_1_income_value_check + buyer_1_live_in_property + buyer_2_relationship_to_buyer_1 + buyer_2_age + age_2_old_persons_shared_ownership_value_check + age_2_buyer_retirement_value_check + buyer_2_gender_identity + gender_2_buyer_retirement_value_check + buyer_2_working_situation + working_situation_2_buyer_retirement_value_check + buyer_2_live_in_property + number_of_others_in_property + person_2_known + person_2_relationship_to_buyer_1 + person_2_age + age_2_retirement_value_check + person_2_gender_identity + gender_2_retirement_value_check + person_2_working_situation + working_situation_2_retirement_value_check + person_3_known + person_3_relationship_to_buyer_1 + person_3_age + age_3_retirement_value_check + person_3_gender_identity + gender_3_retirement_value_check + person_3_working_situation + working_situation_3_retirement_value_check + person_4_known + person_4_relationship_to_buyer_1 + person_4_age + age_4_retirement_value_check + person_4_gender_identity + gender_4_retirement_value_check + person_4_working_situation + working_situation_4_retirement_value_check + person_5_known + person_5_relationship_to_buyer_1 + person_5_age + age_5_retirement_value_check + person_5_gender_identity + gender_5_retirement_value_check + person_5_working_situation + working_situation_5_retirement_value_check + ], + ) + end + end + + context "with 2023/24 form" do + before do + allow(form).to receive(:start_date).and_return(Time.zone.local(2023, 4, 1)) + allow(section).to receive(:form).and_return(form) + end + + it "has correct pages" do + expect(household_characteristics.pages.map(&:id)).to eq( + %w[ + buyer_interview + privacy_notice + buyer_1_age + age_1_retirement_value_check + age_1_old_persons_shared_ownership_value_check + buyer_1_gender_identity + gender_1_retirement_value_check + buyer_1_ethnic_group + buyer_1_ethnic_background_black + buyer_1_ethnic_background_asian + buyer_1_ethnic_background_arab + buyer_1_ethnic_background_mixed + buyer_1_ethnic_background_white + buyer_1_nationality + buyer_1_working_situation + working_situation_1_retirement_value_check + working_situation_buyer_1_income_value_check + buyer_1_live_in_property + buyer_2_relationship_to_buyer_1 + buyer_2_age + age_2_old_persons_shared_ownership_value_check + age_2_buyer_retirement_value_check + buyer_2_gender_identity + gender_2_buyer_retirement_value_check + buyer_2_ethnic_group + buyer_2_ethnic_background_black + buyer_2_ethnic_background_asian + buyer_2_ethnic_background_arab + buyer_2_ethnic_background_mixed + buyer_2_ethnic_background_white + buyer_2_working_situation + working_situation_2_buyer_retirement_value_check + buyer_2_live_in_property + number_of_others_in_property + person_2_known + person_2_relationship_to_buyer_1 + person_2_age + age_2_retirement_value_check + person_2_gender_identity + gender_2_retirement_value_check + person_2_working_situation + working_situation_2_retirement_value_check + person_3_known + person_3_relationship_to_buyer_1 + person_3_age + age_3_retirement_value_check + person_3_gender_identity + gender_3_retirement_value_check + person_3_working_situation + working_situation_3_retirement_value_check + person_4_known + person_4_relationship_to_buyer_1 + person_4_age + age_4_retirement_value_check + person_4_gender_identity + gender_4_retirement_value_check + person_4_working_situation + working_situation_4_retirement_value_check + person_5_known + person_5_relationship_to_buyer_1 + person_5_age + age_5_retirement_value_check + person_5_gender_identity + gender_5_retirement_value_check + person_5_working_situation + working_situation_5_retirement_value_check + ], + ) + end end it "has the correct id" do