From 8ad852454f45bb8a3f56c55cf78ebe85ff8dbad6 Mon Sep 17 00:00:00 2001 From: Matthew Phelan Date: Tue, 19 Oct 2021 10:58:09 +0100 Subject: [PATCH] Why reasonable preference? validation added --- .../conditional_question_controller.js | 5 ++- app/models/case_log.rb | 24 ++++++++++++-- spec/models/case_log_spec.rb | 33 +++++++++++++++++++ 3 files changed, 59 insertions(+), 3 deletions(-) diff --git a/app/javascript/controllers/conditional_question_controller.js b/app/javascript/controllers/conditional_question_controller.js index c49ba490a..9aa6fddee 100644 --- a/app/javascript/controllers/conditional_question_controller.js +++ b/app/javascript/controllers/conditional_question_controller.js @@ -28,7 +28,10 @@ export default class extends Controller { div.style.display = "block" } else { div.style.display = "none" - let buttons = document.getElementsByName(`case_log[${targetQuestion}]`) + let buttons = document.getElementsByName(`case_log[${targetQuestion}]`); + if (buttons.length == 0){ + buttons = document.getElementsByName(`case_log[${targetQuestion}][]`); + } Object.entries(buttons).forEach(([idx, button]) => { button.checked = false; }) diff --git a/app/models/case_log.rb b/app/models/case_log.rb index 46d766ccc..9e8716569 100644 --- a/app/models/case_log.rb +++ b/app/models/case_log.rb @@ -15,13 +15,33 @@ class CaseLogValidator < ActiveModel::Validator end end + def validate_api_reasonable_preference(record) + if 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, "- no resasons can be set to true, if reasonable preference is No" + end + 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 Homesless imediately 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" + end + end + end + def validate(record) # If we've come from the form UI we only want to validate the specific fields # that have just been submitted. If we're submitting a log via API or Bulk Upload # we want to validate all data fields. question_to_validate = options[:previous_page] - if question_to_validate && respond_to?("validate_#{question_to_validate}") - public_send("validate_#{question_to_validate}", record) + if question_to_validate + if respond_to?("validate_#{question_to_validate}") + public_send("validate_#{question_to_validate}", record) + end else # This assumes that all methods in this class other than this one are # validations to be run diff --git a/spec/models/case_log_spec.rb b/spec/models/case_log_spec.rb index 6b0805250..236ddf7dc 100644 --- a/spec/models/case_log_spec.rb +++ b/spec/models/case_log_spec.rb @@ -25,6 +25,39 @@ RSpec.describe Form, type: :model do it "validates number of relets is over 0" do expect { CaseLog.create!(property_number_of_times_relet: 0) }.to raise_error(ActiveRecord::RecordInvalid) end + + describe "reasonable preference validation" do + it "if given reasonable preference is yes a reason must be selected" do + expect { + CaseLog.create!(reasonable_preference: "Yes", + reasonable_preference_reason_homeless: nil, + reasonable_preference_reason_unsatisfactory_housing: nil, + reasonable_preference_reason_medical_grounds: nil, + reasonable_preference_reason_avoid_hardship: nil, + reasonable_preference_reason_do_not_know: nil + ) + }.to raise_error(ActiveRecord::RecordInvalid) + end + + it "if not previously homesless reasonable preference should not be selected" do + expect { + CaseLog.create!( + homelessness: "No", + reasonable_preference: "Yes" + ) + }.to raise_error(ActiveRecord::RecordInvalid) + end + + it "if not given reasonable preference a reason should not be selected" do + expect { + CaseLog.create!( + homelessness: "Yes", + reasonable_preference: "No", + reasonable_preference_reason_homeless: true + ) + }.to raise_error(ActiveRecord::RecordInvalid) + end + end end describe "status" do