Browse Source

CLDC-1925 ask for buyer 2 nationality when joint purchase (#1390)

* create migration for new column

* create page class and add to household characteristics

* create question for buyer 2 nationality and associated test file

* fix failing test after added page

* rename method after code review

* add question number for the new question to allow CLDC-1864 to progress with fewer conflicts/complications
pull/1413/head
Arthur Campbell 2 years ago committed by GitHub
parent
commit
be6d4f62e9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 11
      app/models/form/sales/pages/buyer2_nationality.rb
  2. 26
      app/models/form/sales/questions/buyer2_nationality.rb
  3. 11
      app/models/form/sales/subsections/household_characteristics.rb
  4. 5
      db/migrate/20230307140937_add_nationalbuy2_to_sales_logs.rb
  5. 1
      db/schema.rb
  6. 31
      spec/models/form/sales/pages/buyer2_nationality_spec.rb
  7. 63
      spec/models/form/sales/questions/buyer2_nationality_spec.rb
  8. 1
      spec/models/form/sales/subsections/household_characteristics_spec.rb

11
app/models/form/sales/pages/buyer2_nationality.rb

@ -0,0 +1,11 @@
class Form::Sales::Pages::Buyer2Nationality < ::Form::Page
def initialize(id, hsh, subsection)
super
@id = "buyer_2_nationality"
@depends_on = [{ "joint_purchase?" => true }]
end
def questions
@questions ||= [Form::Sales::Questions::Buyer2Nationality.new(nil, nil, self)]
end
end

26
app/models/form/sales/questions/buyer2_nationality.rb

@ -0,0 +1,26 @@
class Form::Sales::Questions::Buyer2Nationality < ::Form::Question
def initialize(id, hsh, page)
super
@id = "nationalbuy2"
@check_answer_label = "Buyer 2’s nationality"
@header = "What is buyer 2’s nationality?"
@type = "radio"
@answer_options = ANSWER_OPTIONS
@check_answers_card_number = 2
@question_number = 32
@inferred_check_answers_value = [{
"condition" => {
"national" => 13,
},
"value" => "Prefers not to say",
}]
end
ANSWER_OPTIONS = {
"18" => { "value" => "United Kingdom" },
"17" => { "value" => "Republic of Ireland" },
"19" => { "value" => "European Economic Area (EEA), excluding ROI" },
"12" => { "value" => "Other" },
"13" => { "value" => "Buyer prefers not to say" },
}.freeze
end

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

@ -32,7 +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,
buyer_2_ethnicity_nationality_pages,
Form::Sales::Pages::Buyer2WorkingSituation.new(nil, nil, self),
Form::Sales::Pages::RetirementValueCheck.new("working_situation_2_retirement_value_check_joint_purchase", nil, self, person_index: 2),
Form::Sales::Pages::Buyer2IncomeValueCheck.new("working_situation_buyer_2_income_value_check", nil, self),
@ -82,14 +82,17 @@ class Form::Sales::Subsections::HouseholdCharacteristics < ::Form::Subsection
].flatten.compact
end
def ethnic_pages_for_buyer_2
def buyer_2_ethnicity_nationality_pages
if form.start_date.year >= 2023
[Form::Sales::Pages::Buyer2EthnicGroup.new(nil, nil, self),
[
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)]
Form::Sales::Pages::Buyer2EthnicBackgroundWhite.new(nil, nil, self),
Form::Sales::Pages::Buyer2Nationality.new(nil, nil, self),
]
end
end

5
db/migrate/20230307140937_add_nationalbuy2_to_sales_logs.rb

@ -0,0 +1,5 @@
class AddNationalbuy2ToSalesLogs < ActiveRecord::Migration[7.0]
def change
add_column :sales_logs, :nationalbuy2, :integer
end
end

1
db/schema.rb

@ -544,6 +544,7 @@ ActiveRecord::Schema[7.0].define(version: 2023_03_08_101826) do
t.integer "pregblank"
t.integer "buy2living"
t.integer "prevtenbuy2"
t.integer "nationalbuy2"
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 ["old_id"], name: "index_sales_logs_on_old_id", unique: true

31
spec/models/form/sales/pages/buyer2_nationality_spec.rb

@ -0,0 +1,31 @@
require "rails_helper"
RSpec.describe Form::Sales::Pages::Buyer2Nationality, type: :model do
subject(:page) { described_class.new(nil, nil, subsection) }
let(:subsection) { instance_double(Form::Subsection) }
it "has correct subsection" do
expect(page.subsection).to be subsection
end
it "has correct questions" do
expect(page.questions.map(&:id)).to eq %w[nationalbuy2]
end
it "has the correct id" do
expect(page.id).to eq "buyer_2_nationality"
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 [{ "joint_purchase?" => true }]
end
end

63
spec/models/form/sales/questions/buyer2_nationality_spec.rb

@ -0,0 +1,63 @@
require "rails_helper"
RSpec.describe Form::Sales::Questions::Buyer2Nationality, type: :model do
subject(:question) { described_class.new(nil, nil, page) }
let(:page) { instance_double(Form::Page) }
it "has correct page" do
expect(question.page).to be page
end
it "has the correct id" do
expect(question.id).to eq "nationalbuy2"
end
it "has the correct header" do
expect(question.header).to eq "What is buyer 2’s nationality?"
end
it "has the correct check_answer_label" do
expect(question.check_answer_label).to eq "Buyer 2’s nationality"
end
it "has the correct type" do
expect(question.type).to eq "radio"
end
it "is not marked as derived" do
expect(question.derived?).to be false
end
it "has the correct hint" do
expect(question.hint_text).to be nil
end
it "has the correct answer_options" do
expect(question.answer_options).to eq({
"18" => { "value" => "United Kingdom" },
"17" => { "value" => "Republic of Ireland" },
"19" => { "value" => "European Economic Area (EEA), excluding ROI" },
"12" => { "value" => "Other" },
"13" => { "value" => "Buyer prefers not to say" },
})
end
it "has correct conditional for" do
expect(question.conditional_for).to be_nil
end
it "has correct hidden in check answers" do
expect(question.hidden_in_check_answers).to be_nil
end
it "has the correct check_answers_card_number" do
expect(question.check_answers_card_number).to be 2
end
it "has the correct inferred_check_answers_value" do
expect(question.inferred_check_answers_value).to eq([
{ "condition" => { "national" => 13 }, "value" => "Prefers not to say" },
])
end
end

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

@ -135,6 +135,7 @@ RSpec.describe Form::Sales::Subsections::HouseholdCharacteristics, type: :model
buyer_2_ethnic_background_arab
buyer_2_ethnic_background_mixed
buyer_2_ethnic_background_white
buyer_2_nationality
buyer_2_working_situation
working_situation_2_retirement_value_check_joint_purchase
working_situation_buyer_2_income_value_check

Loading…
Cancel
Save