From f3e7d2c62b5010d05f98332d1ccef7c2a8649ae7 Mon Sep 17 00:00:00 2001 From: Arthur Campbell <51094020+arfacamble@users.noreply.github.com> Date: Tue, 21 Mar 2023 13:30:14 +0000 Subject: [PATCH] CLDC-2073 app crashing if needs type is changed (#1368) * add some methods on lettings log and use them and already existing methods to make depends on human readbale for pages in property information subsection * reformat answer options for neatness * ensure that property information subsection is conditionally not shown under correct conditions * amend method to find the path for the next question to answer so that if no questions in the next section are currently routed to, it goes to the section after that * make amendments for failing test and linting * remove unnecessary method * remove unnecessary conditions from depends on, the displayed in tasklist method override is sufficient * test the change to the method creating a link to the next subsection * minor refactor to displayed_is_tasklist condition and changes in testing * implement the fix on 22/23 form also * write a test covering the fix * removal not_renewal? method and tweak depends on for all pages using that method * linty fluff begone * correct some errors in tests after changes to factories * minor testing amendments after rebase --- app/models/form.rb | 4 +-- ...rst_time_property_let_as_social_housing.rb | 2 +- .../lettings/pages/new_build_handover_date.rb | 6 +--- .../lettings/pages/property_building_type.rb | 2 +- .../form/lettings/pages/property_let_type.rb | 2 +- .../pages/property_local_authority.rb | 2 +- .../lettings/pages/property_major_repairs.rb | 13 +------- .../pages/property_number_of_bedrooms.rb | 2 +- ...ty_number_of_times_relet_not_social_let.rb | 2 +- ...operty_number_of_times_relet_social_let.rb | 2 +- .../form/lettings/pages/property_postcode.rb | 2 +- .../form/lettings/pages/property_unit_type.rb | 2 +- .../property_vacancy_reason_first_let.rb | 2 +- .../property_vacancy_reason_not_first_let.rb | 2 +- .../pages/property_wheelchair_accessible.rb | 2 +- .../lettings/pages/void_or_renewal_date.rb | 13 +------- .../lettings/questions/rsnvac_first_let.rb | 9 ++---- .../subsections/property_information.rb | 4 +++ app/models/form/subsection.rb | 11 +++++-- app/models/lettings_log.rb | 4 +++ config/forms/2022_2023.json | 10 +++++- spec/factories/lettings_log.rb | 6 ++-- spec/fixtures/exports/general_needs_log.csv | 2 +- spec/fixtures/exports/general_needs_log.xml | 4 +-- .../exports/supported_housing_logs.xml | 4 +-- .../property_wheelchair_accessible_spec.rb | 4 +-- .../subsections/property_information_spec.rb | 10 ++---- spec/models/form_spec.rb | 20 ++++++++++++ .../requests/lettings_logs_controller_spec.rb | 32 +++++++++++++++++++ 29 files changed, 110 insertions(+), 70 deletions(-) diff --git a/app/models/form.rb b/app/models/form.rb index c7bb4f2b0..9fa908427 100644 --- a/app/models/form.rb +++ b/app/models/form.rb @@ -111,8 +111,8 @@ class Form when :in_progress "#{next_subsection.id}/check_answers".dasherize when :not_started - first_question_in_subsection = next_subsection.pages.find { |page| page.routed_to?(log, nil) }.id - first_question_in_subsection.to_s.dasherize + first_question_in_subsection = next_subsection.pages.find { |page| page.routed_to?(log, nil) } + first_question_in_subsection ? first_question_in_subsection.id.to_s.dasherize : next_incomplete_section_redirect_path(next_subsection, log) else "error" end diff --git a/app/models/form/lettings/pages/first_time_property_let_as_social_housing.rb b/app/models/form/lettings/pages/first_time_property_let_as_social_housing.rb index fc65488e2..eafb145b5 100644 --- a/app/models/form/lettings/pages/first_time_property_let_as_social_housing.rb +++ b/app/models/form/lettings/pages/first_time_property_let_as_social_housing.rb @@ -2,7 +2,7 @@ class Form::Lettings::Pages::FirstTimePropertyLetAsSocialHousing < ::Form::Page def initialize(id, hsh, subsection) super @id = "first_time_property_let_as_social_housing" - @depends_on = [{ "renewal" => 0 }] + @depends_on = [{ "is_renewal?" => false }] end def questions diff --git a/app/models/form/lettings/pages/new_build_handover_date.rb b/app/models/form/lettings/pages/new_build_handover_date.rb index 7b13c7727..e7cb2e5d9 100644 --- a/app/models/form/lettings/pages/new_build_handover_date.rb +++ b/app/models/form/lettings/pages/new_build_handover_date.rb @@ -2,11 +2,7 @@ class Form::Lettings::Pages::NewBuildHandoverDate < ::Form::Page def initialize(id, hsh, subsection) super @id = "new_build_handover_date" - @depends_on = [ - { "renewal" => 0, "rsnvac" => 15 }, - { "renewal" => 0, "rsnvac" => 16 }, - { "renewal" => 0, "rsnvac" => 17 }, - ] + @depends_on = [{ "is_renewal?" => false, "has_first_let_vacancy_reason?" => true }] end def questions diff --git a/app/models/form/lettings/pages/property_building_type.rb b/app/models/form/lettings/pages/property_building_type.rb index aec9fa4a9..ff3d76e0b 100644 --- a/app/models/form/lettings/pages/property_building_type.rb +++ b/app/models/form/lettings/pages/property_building_type.rb @@ -2,7 +2,7 @@ class Form::Lettings::Pages::PropertyBuildingType < ::Form::Page def initialize(id, hsh, subsection) super @id = "property_building_type" - @depends_on = [{ "needstype" => 1 }] + @depends_on = [{ "is_general_needs?" => true }] end def questions diff --git a/app/models/form/lettings/pages/property_let_type.rb b/app/models/form/lettings/pages/property_let_type.rb index 3f9011c99..6bdb94803 100644 --- a/app/models/form/lettings/pages/property_let_type.rb +++ b/app/models/form/lettings/pages/property_let_type.rb @@ -2,7 +2,7 @@ class Form::Lettings::Pages::PropertyLetType < ::Form::Page def initialize(id, hsh, subsection) super @id = "property_let_type" - @depends_on = [{ "first_time_property_let_as_social_housing" => 0, "renewal" => 0 }] + @depends_on = [{ "first_time_property_let_as_social_housing" => 0, "is_renewal?" => false }] end def questions diff --git a/app/models/form/lettings/pages/property_local_authority.rb b/app/models/form/lettings/pages/property_local_authority.rb index 711d908d8..2c64e3628 100644 --- a/app/models/form/lettings/pages/property_local_authority.rb +++ b/app/models/form/lettings/pages/property_local_authority.rb @@ -2,7 +2,7 @@ class Form::Lettings::Pages::PropertyLocalAuthority < ::Form::Page def initialize(id, hsh, subsection) super @id = "property_local_authority" - @depends_on = [{ "is_la_inferred" => false, "needstype" => 1 }] + @depends_on = [{ "is_la_inferred" => false, "is_general_needs?" => true }] end def questions diff --git a/app/models/form/lettings/pages/property_major_repairs.rb b/app/models/form/lettings/pages/property_major_repairs.rb index 54a32a1ad..985b5dce1 100644 --- a/app/models/form/lettings/pages/property_major_repairs.rb +++ b/app/models/form/lettings/pages/property_major_repairs.rb @@ -2,18 +2,7 @@ class Form::Lettings::Pages::PropertyMajorRepairs < ::Form::Page def initialize(id, hsh, subsection) super @id = "property_major_repairs" - @depends_on = [ - { "renewal" => 0, "rsnvac" => 5 }, - { "renewal" => 0, "rsnvac" => 6 }, - { "renewal" => 0, "rsnvac" => 8 }, - { "renewal" => 0, "rsnvac" => 9 }, - { "renewal" => 0, "rsnvac" => 10 }, - { "renewal" => 0, "rsnvac" => 11 }, - { "renewal" => 0, "rsnvac" => 12 }, - { "renewal" => 0, "rsnvac" => 13 }, - { "renewal" => 0, "rsnvac" => 18 }, - { "renewal" => 0, "rsnvac" => 19 }, - ] + @depends_on = [{ "is_renewal?" => false, "vacancy_reason_not_renewal_or_first_let?" => true }] end def questions diff --git a/app/models/form/lettings/pages/property_number_of_bedrooms.rb b/app/models/form/lettings/pages/property_number_of_bedrooms.rb index 89c056e00..c3a1a2365 100644 --- a/app/models/form/lettings/pages/property_number_of_bedrooms.rb +++ b/app/models/form/lettings/pages/property_number_of_bedrooms.rb @@ -2,7 +2,7 @@ class Form::Lettings::Pages::PropertyNumberOfBedrooms < ::Form::Page def initialize(id, hsh, subsection) super @id = "property_number_of_bedrooms" - @depends_on = [{ "needstype" => 1 }] + @depends_on = [{ "is_general_needs?" => true }] end def questions diff --git a/app/models/form/lettings/pages/property_number_of_times_relet_not_social_let.rb b/app/models/form/lettings/pages/property_number_of_times_relet_not_social_let.rb index 6061fcaaa..b82a4757e 100644 --- a/app/models/form/lettings/pages/property_number_of_times_relet_not_social_let.rb +++ b/app/models/form/lettings/pages/property_number_of_times_relet_not_social_let.rb @@ -2,7 +2,7 @@ class Form::Lettings::Pages::PropertyNumberOfTimesReletNotSocialLet < ::Form::Pa def initialize(id, hsh, subsection) super @id = "property_number_of_times_relet_not_social_let" - @depends_on = [{ "first_time_property_let_as_social_housing" => 0, "renewal" => 0 }] + @depends_on = [{ "first_time_property_let_as_social_housing" => 0, "is_renewal?" => false }] end def questions diff --git a/app/models/form/lettings/pages/property_number_of_times_relet_social_let.rb b/app/models/form/lettings/pages/property_number_of_times_relet_social_let.rb index f1a136249..5785a2961 100644 --- a/app/models/form/lettings/pages/property_number_of_times_relet_social_let.rb +++ b/app/models/form/lettings/pages/property_number_of_times_relet_social_let.rb @@ -2,7 +2,7 @@ class Form::Lettings::Pages::PropertyNumberOfTimesReletSocialLet < ::Form::Page def initialize(id, hsh, subsection) super @id = "property_number_of_times_relet_social_let" - @depends_on = [{ "first_time_property_let_as_social_housing" => 1, "renewal" => 0 }] + @depends_on = [{ "first_time_property_let_as_social_housing" => 1, "is_renewal?" => false }] end def questions diff --git a/app/models/form/lettings/pages/property_postcode.rb b/app/models/form/lettings/pages/property_postcode.rb index 720cd3106..a40d4140f 100644 --- a/app/models/form/lettings/pages/property_postcode.rb +++ b/app/models/form/lettings/pages/property_postcode.rb @@ -2,7 +2,7 @@ class Form::Lettings::Pages::PropertyPostcode < ::Form::Page def initialize(id, hsh, subsection) super @id = "property_postcode" - @depends_on = [{ "needstype" => 1 }] + @depends_on = [{ "is_general_needs?" => true }] end def questions diff --git a/app/models/form/lettings/pages/property_unit_type.rb b/app/models/form/lettings/pages/property_unit_type.rb index 6db4db4e4..727e740cd 100644 --- a/app/models/form/lettings/pages/property_unit_type.rb +++ b/app/models/form/lettings/pages/property_unit_type.rb @@ -2,7 +2,7 @@ class Form::Lettings::Pages::PropertyUnitType < ::Form::Page def initialize(id, hsh, subsection) super @id = "property_unit_type" - @depends_on = [{ "needstype" => 1 }] + @depends_on = [{ "is_general_needs?" => true }] end def questions diff --git a/app/models/form/lettings/pages/property_vacancy_reason_first_let.rb b/app/models/form/lettings/pages/property_vacancy_reason_first_let.rb index 3a14827de..85dd5d690 100644 --- a/app/models/form/lettings/pages/property_vacancy_reason_first_let.rb +++ b/app/models/form/lettings/pages/property_vacancy_reason_first_let.rb @@ -2,7 +2,7 @@ class Form::Lettings::Pages::PropertyVacancyReasonFirstLet < ::Form::Page def initialize(id, hsh, subsection) super @id = "property_vacancy_reason_first_let" - @depends_on = [{ "first_time_property_let_as_social_housing" => 1, "renewal" => 0 }] + @depends_on = [{ "first_time_property_let_as_social_housing" => 1, "is_renewal?" => false }] end def questions diff --git a/app/models/form/lettings/pages/property_vacancy_reason_not_first_let.rb b/app/models/form/lettings/pages/property_vacancy_reason_not_first_let.rb index 1b2c147ed..4fdf7fef5 100644 --- a/app/models/form/lettings/pages/property_vacancy_reason_not_first_let.rb +++ b/app/models/form/lettings/pages/property_vacancy_reason_not_first_let.rb @@ -2,7 +2,7 @@ class Form::Lettings::Pages::PropertyVacancyReasonNotFirstLet < ::Form::Page def initialize(id, hsh, subsection) super @id = "property_vacancy_reason_not_first_let" - @depends_on = [{ "first_time_property_let_as_social_housing" => 0, "renewal" => 0 }] + @depends_on = [{ "first_time_property_let_as_social_housing" => 0, "is_renewal?" => false }] end def questions diff --git a/app/models/form/lettings/pages/property_wheelchair_accessible.rb b/app/models/form/lettings/pages/property_wheelchair_accessible.rb index e5d673ef0..3b2b226b6 100644 --- a/app/models/form/lettings/pages/property_wheelchair_accessible.rb +++ b/app/models/form/lettings/pages/property_wheelchair_accessible.rb @@ -2,7 +2,7 @@ class Form::Lettings::Pages::PropertyWheelchairAccessible < ::Form::Page def initialize(id, hsh, subsection) super @id = "property_wheelchair_accessible" - @depends_on = [{ "is_supported_housing?" => false }] + @depends_on = [{ "is_general_needs?" => true }] end def questions diff --git a/app/models/form/lettings/pages/void_or_renewal_date.rb b/app/models/form/lettings/pages/void_or_renewal_date.rb index 1ea4ea982..0905f1058 100644 --- a/app/models/form/lettings/pages/void_or_renewal_date.rb +++ b/app/models/form/lettings/pages/void_or_renewal_date.rb @@ -2,18 +2,7 @@ class Form::Lettings::Pages::VoidOrRenewalDate < ::Form::Page def initialize(id, hsh, subsection) super @id = "void_or_renewal_date" - @depends_on = [ - { "renewal" => 0, "rsnvac" => 5 }, - { "renewal" => 0, "rsnvac" => 6 }, - { "renewal" => 0, "rsnvac" => 8 }, - { "renewal" => 0, "rsnvac" => 9 }, - { "renewal" => 0, "rsnvac" => 10 }, - { "renewal" => 0, "rsnvac" => 11 }, - { "renewal" => 0, "rsnvac" => 12 }, - { "renewal" => 0, "rsnvac" => 13 }, - { "renewal" => 0, "rsnvac" => 18 }, - { "renewal" => 0, "rsnvac" => 19 }, - ] + @depends_on = [{ "is_renewal?" => false, "vacancy_reason_not_renewal_or_first_let?" => true }] end def questions diff --git a/app/models/form/lettings/questions/rsnvac_first_let.rb b/app/models/form/lettings/questions/rsnvac_first_let.rb index 8d7da0433..df66b57cd 100644 --- a/app/models/form/lettings/questions/rsnvac_first_let.rb +++ b/app/models/form/lettings/questions/rsnvac_first_let.rb @@ -12,11 +12,8 @@ class Form::Lettings::Questions::RsnvacFirstLet < ::Form::Question end ANSWER_OPTIONS = { - "16" => - { "value" => "First let of conversion, rehabilitation or acquired property" }, - "17" => - { "value" => "First let of leased property" }, - "15" => - { "value" => "First let of new-build property" }, + "16" => { "value" => "First let of conversion, rehabilitation or acquired property" }, + "17" => { "value" => "First let of leased property" }, + "15" => { "value" => "First let of new-build property" }, }.freeze end diff --git a/app/models/form/lettings/subsections/property_information.rb b/app/models/form/lettings/subsections/property_information.rb index cc07535ae..6e20ea7cf 100644 --- a/app/models/form/lettings/subsections/property_information.rb +++ b/app/models/form/lettings/subsections/property_information.rb @@ -27,4 +27,8 @@ class Form::Lettings::Subsections::PropertyInformation < ::Form::Subsection Form::Lettings::Pages::PropertyMajorRepairsValueCheck.new(nil, nil, self), ].compact end + + def displayed_in_tasklist?(log) + !(log.is_supported_housing? && log.is_renewal?) + end end diff --git a/app/models/form/subsection.rb b/app/models/form/subsection.rb index 3f5827c92..f38ecc327 100644 --- a/app/models/form/subsection.rb +++ b/app/models/form/subsection.rb @@ -7,6 +7,7 @@ class Form::Subsection if hsh @label = hsh["label"] @depends_on = hsh["depends_on"] + @displayed_in_tasklist_from_json = hsh["displayed_in_tasklist"] @pages = hsh["pages"].map { |s_id, p| Form::Page.new(s_id, p, self) } end end @@ -48,7 +49,13 @@ class Form::Subsection end end - def displayed_in_tasklist?(_log) - true + def displayed_in_tasklist?(log) + return true unless @displayed_in_tasklist_from_json + + @displayed_in_tasklist_from_json.any? do |conditions| + conditions.all? do |method, expected_return_value| + log.send(method) == expected_return_value + end + end end end diff --git a/app/models/lettings_log.rb b/app/models/lettings_log.rb index 4524ead12..36d81a537 100644 --- a/app/models/lettings_log.rb +++ b/app/models/lettings_log.rb @@ -287,6 +287,10 @@ class LettingsLog < Log [15, 16, 17].include?(rsnvac) end + def vacancy_reason_not_renewal_or_first_let? + [5, 6, 8, 9, 10, 11, 12, 13, 18, 19].include? rsnvac + end + def previous_tenancy_was_temporary? # 4: Tied housing or renting with job # 6: Supported housing diff --git a/config/forms/2022_2023.json b/config/forms/2022_2023.json index bd88b1335..7cee2b737 100644 --- a/config/forms/2022_2023.json +++ b/config/forms/2022_2023.json @@ -939,7 +939,15 @@ } } } - } + }, + "displayed_in_tasklist": [ + { + "is_supported_housing?": false + }, + { + "is_renewal?": false + } + ] }, "tenancy_information": { "label": "Tenancy information", diff --git a/spec/factories/lettings_log.rb b/spec/factories/lettings_log.rb index b0667b817..994b69c33 100644 --- a/spec/factories/lettings_log.rb +++ b/spec/factories/lettings_log.rb @@ -30,7 +30,7 @@ FactoryBot.define do age1 { 34 } sex1 { "M" } ethnic { 2 } - national { 4 } + national { 18 } ecstat1 { 2 } hhmemb { 1 } end @@ -43,7 +43,7 @@ FactoryBot.define do sex1 { "F" } ethnic_group { 0 } ethnic { 2 } - national { 4 } + national { 13 } prevten { 6 } ecstat1 { 0 } hhmemb { 2 } @@ -79,7 +79,7 @@ FactoryBot.define do supcharg { 35 } tcharge { 325 } layear { 2 } - waityear { 1 } + waityear { 7 } postcode_known { 1 } postcode_full { Faker::Address.postcode } reasonpref { 1 } diff --git a/spec/fixtures/exports/general_needs_log.csv b/spec/fixtures/exports/general_needs_log.csv index 0185f54e0..37ee27089 100644 --- a/spec/fixtures/exports/general_needs_log.csv +++ b/spec/fixtures/exports/general_needs_log.csv @@ -1,2 +1,2 @@ status,tenancycode,age1,sex1,ethnic,national,prevten,ecstat1,hhmemb,age2,sex2,ecstat2,age3,sex3,ecstat3,age4,sex4,ecstat4,age5,sex5,ecstat5,age6,sex6,ecstat6,age7,sex7,ecstat7,age8,sex8,ecstat8,homeless,underoccupation_benefitcap,leftreg,reservist,illness,preg_occ,startertenancy,tenancylength,tenancy,ppostcode_full,rsnvac,unittype_gn,beds,offered,wchair,earnings,incfreq,benefits,period,layear,waityear,postcode_full,reasonpref,cbl,chr,cap,reasonother,housingneeds_a,housingneeds_b,housingneeds_c,housingneeds_f,housingneeds_g,housingneeds_h,illness_type_1,illness_type_2,illness_type_3,illness_type_4,illness_type_8,illness_type_5,illness_type_6,illness_type_7,illness_type_9,illness_type_10,rp_homeless,rp_insan_unsat,rp_medwel,rp_hardship,rp_dontknow,tenancyother,irproduct_other,reason,propcode,la,prevloc,hb,hbrentshortfall,mrcdate,incref,startdate,armedforces,unitletas,builtype,voiddate,renttype,needstype,lettype,totchild,totelder,totadult,nocharge,referral,brent,scharge,pscharge,supcharg,tcharge,tshortfall,chcharge,ppcodenk,has_benefits,renewal,wrent,wscharge,wpschrge,wsupchrg,wtcharge,wtshortfall,refused,housingneeds,wchchrg,newprop,relat2,relat3,relat4,relat5,relat6,relat7,relat8,lar,irproduct,joint,sheltered,hhtype,new_old,vacdays,formid,owningorgid,owningorgname,hcnum,maningorgid,maningorgname,manhcnum,createddate,uploaddate -2,BZ737,35,F,2,4,6,0,2,32,M,6,,,,,,,,,,,,,,,,,,,1,4,1,1,1,2,1,5,1,SE2 6RT,6,7,3,2,1,68,1,1,2,2,1,NW1 5TY,1,2,1,2,,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,,,4,123,E09000003,E07000105,6,1,2020-05-05T10:36:49+01:00,0,2022-02-02T10:36:49+00:00,1,2,1,2019-11-03T00:00:00+00:00,2,1,7,0,0,2,0,2,200.0,50.0,40.0,35.0,325.0,12.0,,1,1,0,100.0,25.0,20.0,17.5,162.5,6.0,0,1,,2,P,,,,,,,,,,,4,2,638,{id},{owning_org_id},DLUHC,1234,{managing_org_id},DLUHC,1234,2022-05-01T00:00:00+01:00,2022-05-01T00:00:00+01:00 +2,BZ737,35,F,2,13,6,0,2,32,M,6,,,,,,,,,,,,,,,,,,,1,4,1,1,1,2,1,5,1,SE2 6RT,6,7,3,2,1,68,1,1,2,2,7,NW1 5TY,1,2,1,2,,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,,,4,123,E09000003,E07000105,6,1,2020-05-05T10:36:49+01:00,0,2022-02-02T10:36:49+00:00,1,2,1,2019-11-03T00:00:00+00:00,2,1,7,0,0,2,0,2,200.0,50.0,40.0,35.0,325.0,12.0,,1,1,0,100.0,25.0,20.0,17.5,162.5,6.0,0,1,,2,P,,,,,,,,,,,4,2,638,{id},{owning_org_id},DLUHC,1234,{managing_org_id},DLUHC,1234,2022-05-01T00:00:00+01:00,2022-05-01T00:00:00+01:00 diff --git a/spec/fixtures/exports/general_needs_log.xml b/spec/fixtures/exports/general_needs_log.xml index f05de09e3..11c50ed4e 100644 --- a/spec/fixtures/exports/general_needs_log.xml +++ b/spec/fixtures/exports/general_needs_log.xml @@ -6,7 +6,7 @@ 35 F 2 - 4 + 13 6 0 2 @@ -51,7 +51,7 @@ 1 2 2 - 1 + 7 NW1 5TY 1 2 diff --git a/spec/fixtures/exports/supported_housing_logs.xml b/spec/fixtures/exports/supported_housing_logs.xml index 0a0ed0981..3b535c226 100644 --- a/spec/fixtures/exports/supported_housing_logs.xml +++ b/spec/fixtures/exports/supported_housing_logs.xml @@ -6,7 +6,7 @@ 35 F 2 - 4 + 13 6 0 2 @@ -50,7 +50,7 @@ 1 2 2 - 1 + 7 SW1A 2AA 1 2 diff --git a/spec/models/form/lettings/pages/property_wheelchair_accessible_spec.rb b/spec/models/form/lettings/pages/property_wheelchair_accessible_spec.rb index 4e487e239..b96a55feb 100644 --- a/spec/models/form/lettings/pages/property_wheelchair_accessible_spec.rb +++ b/spec/models/form/lettings/pages/property_wheelchair_accessible_spec.rb @@ -6,7 +6,7 @@ RSpec.describe Form::Lettings::Pages::PropertyWheelchairAccessible, type: :model let(:subsection) { instance_double(Form::Subsection) } it "has correct subsection" do - expect(page.subsection).to eq(subsection) + expect(page.subsection).to be(subsection) end it "has correct questions" do @@ -26,6 +26,6 @@ RSpec.describe Form::Lettings::Pages::PropertyWheelchairAccessible, type: :model end it "has the correct depends_on" do - expect(page.depends_on).to eq([{ "is_supported_housing?" => false }]) + expect(page.depends_on).to eq([{ "is_general_needs?" => true }]) end end diff --git a/spec/models/form/lettings/subsections/property_information_spec.rb b/spec/models/form/lettings/subsections/property_information_spec.rb index 227773487..8b30964c3 100644 --- a/spec/models/form/lettings/subsections/property_information_spec.rb +++ b/spec/models/form/lettings/subsections/property_information_spec.rb @@ -1,10 +1,8 @@ require "rails_helper" RSpec.describe Form::Lettings::Subsections::PropertyInformation, type: :model do - subject(:property_information) { described_class.new(subsection_id, subsection_definition, section) } + subject(:property_information) { described_class.new(nil, nil, section) } - let(:subsection_id) { nil } - let(:subsection_definition) { nil } let(:section) { instance_double(Form::Lettings::Sections::TenancyAndProperty) } it "has correct section" do @@ -44,10 +42,6 @@ RSpec.describe Form::Lettings::Subsections::PropertyInformation, type: :model do end it "has the correct depends_on" do - expect(property_information.depends_on).to eq([ - { - "non_location_setup_questions_completed?" => true, - }, - ]) + expect(property_information.depends_on).to eq([{ "non_location_setup_questions_completed?" => true }]) end end diff --git a/spec/models/form_spec.rb b/spec/models/form_spec.rb index 57995d90b..3236623c1 100644 --- a/spec/models/form_spec.rb +++ b/spec/models/form_spec.rb @@ -183,6 +183,26 @@ RSpec.describe Form, type: :model do expect(form.next_incomplete_section_redirect_path(subsection, lettings_log)).to eq("declaration") end end + + context "when no pages or questions in the next subsection are routed to" do + let(:subsection) { form.get_subsection("setup") } + + around do |example| + FormHandler.instance.use_real_forms! + + example.run + + FormHandler.instance.use_fake_forms! + end + + it "finds the path to the section after" do + lettings_log.startdate = Time.zone.local(2022, 9, 1) + lettings_log.renewal = 1 + lettings_log.needstype = 2 + lettings_log.postcode_known = 0 + expect(form.next_incomplete_section_redirect_path(subsection, lettings_log)).to eq("joint") + end + end end describe "invalidated_page_questions" do diff --git a/spec/requests/lettings_logs_controller_spec.rb b/spec/requests/lettings_logs_controller_spec.rb index 066cd1f35..b8e7f0f78 100644 --- a/spec/requests/lettings_logs_controller_spec.rb +++ b/spec/requests/lettings_logs_controller_spec.rb @@ -891,6 +891,38 @@ RSpec.describe LettingsLogsController, type: :request do end end + context "when a lettings log is for a renewal of supported housing, so property information does not need to show" do + let(:lettings_log) do + FactoryBot.create( + :lettings_log, + owning_organisation: user.organisation, + managing_organisation: user.organisation, + created_by: user, + startdate: Time.zone.now, + renewal: 1, + needstype: 2, + rent_type: 3, + postcode_known: 0, + ) + end + + before do + sign_in user + end + + around do |example| + FormHandler.instance.use_real_forms! + example.run + FormHandler.instance.use_fake_forms! + end + + it "does not crash the app if postcode_known is not nil" do + expect { + get "/lettings-logs/#{lettings_log.id}", headers:, params: {} + }.not_to raise_error(ActionView::Template::Error) + end + end + context "with a lettings log with a single section complete" do let(:section_completed_lettings_log) do FactoryBot.create(