From 8ce222dcaad88720ab88146d993f72b46a44dc71 Mon Sep 17 00:00:00 2001 From: natdeanlewissoftwire <94526761+natdeanlewissoftwire@users.noreply.github.com> Date: Tue, 6 Feb 2024 15:52:04 +0000 Subject: [PATCH] CLDC-3151 Update reason for leaving for 24/25 (#2192) * feat: update ansewrs, hint text and test * refactor: lint * refactor: save lines --- app/models/form/lettings/questions/reason.rb | 190 +++++++--------- .../form/lettings/questions/reason_renewal.rb | 40 ++-- .../lettings/questions/reason_renewal_spec.rb | 85 +++++++ .../form/lettings/questions/reason_spec.rb | 215 ++++++++---------- 4 files changed, 286 insertions(+), 244 deletions(-) create mode 100644 spec/models/form/lettings/questions/reason_renewal_spec.rb diff --git a/app/models/form/lettings/questions/reason.rb b/app/models/form/lettings/questions/reason.rb index 9598780ec..a60cc3b3f 100644 --- a/app/models/form/lettings/questions/reason.rb +++ b/app/models/form/lettings/questions/reason.rb @@ -6,8 +6,7 @@ class Form::Lettings::Questions::Reason < ::Form::Question @header = "What is the tenant’s main reason for the household leaving their last settled home?" @type = "radio" @check_answers_card_number = 0 - @hint_text = "The tenant’s ‘last settled home’ is their last long-standing home. For tenants who were in temporary accommodation or sleeping rough, their last settled home is where they were living previously." - @answer_options = ANSWER_OPTIONS + @hint_text = form.start_year_after_2024? ? "The tenant’s ‘last settled home’ is their last long-standing home. For tenants who were in temporary accommodation, sleeping rough or otherwise homeless, their last settled home is where they were living previously." : "The tenant’s ‘last settled home’ is their last long-standing home. For tenants who were in temporary accommodation or sleeping rough, their last settled home is where they were living previously." @conditional_for = { "reasonother" => [ 20, @@ -16,114 +15,81 @@ class Form::Lettings::Questions::Reason < ::Form::Question @question_number = 77 end - ANSWER_OPTIONS = { - "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)", - }, - "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", - }, - "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", - }, - "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", - }, - "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", - }, - "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", - }, - "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", - }, - }.freeze + def answer_options + if form.start_year_after_2024? + { + "50" => { "value" => "End of social housing tenancy - no fault" }, + "51" => { "value" => "End of social housing tenancy - evicted due to anti-social behaviour (ASB)" }, + "52" => { "value" => "End of social housing tenancy - evicted due to rent arrears" }, + "53" => { "value" => "End of social housing 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" }, + "28" => { "value" => "Don’t know" }, + "divider" => { "value" => true }, + "47" => { "value" => "Tenant prefers not to say" }, + }.freeze + else + { + "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)" }, + "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" }, + "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" }, + "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" }, + "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" }, + "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" }, + "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" }, + }.freeze + end + end end diff --git a/app/models/form/lettings/questions/reason_renewal.rb b/app/models/form/lettings/questions/reason_renewal.rb index 0158eba63..526df044c 100644 --- a/app/models/form/lettings/questions/reason_renewal.rb +++ b/app/models/form/lettings/questions/reason_renewal.rb @@ -7,7 +7,6 @@ class Form::Lettings::Questions::ReasonRenewal < ::Form::Question @type = "radio" @check_answers_card_number = 0 @hint_text = "You told us this letting is a renewal. We have removed some options because of this." - @answer_options = ANSWER_OPTIONS @question_number = 77 @conditional_for = { "reasonother" => [ @@ -16,20 +15,27 @@ class Form::Lettings::Questions::ReasonRenewal < ::Form::Question } end - ANSWER_OPTIONS = { - "40" => { "value" => "End of assured shorthold tenancy (no fault)" }, - "42" => { "value" => "End of fixed term tenancy (no fault)" }, - "20" => { - "value" => "Other", - }, - "47" => { - "value" => "Tenant prefers not to say", - }, - "divider" => { - "value" => true, - }, - "28" => { - "value" => "Don’t know", - }, - }.freeze + def answer_options + if form.start_year_after_2024? + { + "50" => { "value" => "End of social housing tenancy - no fault" }, + "51" => { "value" => "End of social housing tenancy - evicted due to anti-social behaviour (ASB)" }, + "52" => { "value" => "End of social housing tenancy - evicted due to rent arrears" }, + "53" => { "value" => "End of social housing tenancy - evicted for any other reason" }, + "20" => { "value" => "Other" }, + "47" => { "value" => "Tenant prefers not to say" }, + "divider" => { "value" => true }, + "28" => { "value" => "Don’t know" }, + }.freeze + else + { + "40" => { "value" => "End of assured shorthold tenancy (no fault)" }, + "42" => { "value" => "End of fixed term tenancy (no fault)" }, + "20" => { "value" => "Other" }, + "47" => { "value" => "Tenant prefers not to say" }, + "divider" => { "value" => true }, + "28" => { "value" => "Don’t know" }, + }.freeze + end + end end diff --git a/spec/models/form/lettings/questions/reason_renewal_spec.rb b/spec/models/form/lettings/questions/reason_renewal_spec.rb new file mode 100644 index 000000000..f861fc2af --- /dev/null +++ b/spec/models/form/lettings/questions/reason_renewal_spec.rb @@ -0,0 +1,85 @@ +require "rails_helper" + +RSpec.describe Form::Lettings::Questions::ReasonRenewal, 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("reason") + end + + it "has the correct header" do + expect(question.header).to eq("What is the tenant’s main reason for the household leaving their last settled home?") + end + + it "has the correct check_answer_label" do + expect(question.check_answer_label).to eq("Reason for leaving last settled home") + end + + it "has the correct type" do + expect(question.type).to eq("radio") + end + + it "has the correct check_answers_card_number" do + expect(question.check_answers_card_number).to eq(0) + end + + it "has the correct hint" do + expect(question.hint_text).to eq("You told us this letting is a renewal. We have removed some options because of this.") + end + + it "has the correct conditional_for" do + expect(question.conditional_for).to eq({ "reasonother" => [20] }) + end + + it "is not marked as derived" do + expect(question).not_to be_derived + end + + context "with 2023/24 form" do + it "has the correct answer_options" do + expect(question.answer_options).to eq({ + "40" => { "value" => "End of assured shorthold tenancy (no fault)" }, + "42" => { "value" => "End of fixed term tenancy (no fault)" }, + "20" => { "value" => "Other" }, + "47" => { "value" => "Tenant prefers not to say" }, + "divider" => { "value" => true }, + "28" => { "value" => "Don’t know" }, + }) + 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({ + "50" => { "value" => "End of social housing tenancy - no fault" }, + "51" => { "value" => "End of social housing tenancy - evicted due to anti-social behaviour (ASB)" }, + "52" => { "value" => "End of social housing tenancy - evicted due to rent arrears" }, + "53" => { "value" => "End of social housing tenancy - evicted for any other reason" }, + "20" => { "value" => "Other" }, + "47" => { "value" => "Tenant prefers not to say" }, + "divider" => { "value" => true }, + "28" => { "value" => "Don’t know" }, + }) + end + end +end diff --git a/spec/models/form/lettings/questions/reason_spec.rb b/spec/models/form/lettings/questions/reason_spec.rb index 24d28fd4b..4ea1a4a35 100644 --- a/spec/models/form/lettings/questions/reason_spec.rb +++ b/spec/models/form/lettings/questions/reason_spec.rb @@ -6,6 +6,14 @@ RSpec.describe Form::Lettings::Questions::Reason, type: :model do 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,10 +39,6 @@ RSpec.describe Form::Lettings::Questions::Reason, type: :model do expect(question.check_answers_card_number).to eq(0) end - it "has the correct hint" do - expect(question.hint_text).to eq("The tenant’s ‘last settled home’ is their last long-standing home. For tenants who were in temporary accommodation or sleeping rough, their last settled home is where they were living previously.") - end - it "has the correct conditional_for" do expect(question.conditional_for).to eq({ "reasonother" => [20] }) end @@ -43,116 +47,97 @@ RSpec.describe Form::Lettings::Questions::Reason, type: :model do expect(question).not_to be_derived 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)", - }, - "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", - }, - "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", - }, - "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", - }, - "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", - }, - "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", - }, - "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", - }, - }) + context "with 2023/24 form" do + it "has the correct hint" do + expect(question.hint_text).to eq("The tenant’s ‘last settled home’ is their last long-standing home. For tenants who were in temporary accommodation or sleeping rough, their last settled home is where they were living previously.") + 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)" }, + "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" }, + "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" }, + "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" }, + "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" }, + "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" }, + "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" }, + }) + 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 hint" do + expect(question.hint_text).to eq("The tenant’s ‘last settled home’ is their last long-standing home. For tenants who were in temporary accommodation, sleeping rough or otherwise homeless, their last settled home is where they were living previously.") + end + + it "has the correct answer_options" do + expect(question.answer_options).to eq({ + "50" => { "value" => "End of social housing tenancy - no fault" }, + "51" => { "value" => "End of social housing tenancy - evicted due to anti-social behaviour (ASB)" }, + "52" => { "value" => "End of social housing tenancy - evicted due to rent arrears" }, + "53" => { "value" => "End of social housing 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" }, + "28" => { "value" => "Don’t know" }, + "divider" => { "value" => true }, + "47" => { "value" => "Tenant prefers not to say" }, + }) + end end end