Browse Source

Only show errors relevant to the page questions

pull/242/head
Kat 4 years ago
parent
commit
fc1d5e08a2
  1. 6
      app/helpers/form_page_error_helper.rb
  2. 6
      app/models/constants/case_log.rb
  3. 12
      app/models/validations/household_validations.rb
  4. 6
      app/models/validations/property_validations.rb
  5. 1
      app/views/form/page.html.erb
  6. 2
      config/locales/en.yml
  7. 24
      spec/helpers/form_page_error_helper.spec.rb

6
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

6
app/models/constants/case_log.rb

@ -1095,4 +1095,10 @@ module Constants::CaseLog
"No" => 3, "No" => 3,
"Don’t know" => 4, "Don’t know" => 4,
}.freeze }.freeze
NON_TEMP_ACCOMMODATION = ["Tied housing or rented with job",
"Supported housing",
"Sheltered accomodation",
"Home Office Asylum Support",
"Other"].freeze
end end

12
app/models/validations/household_validations.rb

@ -1,4 +1,6 @@
module Validations::HouseholdValidations module Validations::HouseholdValidations
include Constants::CaseLog
# Validations methods need to be called 'validate_<page_name>' to run on model save # Validations methods need to be called 'validate_<page_name>' to run on model save
# or 'validate_' to run on submit as well # or 'validate_' to run on submit as well
def validate_reasonable_preference(record) def validate_reasonable_preference(record)
@ -84,15 +86,9 @@ module Validations::HouseholdValidations
end end
end end
NON_TEMP_ACCOMMODATION = ["Tied housing or rented with job", def validate_previous_housing_situation(record)
"Supported housing",
"Sheltered accomodation",
"Home Office Asylum Support",
"Other"].freeze
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) 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
end end

6
app/models/validations/property_validations.rb

@ -55,4 +55,10 @@ module Validations::PropertyValidations
record.errors.add :property_postcode, error_message record.errors.add :property_postcode, error_message
end end
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 end

1
app/views/form/page.html.erb

@ -30,6 +30,7 @@
<% end %> <% end %>
<%= form_with model: @case_log, url: form_case_log_path(@case_log), method: "post" do |f| %> <%= 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 %> <%= f.govuk_error_summary %>
<% @page.non_conditional_questions.map do |question| %> <% @page.non_conditional_questions.map do |question| %>
<div id=<%= question.id + "_div " %><%= display_question_key_div(@page, question) %> > <div id=<%= question.id + "_div " %><%= display_question_key_div(@page, question) %> >

2
config/locales/en.yml

@ -101,6 +101,8 @@ en:
one_bedroom_bedsit: "A bedsit can only have one bedroom" one_bedroom_bedsit: "A bedsit can only have one bedroom"
one_seven_bedroom_shared: "A shared house must have 1 to 7 bedrooms" 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" 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: tenancy:
length: length:

24
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
Loading…
Cancel
Save