From 6a52923f5bfeb287405fa093f918a7fbb127b77f Mon Sep 17 00:00:00 2001 From: Kat Date: Wed, 23 Nov 2022 15:26:50 +0000 Subject: [PATCH] add diferent error message --- app/models/location.rb | 4 ++-- app/models/scheme.rb | 3 ++- app/models/validations/date_validations.rb | 8 ++++++-- app/models/validations/setup_validations.rb | 18 +++++++++++++++--- config/locales/en.yml | 8 ++++++-- .../validations/date_validations_spec.rb | 10 +++++----- .../validations/setup_validations_spec.rb | 18 +++++++++--------- 7 files changed, 45 insertions(+), 24 deletions(-) diff --git a/app/models/location.rb b/app/models/location.rb index 81e82a9a6..ce9dfa8fa 100644 --- a/app/models/location.rb +++ b/app/models/location.rb @@ -397,8 +397,8 @@ class Location < ApplicationRecord return if date.blank? closest_reactivation = location_deactivation_periods.reverse.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.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 = location_deactivation_periods.deactivations_without_reactivation.first return { status: :deactivated, date: open_deactivation.deactivation_date } if open_deactivation.present? && open_deactivation.deactivation_date < date diff --git a/app/models/scheme.rb b/app/models/scheme.rb index cfbbf0bc0..bab96f716 100644 --- a/app/models/scheme.rb +++ b/app/models/scheme.rb @@ -236,7 +236,8 @@ class Scheme < ApplicationRecord def status_during(date) closest_reactivation = scheme_deactivation_periods.reverse.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: 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 = scheme_deactivation_periods.deactivations_without_reactivation.first return { status: :deactivated, date: open_deactivation.deactivation_date } if open_deactivation.present? && open_deactivation.deactivation_date < date diff --git a/app/models/validations/date_validations.rb b/app/models/validations/date_validations.rb index c52e3d0d9..764bd06ed 100644 --- a/app/models/validations/date_validations.rb +++ b/app/models/validations/date_validations.rb @@ -66,7 +66,11 @@ module Validations::DateValidations 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)) + 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)) end scheme_status_during_startdate = record.scheme&.status_during(record.startdate) @@ -75,7 +79,7 @@ module Validations::DateValidations 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)) + 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 end diff --git a/app/models/validations/setup_validations.rb b/app/models/validations/setup_validations.rb index c14cb38e7..4f5f1b128 100644 --- a/app/models/validations/setup_validations.rb +++ b/app/models/validations/setup_validations.rb @@ -12,7 +12,11 @@ module Validations::SetupValidations end if status_during_startdate.present? && status_during_startdate[:status] == :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)) + 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), deactivation_date: status_during_startdate[:deactivation_date].to_formatted_s(:govuk_date)) + end + + if status_during_startdate.present? && status_during_startdate[:status] == :activating_soon + record.errors.add :location_id, I18n.t("validations.setup.startdate.location_activating_soon", postcode: record.location.postcode, date: status_during_startdate[:date].to_formatted_s(:govuk_date)) end end @@ -23,7 +27,11 @@ module Validations::SetupValidations 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)) + 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 scheme_status_during_startdate = record.scheme&.status_during(record.startdate) @@ -32,7 +40,11 @@ module Validations::SetupValidations 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)) + 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)) end end diff --git a/config/locales/en.yml b/config/locales/en.yml index 2de673472..bd5386896 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -120,8 +120,12 @@ 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_reactivating_soon: "The location %{postcode} is not available until %{date}. Enter a tenancy start date after %{date}" + during_deactivated_location: "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: "The location %{postcode} 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}" property: mrcdate: diff --git a/spec/models/validations/date_validations_spec.rb b/spec/models/validations/date_validations_spec.rb index 328ecccde..3fcc9d4cc 100644 --- a/spec/models/validations/date_validations_spec.rb +++ b/spec/models/validations/date_validations_spec.rb @@ -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")) + .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")) + .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_reactivating_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")) + .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")) + .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 diff --git a/spec/models/validations/setup_validations_spec.rb b/spec/models/validations/setup_validations_spec.rb index d30a8e548..1213b0841 100644 --- a/spec/models/validations/setup_validations_spec.rb +++ b/spec/models/validations/setup_validations_spec.rb @@ -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")) + .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 @@ -83,7 +83,7 @@ RSpec.describe Validations::SetupValidations do end context "with a location with no deactivation periods" do - let(:scheme) { create(:scheme) } + let(:scheme) { create(:scheme, created_at: Time.zone.local(2022, 10, 3)) } let(:location) { create(:location, scheme:, startdate: Time.zone.local(2022, 9, 15)) } it "produces no error" do @@ -98,12 +98,12 @@ 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: "15 September 2022")) + .to include(match I18n.t("validations.setup.startdate.location_activating_soon", postcode: location.postcode, date: "15 September 2022")) end end context "with a scheme that is reactivating soon" do - let(:scheme) { create(:scheme) } + let(:scheme) { create(:scheme, created_at: Time.zone.local(2022, 4, 1)) } before do create(:scheme_deactivation_period, deactivation_date: Time.zone.local(2022, 6, 4), reactivation_date: Time.zone.local(2022, 8, 4), scheme:) @@ -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")) + .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 @@ -127,7 +127,7 @@ RSpec.describe Validations::SetupValidations do end context "with a scheme that has many reactivations soon" do - let(:scheme) { create(:scheme) } + let(:scheme) { create(:scheme, created_at: Time.zone.local(2022, 4, 1)) } before do create(:scheme_deactivation_period, deactivation_date: Time.zone.local(2022, 6, 4), reactivation_date: Time.zone.local(2022, 8, 4), scheme:) @@ -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")) + .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 @@ -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")) + .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_reactivating_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