From cc17a48ee26ddb6cb91abec4d26d2f6706935a5b Mon Sep 17 00:00:00 2001 From: Daniel Baark <5101747+baarkerlounger@users.noreply.github.com> Date: Fri, 22 Oct 2021 12:10:01 +0100 Subject: [PATCH] Full error messages (#57) * Full error messages * Adjust error in spec --- Gemfile.lock | 10 +++++----- app/controllers/case_logs_controller.rb | 6 +++--- app/models/case_log.rb | 10 +++++----- docs/api/DLUHC-CORE-Data.v1.json | 21 ++++++++++++++------- spec/requests/case_log_controller_spec.rb | 4 ++-- 5 files changed, 29 insertions(+), 22 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 176bb4202..b48165040 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,6 +1,6 @@ GIT remote: https://github.com/rspec/rspec-core.git - revision: 053fcfeb6b0b6627edf7261737553a6f7df8cc14 + revision: d57c371ee92b16211b80ac7b0b025968438f5297 branch: main specs: rspec-core (3.11.0.pre) @@ -198,7 +198,7 @@ GEM public_suffix (4.0.6) puma (5.5.2) nio4r (~> 2.0) - racc (1.5.2) + racc (1.6.0) rack (2.2.3) rack-mini-profiler (2.3.3) rack (>= 1.2.0) @@ -279,7 +279,7 @@ GEM sass (~> 3.5, >= 3.5.5) scss_lint-govuk (0.2.0) scss_lint - selenium-webdriver (4.0.0) + selenium-webdriver (4.0.3) childprocess (>= 0.5, < 5.0) rexml (~> 3.2, >= 3.2.5) rubyzip (>= 1.2.2) @@ -300,7 +300,7 @@ GEM stimulus-rails (0.7.1) rails (>= 6.0.0) thor (1.1.0) - turbo-rails (7.1.0) + turbo-rails (7.1.1) rails (>= 6.0.0) tzinfo (2.0.4) concurrent-ruby (~> 1.0) @@ -323,7 +323,7 @@ GEM websocket-extensions (0.1.5) xpath (3.2.0) nokogiri (~> 1.8) - zeitwerk (2.4.2) + zeitwerk (2.5.1) PLATFORMS x86_64-darwin-19 diff --git a/app/controllers/case_logs_controller.rb b/app/controllers/case_logs_controller.rb index c7025e1a7..0a6cbea54 100644 --- a/app/controllers/case_logs_controller.rb +++ b/app/controllers/case_logs_controller.rb @@ -15,7 +15,7 @@ class CaseLogsController < ApplicationController if case_log.persisted? render json: case_log, status: :created else - render json: { errors: case_log.errors.full_messages }, status: :unprocessable_entity + render json: { errors: case_log.errors.messages }, status: :unprocessable_entity end end end @@ -26,7 +26,7 @@ class CaseLogsController < ApplicationController if case_log.update(api_case_log_params) render json: case_log, status: :ok else - render json: { errors: case_log.errors.full_messages }, status: :unprocessable_entity + render json: { errors: case_log.errors.messages }, status: :unprocessable_entity end else render json: { error: "Case Log #{params[:id]} not found" }, status: :not_found @@ -74,7 +74,7 @@ class CaseLogsController < ApplicationController if case_log.discard head :no_content else - render json: { errors: case_log.errors.full_messages }, status: :unprocessable_entity + render json: { errors: case_log.errors.messages }, status: :unprocessable_entity end else render json: { error: "Case Log #{params[:id]} not found" }, status: :not_found diff --git a/app/models/case_log.rb b/app/models/case_log.rb index 8fad9709c..a70dff945 100644 --- a/app/models/case_log.rb +++ b/app/models/case_log.rb @@ -5,26 +5,26 @@ class CaseLogValidator < ActiveModel::Validator def validate_tenant_age(record) if record.tenant_age && !/^[1-9][0-9]?$|^120$/.match?(record.tenant_age.to_s) - record.errors.add :tenant_age, "must be between 0 and 120" + record.errors.add :tenant_age, "Tenant age must be between 0 and 120" end end def validate_property_number_of_times_relet(record) if record.property_number_of_times_relet && !/^[1-9]$|^0[1-9]$|^1[0-9]$|^20$/.match?(record.property_number_of_times_relet.to_s) - record.errors.add :property_number_of_times_relet, "must be between 0 and 20" + record.errors.add :property_number_of_times_relet, "Must be between 0 and 20" end end def validate_reasonable_preference(record) if record.homelessness == "No" && record.reasonable_preference == "Yes" - record.errors.add :reasonable_preference, "can not be Yes if Not Homeless immediately prior to this letting has been selected" + record.errors.add :reasonable_preference, "Can not be Yes if Not Homeless immediately prior to this letting has been selected" elsif record.reasonable_preference == "Yes" if !record.reasonable_preference_reason_homeless && !record.reasonable_preference_reason_unsatisfactory_housing && !record.reasonable_preference_reason_medical_grounds && !record.reasonable_preference_reason_avoid_hardship && !record.reasonable_preference_reason_do_not_know - record.errors.add :reasonable_preference_reason, "- if reasonable preference is Yes, a reason must be given" + record.errors.add :reasonable_preference_reason, "If reasonable preference is Yes, a reason must be given" end elsif record.reasonable_preference == "No" if record.reasonable_preference_reason_homeless || record.reasonable_preference_reason_unsatisfactory_housing || record.reasonable_preference_reason_medical_grounds || record.reasonable_preference_reason_avoid_hardship || record.reasonable_preference_reason_do_not_know - record.errors.add :reasonable_preference_reason, "- if reasonable preference is No, no reasons should be given" + record.errors.add :reasonable_preference_reason, "If reasonable preference is No, no reasons should be given" end end end diff --git a/docs/api/DLUHC-CORE-Data.v1.json b/docs/api/DLUHC-CORE-Data.v1.json index 8a2b02fc7..015e98a07 100644 --- a/docs/api/DLUHC-CORE-Data.v1.json +++ b/docs/api/DLUHC-CORE-Data.v1.json @@ -108,9 +108,11 @@ "examples": { "Invalid Age": { "value": { - "errors": [ - "Tenant age must be between 0 and 120" - ] + "errors": { + "tenant_age": [ + "Tenant age must be between 0 and 120" + ] + } } } } @@ -211,11 +213,16 @@ "properties": {} }, "examples": { - "Invalid Age": { + "Invalid Age & Reasonable Preference": { "value": { - "errors": [ - "Tenant age must be between 0 and 120" - ] + "errors": { + "reasonable_preference_reason": [ + "If reasonable preference is Yes, a reason must be given" + ], + "tenant_age": [ + "Tenant age must be between 0 and 120" + ] + } } } } diff --git a/spec/requests/case_log_controller_spec.rb b/spec/requests/case_log_controller_spec.rb index dc67b76e1..89a5592b4 100644 --- a/spec/requests/case_log_controller_spec.rb +++ b/spec/requests/case_log_controller_spec.rb @@ -66,7 +66,7 @@ RSpec.describe CaseLogsController, type: :request do it "validates case log parameters" do json_response = JSON.parse(response.body) expect(response).to have_http_status(:unprocessable_entity) - expect(json_response["errors"]).to match_array(["Tenant age must be between 0 and 120", "Property number of times relet must be between 0 and 20"]) + expect(json_response["errors"]).to match_array([["property_number_of_times_relet", ["Must be between 0 and 20"]], ["tenant_age", ["Tenant age must be between 0 and 120"]]]) end end @@ -157,7 +157,7 @@ RSpec.describe CaseLogsController, type: :request do it "returns an error message" do json_response = JSON.parse(response.body) - expect(json_response["errors"]).to eq(["Tenant age must be between 0 and 120"]) + expect(json_response["errors"]).to eq({ "tenant_age" => ["Tenant age must be between 0 and 120"] }) end end