Browse Source

return dates for errors

pull/1038/head
Kat 4 years ago
parent
commit
f58ae04054
  1. 7
      app/models/location.rb
  2. 9
      app/models/validations/date_validations.rb
  3. 18
      app/models/validations/setup_validations.rb
  4. 2
      spec/models/validations/date_validations_spec.rb
  5. 12
      spec/models/validations/setup_validations_spec.rb

7
app/models/location.rb

@ -394,10 +394,13 @@ class Location < ApplicationRecord
end end
def status_during(date) def status_during(date)
return :reactivating_soon if location_deactivation_periods.any? { |period| period.reactivation_date.present? && date.between?(period.deactivation_date, period.reactivation_date) } || available_from > date closest_reactivation = location_deactivation_periods.find { |period| period.reactivation_date.present? && date.between?(period.deactivation_date, period.reactivation_date) }
return { status: :reactivating_soon, date: closest_reactivation.reactivation_date } if closest_reactivation.present?
return { status: :reactivating_soon, date: available_from } if available_from > date
open_deactivation = location_deactivation_periods.deactivations_without_reactivation.first open_deactivation = location_deactivation_periods.deactivations_without_reactivation.first
return :deactivated 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
private private

9
app/models/validations/date_validations.rb

@ -60,12 +60,13 @@ module Validations::DateValidations
record.errors.add :startdate, I18n.t("validations.setup.startdate.after_major_repair_date") record.errors.add :startdate, I18n.t("validations.setup.startdate.after_major_repair_date")
end end
if record.location&.status_during(record.startdate) == :deactivated status_during_startdate = record.location&.status_during(record.startdate)
record.errors.add :startdate, I18n.t("validations.setup.startdate.during_deactivated_location", postcode: record.location.postcode, date: "") if status_during_startdate.present? && status_during_startdate[:status] == :deactivated
record.errors.add :startdate, I18n.t("validations.setup.startdate.during_deactivated_location", postcode: record.location.postcode, date: status_during_startdate[:date].to_formatted_s(:govuk_date))
end end
if record.location&.status_during(record.startdate) == :reactivating_soon if status_during_startdate.present? && status_during_startdate[:status] == :reactivating_soon
record.errors.add :startdate, I18n.t("validations.setup.startdate.location_reactivating_soon", postcode: record.location.postcode, date: "") record.errors.add :startdate, I18n.t("validations.setup.startdate.location_reactivating_soon", postcode: record.location.postcode, date: status_during_startdate[:date].to_formatted_s(:govuk_date))
end end
end end

18
app/models/validations/setup_validations.rb

@ -6,22 +6,24 @@ module Validations::SetupValidations
end end
def validate_location(record) def validate_location(record)
if record.location&.status_during(record.startdate) == :deactivated status_during_startdate = record.location&.status_during(record.startdate)
record.errors.add :location_id, I18n.t("validations.setup.startdate.during_deactivated_location") if status_during_startdate.present? && status_during_startdate[:status] == :deactivated
record.errors.add :location_id, I18n.t("validations.setup.startdate.during_deactivated_location", postcode: record.location.postcode, date: status_during_startdate[:date].to_formatted_s(:govuk_date))
end end
if record.location&.status_during(record.startdate) == :reactivating_soon if status_during_startdate.present? && status_during_startdate[:status] == :reactivating_soon
record.errors.add :location_id, I18n.t("validations.setup.startdate.location_reactivating_soon") record.errors.add :location_id, I18n.t("validations.setup.startdate.location_reactivating_soon", postcode: record.location.postcode, date: status_during_startdate[:date].to_formatted_s(:govuk_date))
end end
end end
def validate_scheme(record) def validate_scheme(record)
if record.location&.status_during(record.startdate) == :deactivated status_during_startdate = record.location&.status_during(record.startdate)
record.errors.add :scheme_id, I18n.t("validations.setup.startdate.during_deactivated_location") if status_during_startdate.present? && status_during_startdate[:status] == :deactivated
record.errors.add :scheme_id, I18n.t("validations.setup.startdate.during_deactivated_location", postcode: record.location.postcode, date: status_during_startdate[:date].to_formatted_s(:govuk_date))
end end
if record.location&.status_during(record.startdate) == :reactivating_soon if status_during_startdate.present? && status_during_startdate[:status] == :reactivating_soon
record.errors.add :scheme_id, I18n.t("validations.setup.startdate.location_reactivating_soon") record.errors.add :scheme_id, I18n.t("validations.setup.startdate.location_reactivating_soon", postcode: record.location.postcode, date: status_during_startdate[:date].to_formatted_s(:govuk_date))
end end
end end

