Browse Source

Refactor status validations

pull/1022/head
Kat 4 years ago
parent
commit
d9bd519797
  1. 1
      app/models/location.rb
  2. 1
      app/models/scheme.rb
  3. 31
      app/models/validations/shared_validations.rb
  4. 14
      config/locales/en.yml
  5. 12
      spec/models/validations/date_validations_spec.rb
  6. 16
      spec/models/validations/setup_validations_spec.rb

1
app/models/location.rb

@ -389,6 +389,7 @@ class Location < ApplicationRecord
:active
end
alias_method :status_at, :status
def active?
status == :active

1
app/models/scheme.rb

@ -229,6 +229,7 @@ class Scheme < ApplicationRecord
:active
end
alias_method :status_at, :status
def active?
status == :active

31
app/models/validations/shared_validations.rb

@ -35,38 +35,37 @@ module Validations::SharedValidations
end
def location_during_startdate_validation(record, field)
location_inactive_status = inactive_status(record.startdate, record.location&.available_from, record.location)
location_inactive_status = inactive_status(record.startdate, record.location)
if location_inactive_status.present?
record.errors.add field, I18n.t("validations.setup.startdate.location_#{location_inactive_status[:status]}", postcode: record.location.postcode, date: location_inactive_status[:reactivation_date].to_formatted_s(:govuk_date), deactivation_date: location_inactive_status[:deactivation_date]&.to_formatted_s(:govuk_date))
date, scope, deactivation_date = location_inactive_status.values_at(:date, :scope, :deactivation_date)
record.errors.add field, I18n.t("validations.setup.startdate.location.#{scope}", postcode: record.location.postcode, date:, deactivation_date:)
end
end
def scheme_during_startdate_validation(record, field)
scheme_inactive_status = inactive_status(record.startdate, record.scheme&.available_from, record.scheme)
scheme_inactive_status = inactive_status(record.startdate, record.scheme)
if scheme_inactive_status.present?
record.errors.add field, I18n.t("validations.setup.startdate.scheme_#{scheme_inactive_status[:status]}", name: record.scheme.service_name, date: scheme_inactive_status[:reactivation_date].to_formatted_s(:govuk_date), deactivation_date: scheme_inactive_status[:deactivation_date]&.to_formatted_s(:govuk_date))
date, scope, deactivation_date = scheme_inactive_status.values_at(:date, :scope, :deactivation_date)
record.errors.add field, I18n.t("validations.setup.startdate.scheme.#{scope}", name: record.scheme.service_name, date:, deactivation_date:)
end
end
def inactive_status(date, available_from, resource)
def inactive_status(date, resource)
return if date.blank? || resource.blank?
status = resource.status(date)
status = resource.status_at(date)
return unless %i[reactivating_soon activating_soon deactivated].include?(status)
closest_reactivation = resource.recent_deactivation
open_deactivation = resource.open_deactivation
case status
when :reactivating_soon
reactivation_date = closest_reactivation.reactivation_date
deactivation_date = closest_reactivation.deactivation_date
when :activating_soon
reactivation_date = available_from
when :deactivated
reactivation_date = open_deactivation.deactivation_date
end
date = case status
when :reactivating_soon then closest_reactivation.reactivation_date
when :activating_soon then resource&.available_from
when :deactivated then open_deactivation.deactivation_date
end
{ status:, reactivation_date:, deactivation_date: }
{ scope: status, date: date&.to_formatted_s(:govuk_date), deactivation_date: closest_reactivation&.deactivation_date&.to_formatted_s(:govuk_date) }
end
end

14
config/locales/en.yml

@ -120,12 +120,14 @@ 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"
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}"
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}"
location:
deactivated: "The location %{postcode} was deactivated on %{date} and was not available on the day you entered."
reactivating_soon: "The location %{postcode} was deactivated on %{deactivation_date} and is not available on the date you entered. It reactivates on %{date}"
activating_soon: "The location %{postcode} is not available until %{date}. Enter a tenancy start date after %{date}"
scheme:
deactivated: "%{name} was deactivated on %{date} and was not available on the day you entered"
reactivating_soon: "%{name} was deactivated on %{deactivation_date} and is not available on the date you entered. It reactivates on %{date}"
activating_soon: "%{name} is not available until %{date}. Enter a tenancy start date after %{date}"
property:
mrcdate:

