From 21b1691831630a85bd9454fae4eb1b93f9b2c712 Mon Sep 17 00:00:00 2001 From: Katherine Langford Date: Tue, 13 Jan 2026 11:33:27 +0000 Subject: [PATCH] CLDC-4148: New options for "Reason" [for old tenant leaving] question (#3139) * CLDC-4148: Add modified reasons options for 2026/2027. * CLDC-4148: Code refactor and removes 2023 question data. * CLDC-4148: Lint changes * CLDC-4148: Remove whitespace and old question number --- app/models/form/lettings/questions/reason.rb | 183 +++++++++--------- .../form/lettings/questions/reason_spec.rb | 56 +++--- 2 files changed, 123 insertions(+), 116 deletions(-) diff --git a/app/models/form/lettings/questions/reason.rb b/app/models/form/lettings/questions/reason.rb index 43c9f8d15..7f0cd86a0 100644 --- a/app/models/form/lettings/questions/reason.rb +++ b/app/models/form/lettings/questions/reason.rb @@ -14,120 +14,123 @@ class Form::Lettings::Questions::Reason < ::Form::Question end def answer_options - if form.start_year_2025_or_later? - return { - "50" => { "value" => "End of social or private sector tenancy - no fault" }, - "51" => { "value" => "End of social or private sector tenancy - evicted due to anti-social behaviour (ASB)" }, - "52" => { "value" => "End of social or private sector tenancy - evicted due to rent arrears" }, - "53" => { "value" => "End of social or private sector tenancy - evicted for any other reason" }, - "1" => { "value" => "Permanently decanted from another property owned by this landlord" }, - "2" => { "value" => "Left home country as a refugee" }, - "45" => { "value" => "Discharged from prison" }, - "46" => { "value" => "Discharged from long-stay hospital or similar institution" }, - "4" => { "value" => "Loss of tied accommodation" }, - "55" => { "value" => "Leaving foster care or children's home" }, - "9" => { "value" => "Asked to leave by family or friends" }, - "8" => { "value" => "Relationship breakdown (non-violent) with partner" }, - "44" => { "value" => "Death of household member in last settled accommodation" }, - "16" => { "value" => "To move nearer to family, friends or school" }, - "17" => { "value" => "To move nearer to work" }, - "48" => { "value" => "Domestic abuse - previously joint tenancy with partner" }, - "49" => { "value" => "Domestic abuse - other" }, - "10" => { "value" => "Racial harassment" }, - "31" => { "value" => "Hate crime" }, - "11" => { "value" => "Other problems with neighbours" }, - "34" => { "value" => "Repossession" }, - "54" => { "value" => "Could no longer afford rent or mortgage" }, - "12" => { "value" => "Property unsuitable because of overcrowding" }, - "13" => { "value" => "Property unsuitable because of ill health or disability" }, - "14" => { "value" => "Property unsuitable because of poor condition" }, - "29" => { "value" => "Under occupation (offered incentive to downsize)" }, - "30" => { "value" => "Under occupation (no incentive)" }, - "18" => { "value" => "To move to accommodation with support" }, - "19" => { "value" => "To move to independent accommodation" }, - "47" => { "value" => "Tenant prefers not to say" }, - "20" => { "value" => "Other" }, - "divider" => { "value" => true }, - "28" => { "value" => "Don’t know" }, - }.freeze - end - - if form.start_year_2024_or_later? - return { - "50" => { "value" => "End of social or private sector tenancy - no fault" }, - "51" => { "value" => "End of social or private sector tenancy - evicted due to anti-social behaviour (ASB)" }, - "52" => { "value" => "End of social or private sector tenancy - evicted due to rent arrears" }, - "53" => { "value" => "End of social or private sector tenancy - evicted for any other reason" }, - "1" => { "value" => "Permanently decanted from another property owned by this landlord" }, - "2" => { "value" => "Left home country as a refugee" }, - "45" => { "value" => "Discharged from prison" }, - "46" => { "value" => "Discharged from long-stay hospital or similar institution" }, - "4" => { "value" => "Loss of tied accommodation" }, - "9" => { "value" => "Asked to leave by family or friends" }, - "8" => { "value" => "Relationship breakdown (non-violent) with partner" }, - "44" => { "value" => "Death of household member in last settled accommodation" }, - "16" => { "value" => "To move nearer to family, friends or school" }, - "17" => { "value" => "To move nearer to work" }, - "48" => { "value" => "Domestic abuse - previously joint tenancy with partner" }, - "49" => { "value" => "Domestic abuse - other" }, - "10" => { "value" => "Racial harassment" }, - "31" => { "value" => "Hate crime" }, - "11" => { "value" => "Other problems with neighbours" }, - "34" => { "value" => "Repossession" }, - "54" => { "value" => "Could no longer afford rent or mortgage" }, - "12" => { "value" => "Property unsuitable because of overcrowding" }, - "13" => { "value" => "Property unsuitable because of ill health or disability" }, - "14" => { "value" => "Property unsuitable because of poor condition" }, - "29" => { "value" => "Under occupation (offered incentive to downsize)" }, - "30" => { "value" => "Under occupation (no incentive)" }, - "18" => { "value" => "To move to accommodation with support" }, - "19" => { "value" => "To move to independent accommodation" }, - "20" => { "value" => "Other" }, - "47" => { "value" => "Tenant prefers not to say" }, - "divider" => { "value" => true }, - "28" => { "value" => "Don’t know" }, - }.freeze + if form.start_year_2026_or_later? + QUESTIONS_FROM_YEAR[2026] + elsif form.start_year_2025_or_later? + QUESTIONS_FROM_YEAR[2025] + else + QUESTIONS_FROM_YEAR[2024] end + end - { - "40" => { "value" => "End of assured shorthold tenancy (no fault)" }, - "41" => { "value" => "End of assured shorthold tenancy (eviction or tenant at fault)" }, - "42" => { "value" => "End of fixed term tenancy (no fault)" }, - "43" => { "value" => "End of fixed term tenancy (eviction or tenant at fault)" }, + QUESTIONS_FROM_YEAR = { + 2026 => { + "50" => { "value" => "End of social or private sector tenancy - no fault" }, + "51" => { "value" => "End of social or private sector tenancy - evicted due to anti-social behaviour (ASB)" }, + "52" => { "value" => "End of social or private sector tenancy - evicted due to rent arrears" }, + "53" => { "value" => "End of social or private sector tenancy - evicted for any other reason" }, "1" => { "value" => "Permanently decanted from another property owned by this landlord" }, - "46" => { "value" => "Discharged from long-stay hospital or similar institution" }, - "45" => { "value" => "Discharged from prison" }, "2" => { "value" => "Left home country as a refugee" }, + "45" => { "value" => "Discharged from prison" }, + "46" => { "value" => "Discharged from long-stay hospital or similar institution" }, "4" => { "value" => "Loss of tied accommodation" }, + "55" => { "value" => "Leaving foster care or children's home" }, "9" => { "value" => "Asked to leave by family or friends" }, - "44" => { "value" => "Death of household member in last settled accommodation" }, "8" => { "value" => "Relationship breakdown (non-violent) with partner" }, + "44" => { "value" => "Death of household member in last settled accommodation" }, "16" => { "value" => "To move nearer to family, friends or school" }, "17" => { "value" => "To move nearer to work" }, "48" => { "value" => "Domestic abuse - previously joint tenancy with partner" }, "49" => { "value" => "Domestic abuse - other" }, - "31" => { "value" => "Hate crime" }, + "56" => { "value" => "Non-domestic violence (e.g. gang violence)" }, + "57" => { "value" => "Cuckooing (property being used by others for illegal activity)" }, "10" => { "value" => "Racial harassment" }, + "31" => { "value" => "Hate crime" }, "11" => { "value" => "Other problems with neighbours" }, - "35" => { "value" => "Couldn’t afford fees attached to renewing the tenancy" }, - "36" => { "value" => "Couldn’t afford increase in rent" }, - "38" => { "value" => "Couldn’t afford rent or mortgage (employment)" }, - "37" => { "value" => "Couldn’t afford rent or mortgage (welfare reforms)" }, - "39" => { "value" => "Couldn’t afford rent or mortgage (other)" }, "34" => { "value" => "Repossession" }, + "54" => { "value" => "Could no longer afford rent or mortgage" }, "12" => { "value" => "Property unsuitable because of overcrowding" }, "13" => { "value" => "Property unsuitable because of ill health or disability" }, "14" => { "value" => "Property unsuitable because of poor condition" }, + "29" => { "value" => "Under occupation (offered incentive to downsize)" }, + "30" => { "value" => "Under occupation (no incentive)" }, "18" => { "value" => "To move to accommodation with support" }, "19" => { "value" => "To move to independent accommodation" }, + "47" => { "value" => "Tenant prefers not to say" }, + "20" => { "value" => "Other" }, + "divider" => { "value" => true }, + "28" => { "value" => "Don’t know" }, + }.freeze, + 2025 => { + "50" => { "value" => "End of social or private sector tenancy - no fault" }, + "51" => { "value" => "End of social or private sector tenancy - evicted due to anti-social behaviour (ASB)" }, + "52" => { "value" => "End of social or private sector tenancy - evicted due to rent arrears" }, + "53" => { "value" => "End of social or private sector tenancy - evicted for any other reason" }, + "1" => { "value" => "Permanently decanted from another property owned by this landlord" }, + "2" => { "value" => "Left home country as a refugee" }, + "45" => { "value" => "Discharged from prison" }, + "46" => { "value" => "Discharged from long-stay hospital or similar institution" }, + "4" => { "value" => "Loss of tied accommodation" }, + "55" => { "value" => "Leaving foster care or children's home" }, + "9" => { "value" => "Asked to leave by family or friends" }, + "8" => { "value" => "Relationship breakdown (non-violent) with partner" }, + "44" => { "value" => "Death of household member in last settled accommodation" }, + "16" => { "value" => "To move nearer to family, friends or school" }, + "17" => { "value" => "To move nearer to work" }, + "48" => { "value" => "Domestic abuse - previously joint tenancy with partner" }, + "49" => { "value" => "Domestic abuse - other" }, + "10" => { "value" => "Racial harassment" }, + "31" => { "value" => "Hate crime" }, + "11" => { "value" => "Other problems with neighbours" }, + "34" => { "value" => "Repossession" }, + "54" => { "value" => "Could no longer afford rent or mortgage" }, + "12" => { "value" => "Property unsuitable because of overcrowding" }, + "13" => { "value" => "Property unsuitable because of ill health or disability" }, + "14" => { "value" => "Property unsuitable because of poor condition" }, + "29" => { "value" => "Under occupation (offered incentive to downsize)" }, "30" => { "value" => "Under occupation (no incentive)" }, + "18" => { "value" => "To move to accommodation with support" }, + "19" => { "value" => "To move to independent accommodation" }, + "47" => { "value" => "Tenant prefers not to say" }, + "20" => { "value" => "Other" }, + "divider" => { "value" => true }, + "28" => { "value" => "Don’t know" }, + }.freeze, + 2024 => { + "50" => { "value" => "End of social or private sector tenancy - no fault" }, + "51" => { "value" => "End of social or private sector tenancy - evicted due to anti-social behaviour (ASB)" }, + "52" => { "value" => "End of social or private sector tenancy - evicted due to rent arrears" }, + "53" => { "value" => "End of social or private sector tenancy - evicted for any other reason" }, + "1" => { "value" => "Permanently decanted from another property owned by this landlord" }, + "2" => { "value" => "Left home country as a refugee" }, + "45" => { "value" => "Discharged from prison" }, + "46" => { "value" => "Discharged from long-stay hospital or similar institution" }, + "4" => { "value" => "Loss of tied accommodation" }, + "9" => { "value" => "Asked to leave by family or friends" }, + "8" => { "value" => "Relationship breakdown (non-violent) with partner" }, + "44" => { "value" => "Death of household member in last settled accommodation" }, + "16" => { "value" => "To move nearer to family, friends or school" }, + "17" => { "value" => "To move nearer to work" }, + "48" => { "value" => "Domestic abuse - previously joint tenancy with partner" }, + "49" => { "value" => "Domestic abuse - other" }, + "10" => { "value" => "Racial harassment" }, + "31" => { "value" => "Hate crime" }, + "11" => { "value" => "Other problems with neighbours" }, + "34" => { "value" => "Repossession" }, + "54" => { "value" => "Could no longer afford rent or mortgage" }, + "12" => { "value" => "Property unsuitable because of overcrowding" }, + "13" => { "value" => "Property unsuitable because of ill health or disability" }, + "14" => { "value" => "Property unsuitable because of poor condition" }, "29" => { "value" => "Under occupation (offered incentive to downsize)" }, + "30" => { "value" => "Under occupation (no incentive)" }, + "18" => { "value" => "To move to accommodation with support" }, + "19" => { "value" => "To move to independent accommodation" }, "20" => { "value" => "Other" }, "47" => { "value" => "Tenant prefers not to say" }, "divider" => { "value" => true }, "28" => { "value" => "Don’t know" }, - }.freeze - end + }.freeze, + }.freeze - QUESTION_NUMBER_FROM_YEAR = { 2023 => 77, 2024 => 76 }.freeze + QUESTION_NUMBER_FROM_YEAR = { 2024 => 76 }.freeze end diff --git a/spec/models/form/lettings/questions/reason_spec.rb b/spec/models/form/lettings/questions/reason_spec.rb index 6256725ba..799348d42 100644 --- a/spec/models/form/lettings/questions/reason_spec.rb +++ b/spec/models/form/lettings/questions/reason_spec.rb @@ -12,6 +12,7 @@ RSpec.describe Form::Lettings::Questions::Reason, type: :model do before do allow(form).to receive(:start_year_2024_or_later?).and_return(false) allow(form).to receive(:start_year_2025_or_later?).and_return(false) + allow(form).to receive(:start_year_2026_or_later?).and_return(false) allow(page).to receive(:subsection).and_return(subsection) allow(subsection).to receive(:form).and_return(form) end @@ -40,52 +41,52 @@ RSpec.describe Form::Lettings::Questions::Reason, type: :model do expect(question).not_to be_derived(nil) end - context "with 2023/24 form" do + context "with 2024/25 form" do + before do + allow(form).to receive(:start_year_2024_or_later?).and_return(true) + end + it "has the correct answer_options" do expect(question.answer_options).to eq({ - "40" => { "value" => "End of assured shorthold tenancy (no fault)" }, - "41" => { "value" => "End of assured shorthold tenancy (eviction or tenant at fault)" }, - "42" => { "value" => "End of fixed term tenancy (no fault)" }, - "43" => { "value" => "End of fixed term tenancy (eviction or tenant at fault)" }, + "50" => { "value" => "End of social or private sector tenancy - no fault" }, + "51" => { "value" => "End of social or private sector tenancy - evicted due to anti-social behaviour (ASB)" }, + "52" => { "value" => "End of social or private sector tenancy - evicted due to rent arrears" }, + "53" => { "value" => "End of social or private sector tenancy - evicted for any other reason" }, "1" => { "value" => "Permanently decanted from another property owned by this landlord" }, - "46" => { "value" => "Discharged from long-stay hospital or similar institution" }, - "45" => { "value" => "Discharged from prison" }, "2" => { "value" => "Left home country as a refugee" }, + "45" => { "value" => "Discharged from prison" }, + "46" => { "value" => "Discharged from long-stay hospital or similar institution" }, "4" => { "value" => "Loss of tied accommodation" }, "9" => { "value" => "Asked to leave by family or friends" }, - "44" => { "value" => "Death of household member in last settled accommodation" }, "8" => { "value" => "Relationship breakdown (non-violent) with partner" }, + "44" => { "value" => "Death of household member in last settled accommodation" }, "16" => { "value" => "To move nearer to family, friends or school" }, "17" => { "value" => "To move nearer to work" }, "48" => { "value" => "Domestic abuse - previously joint tenancy with partner" }, "49" => { "value" => "Domestic abuse - other" }, - "31" => { "value" => "Hate crime" }, "10" => { "value" => "Racial harassment" }, + "31" => { "value" => "Hate crime" }, "11" => { "value" => "Other problems with neighbours" }, - "35" => { "value" => "Couldn’t afford fees attached to renewing the tenancy" }, - "36" => { "value" => "Couldn’t afford increase in rent" }, - "38" => { "value" => "Couldn’t afford rent or mortgage (employment)" }, - "37" => { "value" => "Couldn’t afford rent or mortgage (welfare reforms)" }, - "39" => { "value" => "Couldn’t afford rent or mortgage (other)" }, "34" => { "value" => "Repossession" }, + "54" => { "value" => "Could no longer afford rent or mortgage" }, "12" => { "value" => "Property unsuitable because of overcrowding" }, "13" => { "value" => "Property unsuitable because of ill health or disability" }, "14" => { "value" => "Property unsuitable because of poor condition" }, + "29" => { "value" => "Under occupation (offered incentive to downsize)" }, + "30" => { "value" => "Under occupation (no incentive)" }, "18" => { "value" => "To move to accommodation with support" }, "19" => { "value" => "To move to independent accommodation" }, - "30" => { "value" => "Under occupation (no incentive)" }, - "29" => { "value" => "Under occupation (offered incentive to downsize)" }, "20" => { "value" => "Other" }, - "47" => { "value" => "Tenant prefers not to say" }, - "divider" => { "value" => true }, "28" => { "value" => "Don’t know" }, + "divider" => { "value" => true }, + "47" => { "value" => "Tenant prefers not to say" }, }) end end - context "with 2024/25 form" do + context "with 2025/26 form" do before do - allow(form).to receive(:start_year_2024_or_later?).and_return(true) + allow(form).to receive(:start_year_2025_or_later?).and_return(true) end it "has the correct answer_options" do @@ -99,6 +100,7 @@ RSpec.describe Form::Lettings::Questions::Reason, type: :model do "45" => { "value" => "Discharged from prison" }, "46" => { "value" => "Discharged from long-stay hospital or similar institution" }, "4" => { "value" => "Loss of tied accommodation" }, + "55" => { "value" => "Leaving foster care or children's home" }, "9" => { "value" => "Asked to leave by family or friends" }, "8" => { "value" => "Relationship breakdown (non-violent) with partner" }, "44" => { "value" => "Death of household member in last settled accommodation" }, @@ -107,7 +109,7 @@ RSpec.describe Form::Lettings::Questions::Reason, type: :model do "48" => { "value" => "Domestic abuse - previously joint tenancy with partner" }, "49" => { "value" => "Domestic abuse - other" }, "10" => { "value" => "Racial harassment" }, - "31" => { "value" => "Hate crime" }, + "31" => { "value" => "Hate crime" }, "11" => { "value" => "Other problems with neighbours" }, "34" => { "value" => "Repossession" }, "54" => { "value" => "Could no longer afford rent or mortgage" }, @@ -118,17 +120,17 @@ RSpec.describe Form::Lettings::Questions::Reason, type: :model do "30" => { "value" => "Under occupation (no incentive)" }, "18" => { "value" => "To move to accommodation with support" }, "19" => { "value" => "To move to independent accommodation" }, + "47" => { "value" => "Tenant prefers not to say" }, "20" => { "value" => "Other" }, - "28" => { "value" => "Don’t know" }, "divider" => { "value" => true }, - "47" => { "value" => "Tenant prefers not to say" }, + "28" => { "value" => "Don’t know" }, }) end end - context "with 2025/26 form" do + context "with 2026/27 form" do before do - allow(form).to receive(:start_year_2025_or_later?).and_return(true) + allow(form).to receive(:start_year_2026_or_later?).and_return(true) end it "has the correct answer_options" do @@ -150,8 +152,10 @@ RSpec.describe Form::Lettings::Questions::Reason, type: :model do "17" => { "value" => "To move nearer to work" }, "48" => { "value" => "Domestic abuse - previously joint tenancy with partner" }, "49" => { "value" => "Domestic abuse - other" }, + "56" => { "value" => "Non-domestic violence (e.g. gang violence)" }, + "57" => { "value" => "Cuckooing (property being used by others for illegal activity)" }, "10" => { "value" => "Racial harassment" }, - "31" => { "value" => "Hate crime" }, + "31" => { "value" => "Hate crime" }, "11" => { "value" => "Other problems with neighbours" }, "34" => { "value" => "Repossession" }, "54" => { "value" => "Could no longer afford rent or mortgage" },