From e5395c9c10318481ebecdc71b4dea97731f9f2a6 Mon Sep 17 00:00:00 2001 From: Kat Date: Mon, 21 Nov 2022 15:58:54 +0000 Subject: [PATCH] refactor validations --- app/models/location_deactivation_period.rb | 37 +++++++++++++++------- 1 file changed, 25 insertions(+), 12 deletions(-) diff --git a/app/models/location_deactivation_period.rb b/app/models/location_deactivation_period.rb index 9cb7e6860..dcf347d24 100644 --- a/app/models/location_deactivation_period.rb +++ b/app/models/location_deactivation_period.rb @@ -1,12 +1,33 @@ class LocationDeactivationPeriodValidator < ActiveModel::Validator def validate(record) location = record.location - recent_deactivation = location.location_deactivation_periods.deactivations_without_reactivation.first - if record.deactivation_date.blank? && recent_deactivation.nil? || recent_deactivation && record.reactivation_date.blank? - if record.deactivation_date_type.blank? && record.reactivation_date_type.blank? + if recent_deactivation.present? + validate_reactivation(record, recent_deactivation, location) + else + validate_deactivation(record, location) + end + end + + def validate_reactivation(record, recent_deactivation, location) + if record.reactivation_date.blank? + if record.reactivation_date_type.blank? + record.errors.add(:reactivation_date_type, message: I18n.t("validations.location.toggle_date.not_selected")) + elsif record.reactivation_date_type == "other" + record.errors.add(:reactivation_date, message: I18n.t("validations.location.toggle_date.invalid")) + end + elsif !record.reactivation_date.between?(location.available_from, Time.zone.local(2200, 1, 1)) + record.errors.add(:reactivation_date, message: I18n.t("validations.location.toggle_date.out_of_range", date: location.available_from.to_formatted_s(:govuk_date))) + elsif record.reactivation_date < recent_deactivation.deactivation_date + record.errors.add(:reactivation_date, message: I18n.t("validations.location.reactivation.before_deactivation", date: recent_deactivation.deactivation_date.to_formatted_s(:govuk_date))) + end + end + + def validate_deactivation(record, location) + if record.deactivation_date.blank? + if record.deactivation_date_type.blank? record.errors.add(:deactivation_date_type, message: I18n.t("validations.location.toggle_date.not_selected")) - elsif record.deactivation_date_type == "other" || record.reactivation_date_type == "other" + elsif record.deactivation_date_type == "other" record.errors.add(:deactivation_date, message: I18n.t("validations.location.toggle_date.invalid")) end elsif location.location_deactivation_periods.any? { |period| period.reactivation_date.present? && record.deactivation_date.between?(period.deactivation_date, period.reactivation_date - 1.day) } @@ -16,14 +37,6 @@ class LocationDeactivationPeriodValidator < ActiveModel::Validator record.errors.add(:deactivation_date, message: I18n.t("validations.location.toggle_date.out_of_range", date: location.available_from.to_formatted_s(:govuk_date))) end end - - if recent_deactivation && record.reactivation_date.present? - if !record.reactivation_date.between?(location.available_from, Time.zone.local(2200, 1, 1)) - record.errors.add(:reactivation_date, message: I18n.t("validations.location.toggle_date.out_of_range", date: location.available_from.to_formatted_s(:govuk_date))) - elsif record.reactivation_date < recent_deactivation.deactivation_date - record.errors.add(:reactivation_date, message: I18n.t("validations.location.reactivation.before_deactivation", date: recent_deactivation.deactivation_date.to_formatted_s(:govuk_date))) - end - end end end