diff --git a/app/helpers/form_page_error_helper.rb b/app/helpers/form_page_error_helper.rb new file mode 100644 index 000000000..f03c53694 --- /dev/null +++ b/app/helpers/form_page_error_helper.rb @@ -0,0 +1,6 @@ +module FormPageErrorHelper + def remove_other_page_errors(case_log, page) + other_page_error_ids = case_log.errors.map(&:attribute) - page.questions.map { |q| q.id.to_sym }.concat([:base]) + other_page_error_ids.each { |id| case_log.errors.delete(id) } + end +end diff --git a/app/models/constants/case_log.rb b/app/models/constants/case_log.rb index c42ccfe27..ea816bb7f 100644 --- a/app/models/constants/case_log.rb +++ b/app/models/constants/case_log.rb @@ -1095,4 +1095,10 @@ module Constants::CaseLog "No" => 3, "Don’t know" => 4, }.freeze + + NON_TEMP_ACCOMMODATION = ["Tied housing or rented with job", + "Supported housing", + "Sheltered accomodation", + "Home Office Asylum Support", + "Other"].freeze end diff --git a/app/models/validations/household_validations.rb b/app/models/validations/household_validations.rb index faff2bd8f..710332d8c 100644 --- a/app/models/validations/household_validations.rb +++ b/app/models/validations/household_validations.rb @@ -1,4 +1,6 @@ module Validations::HouseholdValidations + include Constants::CaseLog + # Validations methods need to be called 'validate_' to run on model save # or 'validate_' to run on submit as well def validate_reasonable_preference(record) @@ -84,15 +86,9 @@ module Validations::HouseholdValidations end end - NON_TEMP_ACCOMMODATION = ["Tied housing or rented with job", - "Supported housing", - "Sheltered accomodation", - "Home Office Asylum Support", - "Other"].freeze - - def validate_property_vacancy_reason_not_first_let(record) + def validate_previous_housing_situation(record) if record.rsnvac == "Relet to tenant who occupied same property as temporary accommodation" && NON_TEMP_ACCOMMODATION.include?(record.prevten) - record.errors.add :rsnvac, I18n.t("validations.property.rsnvac.non_temp_accommodation") + record.errors.add :prevten, I18n.t("validations.household.prevten.non_temp_accommodation") end end diff --git a/app/models/validations/property_validations.rb b/app/models/validations/property_validations.rb index d91ea931f..b756f7acb 100644 --- a/app/models/validations/property_validations.rb +++ b/app/models/validations/property_validations.rb @@ -55,4 +55,10 @@ module Validations::PropertyValidations record.errors.add :property_postcode, error_message end end + + def validate_property_vacancy_reason_not_first_let(record) + if record.rsnvac == "Relet to tenant who occupied same property as temporary accommodation" && NON_TEMP_ACCOMMODATION.include?(record.prevten) + record.errors.add :rsnvac, I18n.t("validations.property.rsnvac.non_temp_accommodation") + end + end end diff --git a/app/views/form/page.html.erb b/app/views/form/page.html.erb index 3589a1c43..8961f2edc 100644 --- a/app/views/form/page.html.erb +++ b/app/views/form/page.html.erb @@ -30,6 +30,7 @@ <% end %> <%= form_with model: @case_log, url: form_case_log_path(@case_log), method: "post" do |f| %> + <% remove_other_page_errors(@case_log, @page) %> <%= f.govuk_error_summary %> <% @page.non_conditional_questions.map do |question| %>
<%= display_question_key_div(@page, question) %> > diff --git a/config/locales/en.yml b/config/locales/en.yml index f3c1674a4..3d40e0d65 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -101,6 +101,8 @@ en: one_bedroom_bedsit: "A bedsit can only have one bedroom" one_seven_bedroom_shared: "A shared house must have 1 to 7 bedrooms" one_three_bedroom_single_tenant_shared: "A shared house with less than two tenants must have 1 to 3 bedrooms" + prevten: + non_temp_accommodation: "Previous tenancy cannot be a non temporary accommodation if the vacancy reason is \"Relet to tenant who occupied same property as temporary accommodation\"" tenancy: length: diff --git a/spec/helpers/form_page_error_helper.spec.rb b/spec/helpers/form_page_error_helper.spec.rb new file mode 100644 index 000000000..dc78bf2f8 --- /dev/null +++ b/spec/helpers/form_page_error_helper.spec.rb @@ -0,0 +1,24 @@ +require "rails_helper" + +RSpec.describe FormPageErrorHelper do + describe "#remove_other_page_errors" do + context "removes non base other questions" do + let!(:case_log) { FactoryBot.create(:case_log, :in_progress) } + let!(:form) { case_log.form } + + before do + case_log.errors.add :layear, "error" + case_log.errors.add :period, "error_one" + case_log.errors.add :base, "error_too" + end + + it "returns details and user tabs" do + page = form.get_page("rent") + remove_other_page_errors(case_log, page) + expect(case_log.errors.count).to eq(2) + expect(case_log.errors.map(&:attribute)).to include(:period) + expect(case_log.errors.map(&:attribute)).to include(:base) + end + end + end +end