2
spec/models/validations/date_validations_spec.rb

@ -98,7 +98,7 @@ RSpec.describe Validations::DateValidations do
record.location = location record.location = location
date_validator.validate_startdate(record) date_validator.validate_startdate(record)
expect(record.errors["startdate"]) expect(record.errors["startdate"])
.to include(match I18n.t("validations.setup.startdate.during_deactivated_location", postcode: location.postcode, date: "6 April 2022")) .to include(match I18n.t("validations.setup.startdate.during_deactivated_location", postcode: location.postcode, date: "4 June 2022"))
end end
it "produces no error when tenancy start date is during an active location period" do it "produces no error when tenancy start date is during an active location period" do

12
spec/models/validations/setup_validations_spec.rb

@ -46,7 +46,7 @@ RSpec.describe Validations::SetupValidations do
record.location = location record.location = location
setup_validator.validate_scheme(record) setup_validator.validate_scheme(record)
expect(record.errors["scheme_id"]) expect(record.errors["scheme_id"])
.to include(match I18n.t("validations.setup.startdate.during_deactivated_location")) .to include(match I18n.t("validations.setup.startdate.during_deactivated_location", postcode: location.postcode, date: "4 June 2022"))
end end
it "produces no error when tenancy start date is during an active location period" do 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 record.location = location
setup_validator.validate_scheme(record) setup_validator.validate_scheme(record)
expect(record.errors["scheme_id"]) expect(record.errors["scheme_id"])
.to include(match I18n.t("validations.setup.startdate.location_reactivating_soon")) .to include(match I18n.t("validations.setup.startdate.location_reactivating_soon", postcode: location.postcode, date: "4 August 2022"))
end end
it "produces no error when tenancy start date is during an active location period" do 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 record.location = location
setup_validator.validate_scheme(record) setup_validator.validate_scheme(record)
expect(record.errors["scheme_id"]) expect(record.errors["scheme_id"])
.to include(match I18n.t("validations.setup.startdate.location_reactivating_soon")) .to include(match I18n.t("validations.setup.startdate.location_reactivating_soon", postcode: location.postcode, date: "15 September 2022"))
end end
end end
end end
@ -118,7 +118,7 @@ RSpec.describe Validations::SetupValidations do
record.location = location record.location = location
setup_validator.validate_location(record) setup_validator.validate_location(record)
expect(record.errors["location_id"]) expect(record.errors["location_id"])
.to include(match I18n.t("validations.setup.startdate.during_deactivated_location")) .to include(match I18n.t("validations.setup.startdate.during_deactivated_location", postcode: location.postcode, date: "4 June 2022"))
end end
it "produces no error when tenancy start date is during an active location period" do it "produces no error when tenancy start date is during an active location period" do
@ -143,7 +143,7 @@ RSpec.describe Validations::SetupValidations do
record.location = location record.location = location
setup_validator.validate_location(record) setup_validator.validate_location(record)
expect(record.errors["location_id"]) expect(record.errors["location_id"])
.to include(match I18n.t("validations.setup.startdate.location_reactivating_soon")) .to include(match I18n.t("validations.setup.startdate.location_reactivating_soon", postcode: location.postcode, date: "4 August 2022"))
end end
it "produces no error when tenancy start date is during an active location period" do it "produces no error when tenancy start date is during an active location period" do
@ -170,7 +170,7 @@ RSpec.describe Validations::SetupValidations do
record.location = location record.location = location
setup_validator.validate_location(record) setup_validator.validate_location(record)
expect(record.errors["location_id"]) expect(record.errors["location_id"])
.to include(match I18n.t("validations.setup.startdate.location_reactivating_soon")) .to include(match I18n.t("validations.setup.startdate.location_reactivating_soon", postcode: location.postcode, date: "15 September 2022"))
end end
end end
end end

Loading…
Cancel
Save