From 8fdb13e36400137480e2cd28bbed1b160c480cd6 Mon Sep 17 00:00:00 2001 From: Kat Date: Tue, 30 Jan 2024 11:30:32 +0000 Subject: [PATCH] Add nationality questions to lettings --- .../lettings/pages/lead_tenant_nationality.rb | 9 +- .../lettings/questions/nationality_all.rb | 218 ++++++++++++++++++ .../questions/nationality_all_group.rb | 21 ++ .../questions/nationality_all_group_spec.rb | 39 ++++ .../questions/nationality_all_spec.rb | 35 +++ 5 files changed, 321 insertions(+), 1 deletion(-) create mode 100644 app/models/form/lettings/questions/nationality_all.rb create mode 100644 app/models/form/lettings/questions/nationality_all_group.rb create mode 100644 spec/models/form/lettings/questions/nationality_all_group_spec.rb create mode 100644 spec/models/form/lettings/questions/nationality_all_spec.rb diff --git a/app/models/form/lettings/pages/lead_tenant_nationality.rb b/app/models/form/lettings/pages/lead_tenant_nationality.rb index 09a25286c..9fc78644f 100644 --- a/app/models/form/lettings/pages/lead_tenant_nationality.rb +++ b/app/models/form/lettings/pages/lead_tenant_nationality.rb @@ -6,6 +6,13 @@ class Form::Lettings::Pages::LeadTenantNationality < ::Form::Page end def questions - @questions ||= [Form::Lettings::Questions::Nationality.new(nil, nil, self)] + @questions ||= if form.start_year_after_2024? + [ + Form::Lettings::Questions::NationalityAllGroup.new(nil, nil, self), + Form::Lettings::Questions::NationalityAll.new(nil, nil, self), + ] + else + [Form::Lettings::Questions::Nationality.new(nil, nil, self)] + end end end diff --git a/app/models/form/lettings/questions/nationality_all.rb b/app/models/form/lettings/questions/nationality_all.rb new file mode 100644 index 000000000..192324f26 --- /dev/null +++ b/app/models/form/lettings/questions/nationality_all.rb @@ -0,0 +1,218 @@ +class Form::Lettings::Questions::NationalityAll < ::Form::Question + def initialize(id, hsh, page) + super + @id = "nationality_all" + @check_answer_label = "Lead tenant’s nationality" + @header = "Enter a nationality" + @type = "select" + @check_answers_card_number = 1 + @answer_options = ANSWER_OPTIONS + @question_number = 36 + end + + ANSWER_OPTIONS = { + "" => "Select an option", + "4" => "Afghanistan", + "8" => "Albania", + "12" => "Algeria", + "20" => "Andorra", + "24" => "Angola", + "28" => "Antigua and Barbuda", + "32" => "Argentina", + "51" => "Armenia", + "36" => "Australia", + "40" => "Austria", + "31" => "Azerbaijan", + "44" => "Bahamas", + "48" => "Bahrain", + "50" => "Bangladesh", + "52" => "Barbados", + "112" => "Belarus", + "56" => "Belgium", + "84" => "Belize", + "204" => "Benin", + "64" => "Bhutan", + "68" => "Bolivia", + "70" => "Bosnia and Herzegovina", + "72" => "Botswana", + "76" => "Brazil", + "96" => "Brunei", + "100" => "Bulgaria", + "854" => "Burkina Faso", + "108" => "Burundi", + "132" => "Cabo Verde", + "116" => "Cambodia", + "120" => "Cameroon", + "124" => "Canada", + "140" => "Central African Republic", + "148" => "Chad", + "152" => "Chile", + "156" => "China", + "170" => "Colombia", + "174" => "Comoros", + "178" => "Congo", + "188" => "Costa Rica", + "384" => "Côte d'Ivoire", + "191" => "Croatia", + "192" => "Cuba", + "196" => "Cyprus", + "203" => "Czechia", + "180" => "Democratic Republic of the Congo", + "208" => "Denmark", + "262" => "Djibouti", + "212" => "Dominica", + "214" => "Dominican Republic", + "218" => "Ecuador", + "818" => "Egypt", + "222" => "El Salvador", + "226" => "Equatorial Guinea", + "232" => "Eritrea", + "233" => "Estonia", + "748" => "Eswatini", + "231" => "Ethiopia", + "238" => "Falkland Islands", + "242" => "Fiji", + "246" => "Finland", + "250" => "France", + "266" => "Gabon", + "270" => "Gambia", + "268" => "Georgia", + "276" => "Germany", + "288" => "Ghana", + "292" => "Gibraltar", + "300" => "Greece", + "308" => "Grenada", + "320" => "Guatemala", + "831" => "Guernsey", + "324" => "Guinea", + "624" => "Guinea-Bissau", + "328" => "Guyana", + "332" => "Haiti", + "340" => "Honduras", + "344" => "Hong Kong", + "348" => "Hungary", + "352" => "Iceland", + "356" => "India", + "360" => "Indonesia", + "364" => "Iran", + "368" => "Iraq", + "372" => "Ireland", + "833" => "Isle of Man", + "376" => "Israel", + "380" => "Italy", + "388" => "Jamaica", + "392" => "Japan", + "832" => "Jersey", + "400" => "Jordan", + "398" => "Kazakhstan", + "404" => "Kenya", + "296" => "Kiribati", + "414" => "Kuwait", + "417" => "Kyrgyzstan", + "418" => "Laos", + "428" => "Latvia", + "422" => "Lebanon", + "426" => "Lesotho", + "430" => "Liberia", + "434" => "Libya", + "438" => "Liechtenstein", + "440" => "Lithuania", + "442" => "Luxembourg", + "450" => "Madagascar", + "454" => "Malawi", + "458" => "Malaysia", + "462" => "Maldives", + "466" => "Mali", + "470" => "Malta", + "584" => "Marshall Islands", + "478" => "Mauritania", + "480" => "Mauritius", + "484" => "Mexico", + "583" => "Micronesia (Federated States of)", + "498" => "Moldova", + "492" => "Monaco", + "496" => "Mongolia", + "499" => "Montenegro", + "504" => "Morocco", + "508" => "Mozambique", + "104" => "Myanmar", + "516" => "Namibia", + "520" => "Nauru", + "524" => "Nepal", + "528" => "Netherlands", + "554" => "New Zealand", + "558" => "Nicaragua", + "562" => "Niger", + "566" => "Nigeria", + "807" => "North Macedonia", + "408" => "North Korea", + "578" => "Norway", + "512" => "Oman", + "586" => "Pakistan", + "585" => "Palau", + "275" => "Palestine, State of", + "591" => "Panama", + "598" => "Papua New Guinea", + "600" => "Paraguay", + "604" => "Peru", + "608" => "Philippines", + "616" => "Poland", + "620" => "Portugal", + "634" => "Qatar", + "642" => "Romania", + "643" => "Russia", + "646" => "Rwanda", + "659" => "Saint Kitts and Nevis", + "662" => "Saint Lucia", + "670" => "Saint Vincent and the Grenadines", + "882" => "Samoa", + "674" => "San Marino", + "678" => "Sao Tome and Principe", + "682" => "Saudi Arabia", + "686" => "Senegal", + "688" => "Serbia", + "690" => "Seychelles", + "694" => "Sierra Leone", + "702" => "Singapore", + "703" => "Slovakia", + "705" => "Slovenia", + "90" => "Solomon Islands", + "706" => "Somalia", + "710" => "South Africa", + "410" => "South Korea", + "728" => "South Sudan", + "724" => "Spain", + "144" => "Sri Lanka", + "729" => "Sudan", + "740" => "Suriname", + "752" => "Sweden", + "756" => "Switzerland", + "760" => "Syria", + "158" => "Taiwan", + "762" => "Tajikistan", + "834" => "Tanzania", + "764" => "Thailand", + "626" => "Timor-Leste", + "768" => "Togo", + "776" => "Tonga", + "780" => "Trinidad and Tobago", + "788" => "Tunisia", + "792" => "Turkey", + "795" => "Turkmenistan", + "798" => "Tuvalu", + "800" => "Uganda", + "804" => "Ukraine", + "784" => "United Arab Emirates", + "826" => "United Kingdom", + "840" => "United States of America", + "858" => "Uruguay", + "860" => "Uzbekistan", + "548" => "Vanuatu", + "336" => "Vatican City", + "862" => "Venezuela", + "704" => "Vietnam", + "887" => "Yemen", + "894" => "Zambia", + "716" => "Zimbabwe", + }.freeze +end diff --git a/app/models/form/lettings/questions/nationality_all_group.rb b/app/models/form/lettings/questions/nationality_all_group.rb new file mode 100644 index 000000000..065a4e245 --- /dev/null +++ b/app/models/form/lettings/questions/nationality_all_group.rb @@ -0,0 +1,21 @@ +class Form::Lettings::Questions::NationalityAllGroup < ::Form::Question + def initialize(id, hsh, page) + super + @id = "nationality_all_group" + @check_answer_label = "Lead tenant’s nationality" + @header = "What is the nationality of the lead tenant?" + @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 + @question_number = 36 + @conditional_for = { "nationality_all" => [12] } + @hidden_in_check_answers = { "depends_on" => [{ "nationality_all_group" => 12 }] } + end + + ANSWER_OPTIONS = { + "826" => { "value" => "United Kingdom" }, + "12" => { "value" => "Other" }, + "13" => { "value" => "Tenant prefers not to say" }, + }.freeze +end diff --git a/spec/models/form/lettings/questions/nationality_all_group_spec.rb b/spec/models/form/lettings/questions/nationality_all_group_spec.rb new file mode 100644 index 000000000..b1350b786 --- /dev/null +++ b/spec/models/form/lettings/questions/nationality_all_group_spec.rb @@ -0,0 +1,39 @@ +require "rails_helper" + +RSpec.describe Form::Lettings::Questions::NationalityAllGroup, 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 eq(page) + end + + it "has the correct id" do + expect(question.id).to eq("nationality_all_group") + end + + it "has the correct header" do + expect(question.header).to eq("What is the nationality of the lead tenant?") + end + + it "has the correct check_answer_label" do + expect(question.check_answer_label).to eq("Lead tenant’s nationality") + end + + it "has the correct type" do + expect(question.type).to eq("radio") + 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 + + it "has the correct answer_options" do + expect(question.answer_options).to eq({ + "826" => { "value" => "United Kingdom" }, + "12" => { "value" => "Other" }, + "13" => { "value" => "Tenant prefers not to say" }, + }) + end +end diff --git a/spec/models/form/lettings/questions/nationality_all_spec.rb b/spec/models/form/lettings/questions/nationality_all_spec.rb new file mode 100644 index 000000000..07c993766 --- /dev/null +++ b/spec/models/form/lettings/questions/nationality_all_spec.rb @@ -0,0 +1,35 @@ +require "rails_helper" + +RSpec.describe Form::Lettings::Questions::NationalityAll, 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 eq(page) + end + + it "has the correct id" do + expect(question.id).to eq("nationality_all") + end + + it "has the correct header" do + expect(question.header).to eq("Enter a nationality") + end + + it "has the correct check_answer_label" do + expect(question.check_answer_label).to eq("Lead tenant’s nationality") + end + + it "has the correct type" do + expect(question.type).to eq("select") + 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.count).to eq(203) + end +end