12
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.location_deactivated", 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
@ -123,7 +123,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.location_reactivating_soon", postcode: location.postcode, date: "4 August 2022", deactivation_date: "4 June 2022"))
.to include(match I18n.t("validations.setup.startdate.location.reactivating_soon", postcode: location.postcode, date: "4 August 2022", deactivation_date: "4 June 2022"))
end
it "produces no error when tenancy start date is during an active location period" do
@ -150,7 +150,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.location_reactivating_soon", postcode: location.postcode, date: "4 September 2022", deactivation_date: "1 June 2022"))
.to include(match I18n.t("validations.setup.startdate.location.reactivating_soon", postcode: location.postcode, date: "4 September 2022", deactivation_date: "1 June 2022"))
end
it "produces no error when tenancy start date is during an active location period" do
@ -177,7 +177,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.location_activating_soon", postcode: location.postcode, date: "15 September 2022"))
.to include(match I18n.t("validations.setup.startdate.location.activating_soon", postcode: location.postcode, date: "15 September 2022"))
end
end
@ -194,7 +194,7 @@ RSpec.describe Validations::DateValidations do
record.scheme = scheme
date_validator.validate_startdate(record)
expect(record.errors["startdate"])
.to include(match I18n.t("validations.setup.startdate.scheme_reactivating_soon", name: scheme.service_name, date: "4 August 2022", deactivation_date: "4 June 2022"))
.to include(match I18n.t("validations.setup.startdate.scheme.reactivating_soon", name: scheme.service_name, date: "4 August 2022", deactivation_date: "4 June 2022"))
end
it "produces no error when tenancy start date is during an active scheme period" do
@ -220,7 +220,7 @@ RSpec.describe Validations::DateValidations do
record.scheme = scheme
date_validator.validate_startdate(record)
expect(record.errors["startdate"])
.to include(match I18n.t("validations.setup.startdate.scheme_reactivating_soon", name: scheme.service_name, date: "4 September 2022", deactivation_date: "1 June 2022"))
.to include(match I18n.t("validations.setup.startdate.scheme.reactivating_soon", name: scheme.service_name, date: "4 September 2022", deactivation_date: "1 June 2022"))
end
it "produces no error when tenancy start date is during an active scheme period" do

16
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.location_deactivated", 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
@ -71,7 +71,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.location_reactivating_soon", postcode: location.postcode, date: "4 August 2022", deactivation_date: "4 June 2022"))
.to include(match I18n.t("validations.setup.startdate.location.reactivating_soon", postcode: location.postcode, date: "4 August 2022", deactivation_date: "4 June 2022"))
end
it "produces no error when tenancy start date is during an active location period" do
@ -98,7 +98,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.location_activating_soon", postcode: location.postcode, date: "15 September 2022"))
.to include(match I18n.t("validations.setup.startdate.location.activating_soon", postcode: location.postcode, date: "15 September 2022"))
end
end
@ -115,7 +115,7 @@ RSpec.describe Validations::SetupValidations do
record.scheme = scheme
setup_validator.validate_scheme(record)
expect(record.errors["scheme_id"])
.to include(match I18n.t("validations.setup.startdate.scheme_reactivating_soon", name: scheme.service_name, date: "4 August 2022", deactivation_date: "4 June 2022"))
.to include(match I18n.t("validations.setup.startdate.scheme.reactivating_soon", name: scheme.service_name, date: "4 August 2022", deactivation_date: "4 June 2022"))
end
it "produces no error when tenancy start date is during an active scheme period" do
@ -141,7 +141,7 @@ RSpec.describe Validations::SetupValidations do
record.scheme = scheme
setup_validator.validate_scheme(record)
expect(record.errors["scheme_id"])
.to include(match I18n.t("validations.setup.startdate.scheme_reactivating_soon", name: scheme.service_name, date: "4 September 2022", deactivation_date: "1 June 2022"))
.to include(match I18n.t("validations.setup.startdate.scheme.reactivating_soon", name: scheme.service_name, date: "4 September 2022", deactivation_date: "1 June 2022"))
end
it "produces no error when tenancy start date is during an active scheme 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.location_deactivated", 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
@ -193,7 +193,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.location_reactivating_soon", postcode: location.postcode, date: "4 August 2022", deactivation_date: "4 June 2022"))
.to include(match I18n.t("validations.setup.startdate.location.reactivating_soon", postcode: location.postcode, date: "4 August 2022", deactivation_date: "4 June 2022"))
end
it "produces no error when tenancy start date is during an active location period" do
@ -220,7 +220,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.location_activating_soon", postcode: location.postcode, date: "15 September 2022"))
.to include(match I18n.t("validations.setup.startdate.location.activating_soon", postcode: location.postcode, date: "15 September 2022"))
end
end
end

Loading…
Cancel
Save