From 04a6986827700e951a525acd01c9238527a1e693 Mon Sep 17 00:00:00 2001 From: kosiakkatrina <54268893+kosiakkatrina@users.noreply.github.com> Date: Thu, 18 Nov 2021 11:26:49 +0000 Subject: [PATCH] Change armed forces question (#101) --- app/admin/case_logs.rb | 2 +- app/constants/db_enums.rb | 10 ++++++++ app/models/bulk_upload.rb | 2 +- app/models/case_log.rb | 1 + app/validations/household_validations.rb | 8 +++--- config/forms/2021_2022.json | 31 ++++++++--------------- db/schema.rb | 5 ++-- docs/api/DLUHC-CORE-Data.v1.json | 12 +++------ spec/features/case_log_spec.rb | 6 ++--- spec/fixtures/complete_case_log.json | 3 +-- spec/fixtures/forms/test_form.json | 20 +++++++++------ spec/helpers/check_answers_helper_spec.rb | 10 ++++---- spec/models/case_log_spec.rb | 10 ++++---- 13 files changed, 58 insertions(+), 62 deletions(-) diff --git a/app/admin/case_logs.rb b/app/admin/case_logs.rb index 2a15fbb2a..d34a22623 100644 --- a/app/admin/case_logs.rb +++ b/app/admin/case_logs.rb @@ -2,7 +2,7 @@ ActiveAdmin.register CaseLog do # See permitted parameters documentation: # https://github.com/activeadmin/activeadmin/blob/master/docs/2-resource-customization.md#setting-up-strong-parameters permit_params do - permitted = %i[status tenant_code age1 sex1 tenant_ethnic_group tenant_nationality previous_housing_situation armed_forces ecstat1 other_hhmemb relat2 age2 sex2 ecstat2 relat3 age3 sex3 ecstat3 relat4 age4 sex4 ecstat4 relat5 age5 sex5 ecstat5 relat6 age6 sex6 ecstat6 relat7 age7 person_7_gender ecstat7 relat8 age8 sex8 ecstat8 homelessness reason benefit_cap_spare_room_subsidy armed_forces_active armed_forces_injured armed_forces_partner medical_conditions pregnancy accessibility_requirements condition_effects tenancy_code tenancy_start_date starter_tenancy fixed_term_tenancy tenancy_type letting_type letting_provider la previous_postcode property_relet property_vacancy_reason property_reference property_unit_type property_building_type property_number_of_bedrooms property_void_date majorrepairs mrcdate property_number_of_times_relet property_wheelchair_accessible net_income net_income_frequency net_income_uc_proportion hb rent_frequency basic_rent service_charge personal_service_charge support_charge total_charge tshortfall time_lived_in_la time_on_la_waiting_list prevloc property_postcode reasonable_preference reasonable_preference_reason cbl_letting chr_letting cap_letting hbrentshortfall other_reason accessibility_requirements_fully_wheelchair_accessible_housing accessibility_requirements_wheelchair_access_to_essential_rooms accessibility_requirements_level_access_housing accessibility_requirements_other_disability_requirements accessibility_requirements_no_disability_requirements accessibility_requirements_do_not_know accessibility_requirements_prefer_not_to_say condition_effects_vision condition_effects_hearing condition_effects_mobility condition_effects_dexterity condition_effects_stamina condition_effects_learning condition_effects_memory condition_effects_mental_health condition_effects_social_or_behavioral condition_effects_other condition_effects_prefer_not_to_say reasonable_preference_reason_homeless reasonable_preference_reason_unsatisfactory_housing reasonable_preference_reason_medical_grounds reasonable_preference_reason_avoid_hardship reasonable_preference_reason_do_not_know other_tenancy_type override_net_income_validation net_income_known] + permitted = %i[status tenant_code age1 sex1 tenant_ethnic_group tenant_nationality previous_housing_situation armedforces ecstat1 other_hhmemb relat2 age2 sex2 ecstat2 relat3 age3 sex3 ecstat3 relat4 age4 sex4 ecstat4 relat5 age5 sex5 ecstat5 relat6 age6 sex6 ecstat6 relat7 age7 person_7_gender ecstat7 relat8 age8 sex8 ecstat8 homelessness reason benefit_cap_spare_room_subsidy armed_forces_active armed_forces_injured medical_conditions pregnancy accessibility_requirements condition_effects tenancy_code tenancy_start_date starter_tenancy fixed_term_tenancy tenancy_type letting_type letting_provider la previous_postcode property_relet property_vacancy_reason property_reference property_unit_type property_building_type property_number_of_bedrooms property_void_date majorrepairs mrcdate property_number_of_times_relet property_wheelchair_accessible net_income net_income_frequency net_income_uc_proportion hb rent_frequency basic_rent service_charge personal_service_charge support_charge total_charge tshortfall time_lived_in_la time_on_la_waiting_list prevloc property_postcode reasonable_preference reasonable_preference_reason cbl_letting chr_letting cap_letting hbrentshortfall other_reason accessibility_requirements_fully_wheelchair_accessible_housing accessibility_requirements_wheelchair_access_to_essential_rooms accessibility_requirements_level_access_housing accessibility_requirements_other_disability_requirements accessibility_requirements_no_disability_requirements accessibility_requirements_do_not_know accessibility_requirements_prefer_not_to_say condition_effects_vision condition_effects_hearing condition_effects_mobility condition_effects_dexterity condition_effects_stamina condition_effects_learning condition_effects_memory condition_effects_mental_health condition_effects_social_or_behavioral condition_effects_other condition_effects_prefer_not_to_say reasonable_preference_reason_homeless reasonable_preference_reason_unsatisfactory_housing reasonable_preference_reason_medical_grounds reasonable_preference_reason_avoid_hardship reasonable_preference_reason_do_not_know other_tenancy_type override_net_income_validation net_income_known] permitted end diff --git a/app/constants/db_enums.rb b/app/constants/db_enums.rb index d28393105..7a1c01b19 100644 --- a/app/constants/db_enums.rb +++ b/app/constants/db_enums.rb @@ -699,4 +699,14 @@ module DbEnums "East Renfrewshire" => "S12000011", } end + + def self.armed_forces + { + "A current or former regular in the UK Armed Forces (exc. National Service)" => 1, + "No" => 2, + "Tenant prefers not to say" => 3, + "A current or former reserve in the UK Armed Forces (exc. National Service)" => 4, + "A spouse / civil partner of a UK Armed Forces member who has separated or been bereaved within the last 2 years" => 5, + } + end end diff --git a/app/models/bulk_upload.rb b/app/models/bulk_upload.rb index dcab1753f..720cd5a36 100644 --- a/app/models/bulk_upload.rb +++ b/app/models/bulk_upload.rb @@ -96,7 +96,7 @@ class BulkUpload ecstat8: row[42], ethnic: row[43], national: row[44], - armed_forces: row[45], + armedforces: row[45], reservist: row[46], preg_occ: row[47], hb: row[48], diff --git a/app/models/case_log.rb b/app/models/case_log.rb index 2134a766a..32bc40739 100644 --- a/app/models/case_log.rb +++ b/app/models/case_log.rb @@ -109,6 +109,7 @@ class CaseLog < ApplicationRecord enum hb: DbEnums.housing_benefit, _suffix: true enum hbrentshortfall: DbEnums.polar_with_unknown, _suffix: true enum property_relet: DbEnums.polar, _suffix: true + enum armedforces: DbEnums.armed_forces, _suffix: true AUTOGENERATED_FIELDS = %w[id status created_at updated_at discarded_at].freeze diff --git a/app/validations/household_validations.rb b/app/validations/household_validations.rb index bb04599c7..5671b1b75 100644 --- a/app/validations/household_validations.rb +++ b/app/validations/household_validations.rb @@ -26,21 +26,21 @@ module HouseholdValidations end def validate_armed_forces_injured(record) - if (record.armed_forces == "Yes - a regular" || record.armed_forces == "Yes - a reserve") && record.reservist.blank? + if (record.armedforces == "A current or former regular in the UK Armed Forces (exc. National Service)" || record.armedforces == "A current or former reserve in the UK Armed Forces (exc. National Service)") && record.reservist.blank? record.errors.add :reservist, "You must answer the armed forces injury question if the tenant has served in the armed forces" end - if (record.armed_forces == "No" || record.armed_forces == "Prefer not to say") && record.reservist.present? + if (record.armedforces == "No" || record.armedforces == "Prefer not to say") && record.reservist.present? record.errors.add :reservist, "You must not answer the armed forces injury question if the tenant has not served in the armed forces or prefer not to say was chosen" end end def validate_armed_forces_active_response(record) - if record.armed_forces == "Yes - a regular" && record.leftreg.blank? + if record.armedforces == "A current or former regular in the UK Armed Forces (exc. National Service)" && record.leftreg.blank? record.errors.add :leftreg, "You must answer the armed forces active question if the tenant has served as a regular in the armed forces" end - if record.armed_forces != "Yes - a regular" && record.leftreg.present? + if record.armedforces != "A current or former regular in the UK Armed Forces (exc. National Service)" && record.leftreg.present? record.errors.add :leftreg, "You must not answer the armed forces active question if the tenant has not served as a regular in the armed forces" end end diff --git a/config/forms/2021_2022.json b/config/forms/2021_2022.json index a5fb65cce..45a31ddc1 100644 --- a/config/forms/2021_2022.json +++ b/config/forms/2021_2022.json @@ -870,20 +870,21 @@ "header": "Experience of the UK Armed Forces", "description": "", "questions": { - "armed_forces": { - "header": "Has the tenant ever served in the UK armed forces?", - "hint_text": "", + "armedforces": { + "header": "Is anyone in the household...", + "hint_text": "This excludes national service", "type": "radio", "check_answer_label": "Armed Forces", "answer_options": { - "0": "Yes - a regular", - "1": "Yes - a reserve", - "2": "No", - "3": "Prefer not to say" + "0":"A current or former regular in the UK Armed Forces (exc. National Service)", + "1":"A current or former reserve in the UK Armed Forces (exc. National Service)", + "2": "A spouse / civil partner of a UK Armed Forces member who has separated or been bereaved within the last 2 years", + "3": "No", + "4": "Tenant prefers not to say" }, "conditional_for": { - "leftreg": ["Yes - a regular", "Yes - a reserve"], - "reservist": ["Yes - a regular", "Yes - a reserve"] + "leftreg": ["A current or former regular in the UK Armed Forces (exc. National Service)"], + "reservist": ["A current or former regular in the UK Armed Forces (exc. National Service)"] } }, "leftreg": { @@ -908,18 +909,6 @@ "1": "No", "2": "Prefer not to say" } - }, - "armed_forces_partner": { - "header": "Was the tenant the spouse or civil partner of someone who served in the UK armed forces?", - "hint_text": "", - "type": "radio", - "check_answer_label": "Was the tenant the spouse or civil partner of someone who served in the UK armed forces?", - "answer_options": { - "0": "Yes - was the spouse or civil partner of a UK Armed Forces member and have separated within the last 2 years", - "1": "Yes - was the spouse or civil partner of a UK Armed Forces member who died within the last 2 years", - "2": "No", - "3": "Prefer not to say" - } } } }, diff --git a/db/schema.rb b/db/schema.rb index b011b0ce8..72f15b7b2 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.define(version: 2021_11_16_102527) do +ActiveRecord::Schema.define(version: 2021_11_18_090831) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -25,7 +25,6 @@ ActiveRecord::Schema.define(version: 2021_11_16_102527) do t.integer "ethnic" t.integer "national" t.integer "prevten" - t.string "armed_forces" t.integer "ecstat1" t.integer "hhmemb" t.string "relat2" @@ -60,7 +59,6 @@ ActiveRecord::Schema.define(version: 2021_11_16_102527) do t.integer "underoccupation_benefitcap" t.integer "leftreg" t.integer "reservist" - t.string "armed_forces_partner" t.integer "illness" t.integer "preg_occ" t.string "accessibility_requirements" @@ -154,6 +152,7 @@ ActiveRecord::Schema.define(version: 2021_11_16_102527) do t.integer "incref" t.datetime "sale_completion_date" t.datetime "startdate" + t.integer "armedforces" t.index ["discarded_at"], name: "index_case_logs_on_discarded_at" end diff --git a/docs/api/DLUHC-CORE-Data.v1.json b/docs/api/DLUHC-CORE-Data.v1.json index 5723c9311..53837c5df 100644 --- a/docs/api/DLUHC-CORE-Data.v1.json +++ b/docs/api/DLUHC-CORE-Data.v1.json @@ -261,7 +261,7 @@ "ethnic": "White: English/Scottish/Welsh/Northern Irish/British", "national": "UK national resident in UK", "prevten": "Private sector tenancy", - "armed_forces": "Yes - a regular", + "armedforces": "A current or former regular in the UK Armed Forces (exc. National Service)", "ecstat1": "Full-time - 30 hours or more", "other_hhmemb": 7, "relat2": "Partner", @@ -297,7 +297,6 @@ "underoccupation_benefitcap": "No", "leftreg": "No", "reservist": "No", - "armed_forces_partner": "No", "illness": "Yes", "preg_occ": "No", "accessibility_requirements": "No", @@ -438,7 +437,7 @@ "type": "string", "minLength": 1 }, - "armed_forces": { + "armedforces": { "type": "string", "minLength": 1 }, @@ -787,10 +786,6 @@ "type": "string", "minLength": 1 }, - "armed_forces_partner": { - "type": "string", - "minLength": 1 - }, "illness": { "type": "string", "minLength": 1 @@ -1050,7 +1045,7 @@ "ethnic", "national", "prevten", - "armed_forces", + "armedforces", "ecstat1", "other_hhmemb", "relat2", @@ -1086,7 +1081,6 @@ "underoccupation_benefitcap", "leftreg", "reservist", - "armed_forces_partner", "illness", "preg_occ", "accessibility_requirements", diff --git a/spec/features/case_log_spec.rb b/spec/features/case_log_spec.rb index f8e877e36..9107b38c2 100644 --- a/spec/features/case_log_spec.rb +++ b/spec/features/case_log_spec.rb @@ -375,13 +375,13 @@ RSpec.describe "Test Features" do it "shows conditional questions if the required answer is selected and hides it again when a different answer option is selected", js: true do visit("/case_logs/#{id}/armed_forces") # Something about our styling makes the selenium webdriver think the actual radio buttons are not visible so we allow label click here - choose("case-log-armed-forces-yes-a-regular-field", allow_label_click: true) + choose("case-log-armedforces-a-current-or-former-regular-in-the-uk-armed-forces-exc-national-service-field", allow_label_click: true) expect(page).to have_selector("#reservist_div") choose("case-log-reservist-no-field", allow_label_click: true) expect(page).to have_checked_field("case-log-reservist-no-field", visible: false) - choose("case-log-armed-forces-no-field", allow_label_click: true) + choose("case-log-armedforces-no-field", allow_label_click: true) expect(page).not_to have_selector("#reservist_div") - choose("case-log-armed-forces-yes-a-regular-field", allow_label_click: true) + choose("case-log-armedforces-a-current-or-former-regular-in-the-uk-armed-forces-exc-national-service-field", allow_label_click: true) expect(page).to have_unchecked_field("case-log-reservist-no-field", visible: false) end end diff --git a/spec/fixtures/complete_case_log.json b/spec/fixtures/complete_case_log.json index bb16bc42e..fe8393178 100644 --- a/spec/fixtures/complete_case_log.json +++ b/spec/fixtures/complete_case_log.json @@ -6,7 +6,7 @@ "ethnic": "White: English/Scottish/Welsh/Northern Irish/British", "national": "UK national resident in UK", "prevten": "Private sector tenancy", - "armed_forces": "Yes - a regular", + "armedforces": "A current or former regular in the UK Armed Forces (exc. National Service)", "ecstat1": "Full-time - 30 hours or more", "other_hhmemb": 7, "hhmemb": 8, @@ -43,7 +43,6 @@ "underoccupation_benefitcap": "No", "leftreg": "No - they left up to 5 years ago", "reservist": "No", - "armed_forces_partner": "No", "illness": "Yes", "preg_occ": "No", "accessibility_requirements": "No", diff --git a/spec/fixtures/forms/test_form.json b/spec/fixtures/forms/test_form.json index d60befb1c..4b2fd6c65 100644 --- a/spec/fixtures/forms/test_form.json +++ b/spec/fixtures/forms/test_form.json @@ -107,23 +107,26 @@ "armed_forces": { "header": "Experience of the UK Armed Forces", "questions": { - "armed_forces": { - "header": "Has the tenant ever served in the UK armed forces?", + "armedforces": { + "header": "Is anyone in the household...", + "hint_text": "This excludes national service", "type": "radio", "check_answer_label": "Armed Forces", "answer_options": { - "0": "Yes - a regular", - "1": "Yes - a reserve", - "2": "No", - "3": "Prefer not to say" + "0":"A current or former regular in the UK Armed Forces (exc. National Service)", + "1":"A current or former reserve in the UK Armed Forces (exc. National Service)", + "2": "A spouse / civil partner of a UK Armed Forces member who has separated or been bereaved within the last 2 years", + "3": "No", + "4": "Tenant prefers not to say" }, "conditional_for": { - "leftreg": ["Yes - a regular", "Yes - a reserve"], - "reservist": ["Yes - a regular", "Yes - a reserve"] + "leftreg": ["A current or former regular in the UK Armed Forces (exc. National Service)"], + "reservist": ["A current or former regular in the UK Armed Forces (exc. National Service)"] } }, "leftreg": { "header": "Are they still serving?", + "hint_text": "", "type": "radio", "check_answer_label": "When did they leave the Armed Forces?", "answer_options": { @@ -135,6 +138,7 @@ }, "reservist": { "header": "Were they seriously injured or ill as a result of their service?", + "hint_text": "", "type": "radio", "check_answer_label": "Has anyone in the household been seriously injured or ill as a result of their service in the armed forces?", "answer_options": { diff --git a/spec/helpers/check_answers_helper_spec.rb b/spec/helpers/check_answers_helper_spec.rb index 5b0612d21..5b3ddf16f 100644 --- a/spec/helpers/check_answers_helper_spec.rb +++ b/spec/helpers/check_answers_helper_spec.rb @@ -11,7 +11,7 @@ RSpec.describe CheckAnswersHelper do ) end let(:case_log_with_met_radio_condition) do - FactoryBot.create(:case_log, armed_forces: "Yes - a regular", + FactoryBot.create(:case_log, armedforces: "A current or former regular in the UK Armed Forces (exc. National Service)", reservist: "No", leftreg: "Yes") end @@ -47,7 +47,7 @@ RSpec.describe CheckAnswersHelper do end it "ignores questions with unmet radio conditions" do - case_log["armed_forces"] = "No" + case_log["armedforces"] = "No" expect(total_answered_questions(subsection_with_radio_conditionals, case_log, form)).to equal(1) end @@ -134,14 +134,14 @@ RSpec.describe CheckAnswersHelper do context "conditional questions on the same page" do it "it filters out conditional questions that were not displayed" do result = total_questions(conditional_page_subsection, case_log, form) - expected_keys = %w[armed_forces illness accessibility_requirements condition_effects] + expected_keys = %w[armedforces illness accessibility_requirements condition_effects] expect(result.keys).to eq(expected_keys) end it "it includes conditional questions that were displayed" do - case_log["armed_forces"] = "Yes - a regular" + case_log["armedforces"] = "A current or former regular in the UK Armed Forces (exc. National Service)" result = total_questions(conditional_page_subsection, case_log, form) - expected_keys = %w[armed_forces leftreg reservist illness accessibility_requirements condition_effects] + expected_keys = %w[armedforces leftreg reservist illness accessibility_requirements condition_effects] expect(result.keys).to eq(expected_keys) end end diff --git a/spec/models/case_log_spec.rb b/spec/models/case_log_spec.rb index fad6ca4b9..19909ccc3 100644 --- a/spec/models/case_log_spec.rb +++ b/spec/models/case_log_spec.rb @@ -84,14 +84,14 @@ RSpec.describe Form, type: :model do context "armed forces injured validation" do it "must be answered if tenant was a regular or reserve in armed forces" do expect { - CaseLog.create!(armed_forces: "Yes - a regular", + CaseLog.create!(armedforces: "A current or former regular in the UK Armed Forces (exc. National Service)", reservist: nil) }.to raise_error(ActiveRecord::RecordInvalid) end it "must be answered if tenant was not a regular or reserve in armed forces" do expect { - CaseLog.create!(armed_forces: "No", + CaseLog.create!(armedforces: "No", reservist: "Yes") }.to raise_error(ActiveRecord::RecordInvalid) end @@ -223,14 +223,14 @@ RSpec.describe Form, type: :model do context "armed forces active validation" do it "must be answered if ever served in the forces as a regular" do expect { - CaseLog.create!(armed_forces: "Yes - a regular", + CaseLog.create!(armedforces: "A current or former regular in the UK Armed Forces (exc. National Service)", leftreg: nil) }.to raise_error(ActiveRecord::RecordInvalid) end it "must not be answered if not ever served as a regular" do expect { - CaseLog.create!(armed_forces: "No", + CaseLog.create!(armedforces: "No", leftreg: "Yes") }.to raise_error(ActiveRecord::RecordInvalid) end @@ -238,7 +238,7 @@ RSpec.describe Form, type: :model do # Crossover over tests here as injured must be answered as well for no error it "must be answered if ever served in the forces as a regular" do expect do - CaseLog.create!(armed_forces: "Yes - a regular", + CaseLog.create!(armedforces: "A current or former regular in the UK Armed Forces (exc. National Service)", leftreg: "Yes", reservist: "Yes") end