From 42f88a2672de7639ed6725ec67f69f5fe3a8b75a Mon Sep 17 00:00:00 2001 From: Kat Date: Thu, 24 Nov 2022 13:53:26 +0000 Subject: [PATCH] refactor --- app/models/validations/date_validations.rb | 30 +++-------- app/models/validations/setup_validations.rb | 51 +++++-------------- config/locales/en.yml | 4 +- .../validations/date_validations_spec.rb | 2 +- .../validations/setup_validations_spec.rb | 4 +- 5 files changed, 26 insertions(+), 65 deletions(-) diff --git a/app/models/validations/date_validations.rb b/app/models/validations/date_validations.rb index 813464a2c..aab7e97b0 100644 --- a/app/models/validations/date_validations.rb +++ b/app/models/validations/date_validations.rb @@ -61,29 +61,13 @@ module Validations::DateValidations end location_status_during_startdate = status_during_startdate(record.startdate, record.location&.location_deactivation_periods, record.location&.available_from) - if location_status_during_startdate.present? && location_status_during_startdate[:status] == :deactivated - record.errors.add :startdate, I18n.t("validations.setup.startdate.during_deactivated_location", postcode: record.location.postcode, date: location_status_during_startdate[:date].to_formatted_s(:govuk_date)) - end - - if location_status_during_startdate.present? && location_status_during_startdate[:status] == :reactivating_soon - record.errors.add :startdate, I18n.t("validations.setup.startdate.location_reactivating_soon", postcode: record.location.postcode, date: location_status_during_startdate[:date].to_formatted_s(:govuk_date), deactivation_date: location_status_during_startdate[:deactivation_date].to_formatted_s(:govuk_date)) - end - - if location_status_during_startdate.present? && location_status_during_startdate[:status] == :activating_soon - record.errors.add :startdate, I18n.t("validations.setup.startdate.location_activating_soon", postcode: record.location.postcode, date: location_status_during_startdate[:date].to_formatted_s(:govuk_date)) + if location_status_during_startdate.present? + record.errors.add :startdate, I18n.t("validations.setup.startdate.location_#{location_status_during_startdate[:status]}", postcode: record.location.postcode, date: location_status_during_startdate[:date].to_formatted_s(:govuk_date), deactivation_date: location_status_during_startdate[:deactivation_date]&.to_formatted_s(:govuk_date)) end scheme_status_during_startdate = status_during_startdate(record.startdate, record.scheme&.scheme_deactivation_periods, record.scheme&.available_from) - if scheme_status_during_startdate.present? && scheme_status_during_startdate[:status] == :deactivated - record.errors.add :startdate, I18n.t("validations.setup.startdate.during_deactivated_scheme", name: record.scheme.service_name, date: scheme_status_during_startdate[:date].to_formatted_s(:govuk_date)) - end - - if scheme_status_during_startdate.present? && scheme_status_during_startdate[:status] == :reactivating_soon - record.errors.add :startdate, I18n.t("validations.setup.startdate.scheme_reactivating_soon", name: record.scheme.service_name, date: scheme_status_during_startdate[:date].to_formatted_s(:govuk_date), deactivation_date: scheme_status_during_startdate[:deactivation_date].to_formatted_s(:govuk_date)) - end - - if scheme_status_during_startdate.present? && scheme_status_during_startdate[:status] == :activating_soon - record.errors.add :startdate, I18n.t("validations.setup.startdate.scheme_activating_soon", name: record.scheme.service_name, date: scheme_status_during_startdate[:date].to_formatted_s(:govuk_date)) + if scheme_status_during_startdate.present? + record.errors.add :startdate, I18n.t("validations.setup.startdate.scheme_#{scheme_status_during_startdate[:status]}", name: record.scheme.service_name, date: scheme_status_during_startdate[:date].to_formatted_s(:govuk_date), deactivation_date: scheme_status_during_startdate[:deactivation_date]&.to_formatted_s(:govuk_date)) end end @@ -122,10 +106,10 @@ private return if date.blank? closest_reactivation = deactivation_periods.reverse.find { |period| period.reactivation_date.present? && date.between?(period.deactivation_date, period.reactivation_date - 1.day) } if deactivation_periods.present? - return { status: :reactivating_soon, date: closest_reactivation.reactivation_date, deactivation_date: closest_reactivation.deactivation_date } if closest_reactivation.present? - return { status: :activating_soon, date: available_from } if available_from.present? && available_from > date + return { status: "reactivating_soon", date: closest_reactivation.reactivation_date, deactivation_date: closest_reactivation.deactivation_date } if closest_reactivation.present? + return { status: "activating_soon", date: available_from } if available_from.present? && available_from > date open_deactivation = deactivation_periods.deactivations_without_reactivation.first if deactivation_periods.present? - return { status: :deactivated, date: open_deactivation.deactivation_date } if open_deactivation.present? && open_deactivation.deactivation_date <= date + return { status: "deactivated", date: open_deactivation.deactivation_date } if open_deactivation.present? && open_deactivation.deactivation_date <= date end end diff --git a/app/models/validations/setup_validations.rb b/app/models/validations/setup_validations.rb index 525a44295..8075c3010 100644 --- a/app/models/validations/setup_validations.rb +++ b/app/models/validations/setup_validations.rb @@ -6,45 +6,15 @@ module Validations::SetupValidations end def validate_location(record) - location_status_during_startdate = status_during_startdate(record.startdate, record.location&.location_deactivation_periods, record.location&.available_from) - if location_status_during_startdate.present? && location_status_during_startdate[:status] == :deactivated - record.errors.add :location_id, I18n.t("validations.setup.startdate.during_deactivated_location", postcode: record.location.postcode, date: location_status_during_startdate[:date].to_formatted_s(:govuk_date)) - end - - if location_status_during_startdate.present? && location_status_during_startdate[:status] == :reactivating_soon - record.errors.add :location_id, I18n.t("validations.setup.startdate.location_reactivating_soon", postcode: record.location.postcode, date: location_status_during_startdate[:date].to_formatted_s(:govuk_date), deactivation_date: location_status_during_startdate[:deactivation_date].to_formatted_s(:govuk_date)) - end - - if location_status_during_startdate.present? && location_status_during_startdate[:status] == :activating_soon - record.errors.add :location_id, I18n.t("validations.setup.startdate.location_activating_soon", postcode: record.location.postcode, date: location_status_during_startdate[:date].to_formatted_s(:govuk_date)) - end + validate_location_during_startdate(record, :location_id) end def validate_scheme(record) - location_status_during_startdate = status_during_startdate(record.startdate, record.location&.location_deactivation_periods, record.location&.available_from) - if location_status_during_startdate.present? && location_status_during_startdate[:status] == :deactivated - record.errors.add :scheme_id, I18n.t("validations.setup.startdate.during_deactivated_location", postcode: record.location.postcode, date: location_status_during_startdate[:date].to_formatted_s(:govuk_date)) - end - - if location_status_during_startdate.present? && location_status_during_startdate[:status] == :reactivating_soon - record.errors.add :scheme_id, I18n.t("validations.setup.startdate.location_reactivating_soon", postcode: record.location.postcode, date: location_status_during_startdate[:date].to_formatted_s(:govuk_date), deactivation_date: location_status_during_startdate[:deactivation_date].to_formatted_s(:govuk_date)) - end - - if location_status_during_startdate.present? && location_status_during_startdate[:status] == :activating_soon - record.errors.add :scheme_id, I18n.t("validations.setup.startdate.location_activating_soon", postcode: record.location.postcode, date: location_status_during_startdate[:date].to_formatted_s(:govuk_date)) - end + validate_location_during_startdate(record, :scheme_id) scheme_status_during_startdate = status_during_startdate(record.startdate, record.scheme&.scheme_deactivation_periods, record.scheme&.available_from) - if scheme_status_during_startdate.present? && scheme_status_during_startdate[:status] == :deactivated - record.errors.add :scheme_id, I18n.t("validations.setup.startdate.during_deactivated_scheme", name: record.scheme.service_name, date: scheme_status_during_startdate[:date].to_formatted_s(:govuk_date)) - end - - if scheme_status_during_startdate.present? && scheme_status_during_startdate[:status] == :reactivating_soon - record.errors.add :scheme_id, I18n.t("validations.setup.startdate.scheme_reactivating_soon", name: record.scheme.service_name, date: scheme_status_during_startdate[:date].to_formatted_s(:govuk_date), deactivation_date: scheme_status_during_startdate[:deactivation_date].to_formatted_s(:govuk_date)) - end - - if scheme_status_during_startdate.present? && scheme_status_during_startdate[:status] == :activating_soon - record.errors.add :scheme_id, I18n.t("validations.setup.startdate.scheme_activating_soon", name: record.scheme.service_name, date: scheme_status_during_startdate[:date].to_formatted_s(:govuk_date)) + if scheme_status_during_startdate.present? + record.errors.add :scheme_id, I18n.t("validations.setup.startdate.scheme_#{scheme_status_during_startdate[:status]}", name: record.scheme.service_name, date: scheme_status_during_startdate[:date].to_formatted_s(:govuk_date), deactivation_date: scheme_status_during_startdate[:deactivation_date]&.to_formatted_s(:govuk_date)) end end @@ -58,10 +28,17 @@ private return if date.blank? closest_reactivation = deactivation_periods.reverse.find { |period| period.reactivation_date.present? && date.between?(period.deactivation_date, period.reactivation_date - 1.day) } if deactivation_periods.present? - return { status: :reactivating_soon, date: closest_reactivation.reactivation_date, deactivation_date: closest_reactivation.deactivation_date } if closest_reactivation.present? - return { status: :activating_soon, date: available_from } if available_from.present? && available_from > date + return { status: "reactivating_soon", date: closest_reactivation.reactivation_date, deactivation_date: closest_reactivation.deactivation_date } if closest_reactivation.present? + return { status: "activating_soon", date: available_from } if available_from.present? && available_from > date open_deactivation = deactivation_periods.deactivations_without_reactivation.first if deactivation_periods.present? - return { status: :deactivated, date: open_deactivation.deactivation_date } if open_deactivation.present? && open_deactivation.deactivation_date <= date + return { status: "deactivated", date: open_deactivation.deactivation_date } if open_deactivation.present? && open_deactivation.deactivation_date <= date + end + + def validate_location_during_startdate(record, field) + location_status_during_startdate = status_during_startdate(record.startdate, record.location&.location_deactivation_periods, record.location&.available_from) + if location_status_during_startdate.present? + record.errors.add field, I18n.t("validations.setup.startdate.location_#{location_status_during_startdate[:status]}", postcode: record.location.postcode, date: location_status_during_startdate[:date].to_formatted_s(:govuk_date), deactivation_date: location_status_during_startdate[:deactivation_date]&.to_formatted_s(:govuk_date)) + end end end diff --git a/config/locales/en.yml b/config/locales/en.yml index 176e794ae..3569b0c61 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -120,10 +120,10 @@ en: before_scheme_end_date: "The tenancy start date must be before the end date for this supported housing scheme" after_void_date: "Enter a tenancy start date that is after the void date" after_major_repair_date: "Enter a tenancy start date that is after the major repair date" - during_deactivated_location: "The location %{postcode} was deactivated on %{date} and was not available on the day you entered." + location_deactivated: "The location %{postcode} was deactivated on %{date} and was not available on the day you entered." location_reactivating_soon: "The location %{postcode} was deactivated on %{deactivation_date} and is not available on the date you entered. It reactivates on %{date}" location_activating_soon: "The location %{postcode} is not available until %{date}. Enter a tenancy start date after %{date}" - during_deactivated_scheme: "%{name} was deactivated on %{date} and was not available on the day you entered" + scheme_deactivated: "%{name} was deactivated on %{date} and was not available on the day you entered" scheme_reactivating_soon: "%{name} was deactivated on %{deactivation_date} and is not available on the date you entered. It reactivates on %{date}" scheme_activating_soon: "%{name} is not available until %{date}. Enter a tenancy start date after %{date}" diff --git a/spec/models/validations/date_validations_spec.rb b/spec/models/validations/date_validations_spec.rb index 3fcc9d4cc..3a00542a9 100644 --- a/spec/models/validations/date_validations_spec.rb +++ b/spec/models/validations/date_validations_spec.rb @@ -98,7 +98,7 @@ RSpec.describe Validations::DateValidations do record.location = location date_validator.validate_startdate(record) expect(record.errors["startdate"]) - .to include(match I18n.t("validations.setup.startdate.during_deactivated_location", postcode: location.postcode, date: "4 June 2022")) + .to include(match I18n.t("validations.setup.startdate.location_deactivated", postcode: location.postcode, date: "4 June 2022")) end it "produces no error when tenancy start date is during an active location period" do diff --git a/spec/models/validations/setup_validations_spec.rb b/spec/models/validations/setup_validations_spec.rb index 1213b0841..f8cb2e671 100644 --- a/spec/models/validations/setup_validations_spec.rb +++ b/spec/models/validations/setup_validations_spec.rb @@ -46,7 +46,7 @@ RSpec.describe Validations::SetupValidations do record.location = location setup_validator.validate_scheme(record) expect(record.errors["scheme_id"]) - .to include(match I18n.t("validations.setup.startdate.during_deactivated_location", postcode: location.postcode, date: "4 June 2022")) + .to include(match I18n.t("validations.setup.startdate.location_deactivated", postcode: location.postcode, date: "4 June 2022")) end it "produces no error when tenancy start date is during an active location period" do @@ -168,7 +168,7 @@ RSpec.describe Validations::SetupValidations do record.location = location setup_validator.validate_location(record) expect(record.errors["location_id"]) - .to include(match I18n.t("validations.setup.startdate.during_deactivated_location", postcode: location.postcode, date: "4 June 2022")) + .to include(match I18n.t("validations.setup.startdate.location_deactivated", postcode: location.postcode, date: "4 June 2022")) end it "produces no error when tenancy start date is during an active location period" do