diff --git a/app/models/form/lettings/questions/ethnic_white.rb b/app/models/form/lettings/questions/ethnic_white.rb index 707330175..11bb3ef8a 100644 --- a/app/models/form/lettings/questions/ethnic_white.rb +++ b/app/models/form/lettings/questions/ethnic_white.rb @@ -6,15 +6,26 @@ class Form::Lettings::Questions::EthnicWhite < ::Form::Question @header = "Which of the following best describes the lead tenant’s White background?" @type = "radio" @check_answers_card_number = 1 - @hint_text = "The lead tenant is the person in the household who does the most paid work. If several people do the same paid work, the lead tenant is whoever is the oldest." - @answer_options = ANSWER_OPTIONS + @hint_text = form.start_year_after_2024? ? "" : "The lead tenant is the person in the household who does the most paid work. If several people do the same paid work, the lead tenant is whoever is the oldest." @question_number = 35 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 + def answer_options + if form.start_year_after_2024? + { + "1" => { "value" => "English, Welsh, Northern Irish, Scottish or British" }, + "2" => { "value" => "Irish" }, + "18" => { "value" => "Gypsy or Irish Traveller" }, + "20" => { "value" => "Roma" }, + "3" => { "value" => "Any other White background" }, + }.freeze + else + { + "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 + end end diff --git a/app/models/form/sales/questions/buyer1_ethnic_background_white.rb b/app/models/form/sales/questions/buyer1_ethnic_background_white.rb index 644839979..fb4673a05 100644 --- a/app/models/form/sales/questions/buyer1_ethnic_background_white.rb +++ b/app/models/form/sales/questions/buyer1_ethnic_background_white.rb @@ -5,16 +5,27 @@ class Form::Sales::Questions::Buyer1EthnicBackgroundWhite < ::Form::Question @check_answer_label = "Buyer 1’s ethnic background" @header = "Which of the following best describes buyer 1’s White background?" @type = "radio" - @answer_options = ANSWER_OPTIONS - @hint_text = "Buyer 1 is the person in the household who does the most paid work. If it’s a joint purchase and the buyers do the same amount of paid work, buyer 1 is whoever is the oldest." + @hint_text = form.start_year_after_2024? ? "" : "Buyer 1 is the person in the household who does the most paid work. If it’s a joint purchase and the buyers do the same amount of paid work, buyer 1 is whoever is the oldest." @check_answers_card_number = 1 @question_number = 23 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 + def answer_options + if form.start_year_after_2024? + { + "1" => { "value" => "English, Welsh, Northern Irish, Scottish or British" }, + "2" => { "value" => "Irish" }, + "18" => { "value" => "Gypsy or Irish Traveller" }, + "20" => { "value" => "Roma" }, + "3" => { "value" => "Any other White background" }, + }.freeze + else + { + "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 + end 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 index 1500072e1..1c037d226 100644 --- a/app/models/form/sales/questions/buyer2_ethnic_background_white.rb +++ b/app/models/form/sales/questions/buyer2_ethnic_background_white.rb @@ -5,15 +5,26 @@ class Form::Sales::Questions::Buyer2EthnicBackgroundWhite < ::Form::Question @check_answer_label = "Buyer 2’s ethnic background" @header = "Which of the following best describes buyer 2’s White background?" @type = "radio" - @answer_options = ANSWER_OPTIONS @check_answers_card_number = 2 @question_number = 31 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 + def answer_options + if form.start_year_after_2024? + { + "1" => { "value" => "English, Welsh, Northern Irish, Scottish or British" }, + "2" => { "value" => "Irish" }, + "18" => { "value" => "Gypsy or Irish Traveller" }, + "20" => { "value" => "Roma" }, + "3" => { "value" => "Any other White background" }, + }.freeze + else + { + "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 + end end diff --git a/app/services/bulk_upload/lettings/year2024/row_parser.rb b/app/services/bulk_upload/lettings/year2024/row_parser.rb index 34823ee91..f38e777c7 100644 --- a/app/services/bulk_upload/lettings/year2024/row_parser.rb +++ b/app/services/bulk_upload/lettings/year2024/row_parser.rb @@ -1256,7 +1256,7 @@ private return nil if field_44.blank? case field_44 - when 1, 2, 3, 18 + when 1, 2, 3, 18, 20 0 when 4, 5, 6, 7 1 diff --git a/app/services/bulk_upload/sales/year2024/row_parser.rb b/app/services/bulk_upload/sales/year2024/row_parser.rb index 0e1ee650e..80748c0bc 100644 --- a/app/services/bulk_upload/sales/year2024/row_parser.rb +++ b/app/services/bulk_upload/sales/year2024/row_parser.rb @@ -584,7 +584,7 @@ private def infer_buyer2_ethnic_group_from_ethnic case field_40 - when 1, 2, 3, 18 + when 1, 2, 3, 18, 20 0 when 4, 5, 6, 7 1 @@ -1019,7 +1019,7 @@ private return nil if field_33.blank? case field_33 - when 1, 2, 3, 18 + when 1, 2, 3, 18, 20 0 when 4, 5, 6, 7 1 diff --git a/spec/models/form/lettings/pages/lead_tenant_ethnic_background_white_spec.rb b/spec/models/form/lettings/pages/lead_tenant_ethnic_background_white_spec.rb new file mode 100644 index 000000000..c2504550d --- /dev/null +++ b/spec/models/form/lettings/pages/lead_tenant_ethnic_background_white_spec.rb @@ -0,0 +1,35 @@ +require "rails_helper" + +RSpec.describe Form::Lettings::Pages::LeadTenantEthnicBackgroundWhite, 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) } + let(:form) { instance_double(Form) } + + before do + allow(form).to receive(:start_year_after_2024?).and_return(false) + allow(subsection).to receive(:form).and_return(form) + end + + 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]) + end + + it "has the correct id" do + expect(page.id).to eq("lead_tenant_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 +end diff --git a/spec/models/form/lettings/questions/ethnic_white_spec.rb b/spec/models/form/lettings/questions/ethnic_white_spec.rb new file mode 100644 index 000000000..6a81afb88 --- /dev/null +++ b/spec/models/form/lettings/questions/ethnic_white_spec.rb @@ -0,0 +1,80 @@ +require "rails_helper" + +RSpec.describe Form::Lettings::Questions::EthnicWhite, 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) } + let(:subsection) { instance_double(Form::Subsection) } + let(:form) { instance_double(Form) } + + before do + allow(form).to receive(:start_year_after_2024?).and_return(false) + allow(page).to receive(:subsection).and_return(subsection) + allow(subsection).to receive(:form).and_return(form) + end + + it "has correct page" do + expect(question.page).to eq(page) + end + + it "has the correct id" do + expect(question.id).to eq("ethnic") + end + + it "has the correct header" do + expect(question.header).to eq("Which of the following best describes the lead tenant’s White background?") + end + + it "has the correct check_answer_label" do + expect(question.check_answer_label).to eq("Lead tenant’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 + + context "with 2023/24 form" do + it "has the correct answer_options" do + expect(question.answer_options).to eq({ + "1" => { "value" => "English, Welsh, Northern Irish, Scottish or British" }, + "2" => { "value" => "Irish" }, + "18" => { "value" => "Gypsy or Irish Traveller" }, + "3" => { "value" => "Any other White background" }, + }) + end + + it "has the correct hint_text" do + expect(question.hint_text).to eq("The lead tenant is the person in the household who does the most paid work. If several people do the same paid work, the lead tenant is whoever is the oldest.") + end + end + + context "with 2024/25 form" do + before do + allow(form).to receive(:start_year_after_2024?).and_return(true) + end + + it "has the correct answer_options" do + expect(question.answer_options).to eq({ + "1" => { "value" => "English, Welsh, Northern Irish, Scottish or British" }, + "2" => { "value" => "Irish" }, + "18" => { "value" => "Gypsy or Irish Traveller" }, + "20" => { "value" => "Roma" }, + "3" => { "value" => "Any other White background" }, + }) + end + + it "has the correct hint_text" do + expect(question.hint_text).to eq("") + end + end + + it "has the correct check_answers_card_number" do + expect(question.check_answers_card_number).to eq(1) + end +end diff --git a/spec/models/form/sales/pages/buyer1_ethnic_background_white_spec.rb b/spec/models/form/sales/pages/buyer1_ethnic_background_white_spec.rb index 8a3796025..4071ba03a 100644 --- a/spec/models/form/sales/pages/buyer1_ethnic_background_white_spec.rb +++ b/spec/models/form/sales/pages/buyer1_ethnic_background_white_spec.rb @@ -6,6 +6,12 @@ RSpec.describe Form::Sales::Pages::Buyer1EthnicBackgroundWhite, type: :model do let(:page_id) { nil } let(:page_definition) { nil } let(:subsection) { instance_double(Form::Subsection) } + let(:form) { instance_double(Form) } + + before do + allow(form).to receive(:start_year_after_2024?).and_return(false) + allow(subsection).to receive(:form).and_return(form) + end it "has correct subsection" do expect(page.subsection).to eq(subsection) diff --git a/spec/models/form/sales/questions/buyer1_ethnic_background_white_spec.rb b/spec/models/form/sales/questions/buyer1_ethnic_background_white_spec.rb index 684477542..a4a3a6ef6 100644 --- a/spec/models/form/sales/questions/buyer1_ethnic_background_white_spec.rb +++ b/spec/models/form/sales/questions/buyer1_ethnic_background_white_spec.rb @@ -6,6 +6,14 @@ RSpec.describe Form::Sales::Questions::Buyer1EthnicBackgroundWhite, type: :model let(:question_id) { nil } let(:question_definition) { nil } let(:page) { instance_double(Form::Page) } + let(:subsection) { instance_double(Form::Subsection) } + let(:form) { instance_double(Form) } + + before do + allow(form).to receive(:start_year_after_2024?).and_return(false) + allow(page).to receive(:subsection).and_return(subsection) + allow(subsection).to receive(:form).and_return(form) + end it "has correct page" do expect(question.page).to eq(page) @@ -31,17 +39,39 @@ RSpec.describe Form::Sales::Questions::Buyer1EthnicBackgroundWhite, type: :model expect(question.derived?).to be false end - it "has the correct hint_text" do - expect(question.hint_text).to eq("Buyer 1 is the person in the household who does the most paid work. If it’s a joint purchase and the buyers do the same amount of paid work, buyer 1 is whoever is the oldest.") + context "with 2023/24 form" do + it "has the correct answer_options" do + expect(question.answer_options).to eq({ + "1" => { "value" => "English, Welsh, Northern Irish, Scottish or British" }, + "2" => { "value" => "Irish" }, + "18" => { "value" => "Gypsy or Irish Traveller" }, + "3" => { "value" => "Any other White background" }, + }) + end + + it "has the correct hint_text" do + expect(question.hint_text).to eq("Buyer 1 is the person in the household who does the most paid work. If it’s a joint purchase and the buyers do the same amount of paid work, buyer 1 is whoever is the oldest.") + end 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" }, - }) + context "with 2024/25 form" do + before do + allow(form).to receive(:start_year_after_2024?).and_return(true) + end + + it "has the correct answer_options" do + expect(question.answer_options).to eq({ + "1" => { "value" => "English, Welsh, Northern Irish, Scottish or British" }, + "2" => { "value" => "Irish" }, + "18" => { "value" => "Gypsy or Irish Traveller" }, + "20" => { "value" => "Roma" }, + "3" => { "value" => "Any other White background" }, + }) + end + + it "has the correct hint_text" do + expect(question.hint_text).to eq("") + end end it "has the correct check_answers_card_number" do 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 index d8aaa0292..7e7bf66f7 100644 --- a/spec/models/form/sales/questions/buyer2_ethnic_background_white_spec.rb +++ b/spec/models/form/sales/questions/buyer2_ethnic_background_white_spec.rb @@ -6,6 +6,14 @@ RSpec.describe Form::Sales::Questions::Buyer2EthnicBackgroundWhite, type: :model let(:question_id) { nil } let(:question_definition) { nil } let(:page) { instance_double(Form::Page) } + let(:subsection) { instance_double(Form::Subsection) } + let(:form) { instance_double(Form) } + + before do + allow(form).to receive(:start_year_after_2024?).and_return(false) + allow(page).to receive(:subsection).and_return(subsection) + allow(subsection).to receive(:form).and_return(form) + end it "has correct page" do expect(question.page).to eq(page) @@ -35,16 +43,30 @@ RSpec.describe Form::Sales::Questions::Buyer2EthnicBackgroundWhite, type: :model 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" }, - }) + context "with 2023/24 form" do + it "has the correct answer_options" do + expect(question.answer_options).to eq({ + "1" => { "value" => "English, Welsh, Northern Irish, Scottish or British" }, + "2" => { "value" => "Irish" }, + "18" => { "value" => "Gypsy or Irish Traveller" }, + "3" => { "value" => "Any other White background" }, + }) + end end - it "has the correct check_answers_card_number" do - expect(question.check_answers_card_number).to eq(2) + context "with 2024/25 form" do + before do + allow(form).to receive(:start_year_after_2024?).and_return(true) + end + + it "has the correct answer_options" do + expect(question.answer_options).to eq({ + "1" => { "value" => "English, Welsh, Northern Irish, Scottish or British" }, + "2" => { "value" => "Irish" }, + "18" => { "value" => "Gypsy or Irish Traveller" }, + "20" => { "value" => "Roma" }, + "3" => { "value" => "Any other White background" }, + }) + end end end diff --git a/spec/services/bulk_upload/lettings/year2024/row_parser_spec.rb b/spec/services/bulk_upload/lettings/year2024/row_parser_spec.rb index 4501d25be..29adddf67 100644 --- a/spec/services/bulk_upload/lettings/year2024/row_parser_spec.rb +++ b/spec/services/bulk_upload/lettings/year2024/row_parser_spec.rb @@ -758,6 +758,17 @@ RSpec.describe BulkUpload::Lettings::Year2024::RowParser do expect(parser).not_to be_valid end end + + context "with a valid ethnic value" do + context "when field_44 is 20" do + let(:attributes) { valid_attributes.merge({ field_44: "20" }) } + + it "is correctly sets ethnic and ethnic group" do + expect(parser.log.ethnic).to eq(20) + expect(parser.log.ethnic_group).to eq(0) + end + end + end end describe "#validate_nulls" do diff --git a/spec/services/bulk_upload/sales/year2024/row_parser_spec.rb b/spec/services/bulk_upload/sales/year2024/row_parser_spec.rb index 35a7c38e2..2656ff1c0 100644 --- a/spec/services/bulk_upload/sales/year2024/row_parser_spec.rb +++ b/spec/services/bulk_upload/sales/year2024/row_parser_spec.rb @@ -1081,12 +1081,30 @@ RSpec.describe BulkUpload::Sales::Year2024::RowParser do end end + describe "#ethnic_group" do + context "when field_33 is 20" do + let(:attributes) { setup_section_params.merge({ field_33: "20" }) } + + it "is correctly set" do + expect(parser.log.ethnic_group).to be(0) + end + end + end + describe "#ethnic_group2" do let(:attributes) { setup_section_params.merge({ field_40: "1" }) } it "is correctly set" do expect(parser.log.ethnic_group2).to be(0) end + + context "when field_40 is 20" do + let(:attributes) { setup_section_params.merge({ field_40: "20" }) } + + it "is correctly set" do + expect(parser.log.ethnic_group2).to be(0) + end + end end describe "#ethnicbuy2" do