From 8a406e0409a5604b49ed4296a94aeb742a7a7a03 Mon Sep 17 00:00:00 2001 From: natdeanlewissoftwire Date: Tue, 4 Jul 2023 10:52:52 +0100 Subject: [PATCH] feat: update tests --- config/locales/en.yml | 3 - .../validations/date_validations_spec.rb | 60 ++++- .../validations/setup_validations_spec.rb | 228 +++++++++++++----- 3 files changed, 223 insertions(+), 68 deletions(-) diff --git a/config/locales/en.yml b/config/locales/en.yml index 645ddf84e..73ced77bf 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -261,9 +261,6 @@ en: deactivated: startdate: "The scheme %{name} was deactivated on %{date} and was not available on the day you entered. Enter a tenancy start date after %{date}" scheme_id: "The scheme %{name} was deactivated on %{date} and was not available on the day you entered. Select another scheme or edit the tenancy start date" - activating_soon: - startdate: "The scheme %{name} is not available until %{date}. Enter a tenancy start date after %{date}" - scheme_id: "The scheme %{name} is not available until %{date}. Select another scheme or edit the tenancy start date" reactivating_soon: startdate: "The scheme %{name} is not available until %{date}. Enter a tenancy start date after %{date}" scheme_id: "The scheme %{name} is not available until %{date}. Select another scheme or edit the tenancy start date" diff --git a/spec/models/validations/date_validations_spec.rb b/spec/models/validations/date_validations_spec.rb index b9c747e9c..840b44c5d 100644 --- a/spec/models/validations/date_validations_spec.rb +++ b/spec/models/validations/date_validations_spec.rb @@ -78,7 +78,9 @@ 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.startdate", postcode: location.postcode, date: "4 June 2022")) + expect(record.errors["location_id"]) + .to include(match I18n.t("validations.setup.startdate.location.deactivated.location_id", postcode: location.postcode, date: "4 June 2022")) end it "produces no error when tenancy start date is during an active location period" do @@ -86,6 +88,7 @@ RSpec.describe Validations::DateValidations do record.location = location date_validator.validate_startdate(record) expect(record.errors["startdate"]).to be_empty + expect(record.errors["location_id"]).to be_empty end end @@ -103,7 +106,9 @@ 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.startdate", postcode: location.postcode, date: "4 August 2022")) + expect(record.errors["location_id"]) + .to include(match I18n.t("validations.setup.startdate.location.reactivating_soon.location_id", postcode: location.postcode, date: "4 August 2022")) end it "produces no error when tenancy start date is during an active location period" do @@ -111,6 +116,7 @@ RSpec.describe Validations::DateValidations do record.location = location date_validator.validate_startdate(record) expect(record.errors["startdate"]).to be_empty + expect(record.errors["location_id"]).to be_empty end end @@ -130,7 +136,9 @@ 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.startdate", postcode: location.postcode, date: "4 September 2022")) + expect(record.errors["location_id"]) + .to include(match I18n.t("validations.setup.startdate.location.reactivating_soon.location_id", postcode: location.postcode, date: "4 September 2022")) end it "produces no error when tenancy start date is during an active location period" do @@ -138,10 +146,11 @@ RSpec.describe Validations::DateValidations do record.location = location date_validator.validate_startdate(record) expect(record.errors["startdate"]).to be_empty + expect(record.errors["location_id"]).to be_empty end end - context "with a location with no deactivation periods" do + context "with a location that is activating soon (has no deactivation periods)" do let(:scheme) { create(:scheme) } let(:location) { create(:location, scheme:, startdate: Time.zone.local(2022, 9, 15)) } @@ -150,6 +159,7 @@ RSpec.describe Validations::DateValidations do record.location = location date_validator.validate_startdate(record) expect(record.errors["startdate"]).to be_empty + expect(record.errors["location_id"]).to be_empty end it "produces an error when the date is before available_from date" do @@ -157,7 +167,37 @@ 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.startdate", postcode: location.postcode, date: "15 September 2022")) + expect(record.errors["location_id"]) + .to include(match I18n.t("validations.setup.startdate.location.activating_soon.location_id", postcode: location.postcode, date: "15 September 2022")) + end + end + + context "with a deactivated scheme" do + let(:scheme) { create(:scheme) } + + before do + create(:location, scheme:) + create(:scheme_deactivation_period, deactivation_date: Time.zone.local(2022, 6, 4), scheme:) + scheme.reload + end + + it "produces error when tenancy start date is during deactivated scheme period" do + record.startdate = Time.zone.local(2022, 7, 5) + record.scheme = scheme + date_validator.validate_startdate(record) + expect(record.errors["startdate"]) + .to include(match I18n.t("validations.setup.startdate.scheme.deactivated.startdate", name: scheme.service_name, date: "4 June 2022")) + expect(record.errors["scheme_id"]) + .to include(match I18n.t("validations.setup.startdate.scheme.deactivated.scheme_id", name: scheme.service_name, date: "4 June 2022")) + end + + it "produces no error when tenancy start date is during an active scheme period" do + record.startdate = Time.zone.local(2022, 6, 1) + record.scheme = scheme + date_validator.validate_startdate(record) + expect(record.errors["startdate"]).to be_empty + expect(record.errors["scheme_id"]).to be_empty end end @@ -175,7 +215,9 @@ 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.startdate", name: scheme.service_name, date: "4 August 2022")) + expect(record.errors["scheme_id"]) + .to include(match I18n.t("validations.setup.startdate.scheme.reactivating_soon.scheme_id", name: scheme.service_name, date: "4 August 2022")) end it "produces no error when tenancy start date is during an active scheme period" do @@ -183,6 +225,7 @@ RSpec.describe Validations::DateValidations do record.scheme = scheme date_validator.validate_startdate(record) expect(record.errors["startdate"]).to be_empty + expect(record.errors["scheme_id"]).to be_empty end end @@ -202,7 +245,9 @@ 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.startdate", name: scheme.service_name, date: "4 September 2022")) + expect(record.errors["scheme_id"]) + .to include(match I18n.t("validations.setup.startdate.scheme.reactivating_soon.scheme_id", name: scheme.service_name, date: "4 September 2022")) end it "produces no error when tenancy start date is during an active scheme period" do @@ -210,6 +255,7 @@ RSpec.describe Validations::DateValidations do record.scheme = scheme date_validator.validate_startdate(record) expect(record.errors["startdate"]).to be_empty + expect(record.errors["scheme_id"]).to be_empty end end end diff --git a/spec/models/validations/setup_validations_spec.rb b/spec/models/validations/setup_validations_spec.rb index 696667b43..df6bae993 100644 --- a/spec/models/validations/setup_validations_spec.rb +++ b/spec/models/validations/setup_validations_spec.rb @@ -156,125 +156,198 @@ RSpec.describe Validations::SetupValidations do end describe "#validate_scheme" do - context "with a deactivated location" do + context "with a deactivated scheme" do let(:scheme) { create(:scheme) } - let(:location) { create(:location, scheme:) } before do - create(:location_deactivation_period, deactivation_date: Time.zone.local(2022, 6, 4), location:) - location.reload + create(:location, scheme:) + create(:scheme_deactivation_period, deactivation_date: Time.zone.local(2022, 6, 4), scheme:) + scheme.reload end - it "produces error when tenancy start date is during deactivated location period" do + it "produces error when tenancy start date is during deactivated scheme period" do record.startdate = Time.zone.local(2022, 7, 5) - record.location = location + record.scheme = scheme setup_validator.validate_scheme(record) + expect(record.errors["startdate"]) + .to include(match I18n.t("validations.setup.startdate.scheme.deactivated.startdate", name: scheme.service_name, date: "4 June 2022")) 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.scheme.deactivated.scheme_id", name: scheme.service_name, date: "4 June 2022")) 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 scheme period" do record.startdate = Time.zone.local(2022, 6, 1) - record.location = location + record.scheme = scheme setup_validator.validate_scheme(record) + expect(record.errors["startdate"]).to be_empty expect(record.errors["scheme_id"]).to be_empty end end - context "with a location that is reactivating soon" do + context "with a scheme that is reactivating soon" do let(:scheme) { create(:scheme) } - let(:location) { create(:location, scheme:) } before do - create(:location_deactivation_period, deactivation_date: Time.zone.local(2022, 6, 4), reactivation_date: Time.zone.local(2022, 8, 4), location:) - location.reload + create(:location, scheme:) + create(:scheme_deactivation_period, deactivation_date: Time.zone.local(2022, 6, 4), reactivation_date: Time.zone.local(2022, 8, 4), scheme:) + scheme.reload end - it "produces error when tenancy start date is during deactivated location period" do + it "produces error when tenancy start date is during deactivated scheme period" do record.startdate = Time.zone.local(2022, 7, 5) - record.location = location + record.scheme = scheme setup_validator.validate_scheme(record) + expect(record.errors["startdate"]) + .to include(match I18n.t("validations.setup.startdate.scheme.reactivating_soon.startdate", name: scheme.service_name, date: "4 August 2022")) 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.scheme.reactivating_soon.scheme_id", name: scheme.service_name, date: "4 August 2022")) 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 scheme period" do record.startdate = Time.zone.local(2022, 9, 1) - record.location = location + record.scheme = scheme setup_validator.validate_scheme(record) + expect(record.errors["startdate"]).to be_empty expect(record.errors["scheme_id"]).to be_empty end end - context "with a location with no deactivation periods" do - let(:scheme) { create(:scheme, created_at: Time.zone.local(2022, 10, 3)) } - let(:location) { create(:location, scheme:, startdate: Time.zone.local(2022, 9, 15)) } + context "with a scheme that has many reactivations soon" do + let(:scheme) { create(:scheme) } - it "produces no error" do - record.startdate = Time.zone.local(2022, 10, 15) - record.location = location + before do + create(:location, scheme:) + create(:scheme_deactivation_period, deactivation_date: Time.zone.local(2022, 6, 4), reactivation_date: Time.zone.local(2022, 8, 4), scheme:) + create(:scheme_deactivation_period, deactivation_date: Time.zone.local(2022, 6, 2), reactivation_date: Time.zone.local(2022, 8, 3), scheme:) + create(:scheme_deactivation_period, deactivation_date: Time.zone.local(2022, 6, 1), reactivation_date: Time.zone.local(2022, 9, 4), scheme:) + scheme.reload + end + + it "produces error when tenancy start date is during deactivated scheme period" do + record.startdate = Time.zone.local(2022, 7, 5) + record.scheme = scheme + setup_validator.validate_scheme(record) + expect(record.errors["startdate"]) + .to include(match I18n.t("validations.setup.startdate.scheme.reactivating_soon.startdate", name: scheme.service_name, date: "4 September 2022")) + expect(record.errors["scheme_id"]) + .to include(match I18n.t("validations.setup.startdate.scheme.reactivating_soon.scheme_id", name: scheme.service_name, date: "4 September 2022")) + end + + it "produces no error when tenancy start date is during an active scheme period" do + record.startdate = Time.zone.local(2022, 10, 1) + record.scheme = scheme setup_validator.validate_scheme(record) + expect(record.errors["startdate"]).to be_empty expect(record.errors["scheme_id"]).to be_empty end + end - it "produces an error when the date is before available_from date" do - record.startdate = Time.zone.local(2022, 8, 15) + context "with a deactivated location" do + let(:scheme) { create(:scheme) } + let(:location) { create(:location, scheme:) } + + before do + create(:location_deactivation_period, deactivation_date: Time.zone.local(2022, 6, 4), location:) + location.reload + end + + it "produces error when tenancy start date is during deactivated location period" do + record.startdate = Time.zone.local(2022, 7, 5) 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")) + expect(record.errors["startdate"]) + .to include(match I18n.t("validations.setup.startdate.location.deactivated.startdate", postcode: location.postcode, date: "4 June 2022")) + expect(record.errors["location_id"]) + .to include(match I18n.t("validations.setup.startdate.location.deactivated.location_id", postcode: location.postcode, date: "4 June 2022")) + end + + it "produces no error when tenancy start date is during an active location period" do + record.startdate = Time.zone.local(2022, 6, 1) + record.location = location + setup_validator.validate_scheme(record) + expect(record.errors["startdate"]).to be_empty + expect(record.errors["location_id"]).to be_empty end end - context "with a scheme that is reactivating soon" do - let(:scheme) { create(:scheme, created_at: Time.zone.local(2022, 4, 1)) } + context "with a location that is reactivating soon" do + let(:scheme) { create(:scheme) } + let(:location) { create(:location, scheme:) } before do - create(:location, scheme:) - create(:scheme_deactivation_period, deactivation_date: Time.zone.local(2022, 6, 4), reactivation_date: Time.zone.local(2022, 8, 4), scheme:) - scheme.reload + create(:location_deactivation_period, deactivation_date: Time.zone.local(2022, 6, 4), reactivation_date: Time.zone.local(2022, 8, 4), location:) + location.reload end - it "produces error when tenancy start date is during deactivated scheme period" do + it "produces error when tenancy start date is during deactivated location period" do record.startdate = Time.zone.local(2022, 7, 5) - record.scheme = scheme + record.location = location 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")) + expect(record.errors["startdate"]) + .to include(match I18n.t("validations.setup.startdate.location.reactivating_soon.startdate", postcode: location.postcode, date: "4 August 2022")) + expect(record.errors["location_id"]) + .to include(match I18n.t("validations.setup.startdate.location.reactivating_soon.location_id", postcode: location.postcode, date: "4 August 2022")) end - it "produces no error when tenancy start date is during an active scheme period" do + it "produces no error when tenancy start date is during an active location period" do record.startdate = Time.zone.local(2022, 9, 1) - record.scheme = scheme + record.location = location setup_validator.validate_scheme(record) - expect(record.errors["scheme_id"]).to be_empty + expect(record.errors["startdate"]).to be_empty + expect(record.errors["location_id"]).to be_empty end end - context "with a scheme that has many reactivations soon" do - let(:scheme) { create(:scheme, created_at: Time.zone.local(2022, 4, 1)) } + context "with a location that has many reactivations soon" do + let(:scheme) { create(:scheme) } + let(:location) { create(:location, scheme:) } before do - create(:location, scheme:) - create(:scheme_deactivation_period, deactivation_date: Time.zone.local(2022, 6, 4), reactivation_date: Time.zone.local(2022, 8, 4), scheme:) - create(:scheme_deactivation_period, deactivation_date: Time.zone.local(2022, 6, 2), reactivation_date: Time.zone.local(2022, 8, 3), scheme:) - create(:scheme_deactivation_period, deactivation_date: Time.zone.local(2022, 6, 1), reactivation_date: Time.zone.local(2022, 9, 4), scheme:) - scheme.reload + create(:location_deactivation_period, deactivation_date: Time.zone.local(2022, 6, 4), reactivation_date: Time.zone.local(2022, 8, 4), location:) + create(:location_deactivation_period, deactivation_date: Time.zone.local(2022, 6, 2), reactivation_date: Time.zone.local(2022, 8, 3), location:) + create(:location_deactivation_period, deactivation_date: Time.zone.local(2022, 6, 1), reactivation_date: Time.zone.local(2022, 9, 4), location:) + location.reload end - it "produces error when tenancy start date is during deactivated scheme period" do + it "produces error when tenancy start date is during deactivated location period" do record.startdate = Time.zone.local(2022, 7, 5) - record.scheme = scheme + record.location = location 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")) + expect(record.errors["startdate"]) + .to include(match I18n.t("validations.setup.startdate.location.reactivating_soon.startdate", postcode: location.postcode, date: "4 September 2022")) + expect(record.errors["location_id"]) + .to include(match I18n.t("validations.setup.startdate.location.reactivating_soon.location_id", postcode: location.postcode, date: "4 September 2022")) end - it "produces no error when tenancy start date is during an active scheme period" do + it "produces no error when tenancy start date is during an active location period" do record.startdate = Time.zone.local(2022, 10, 1) - record.scheme = scheme + record.location = location setup_validator.validate_scheme(record) - expect(record.errors["scheme_id"]).to be_empty + expect(record.errors["startdate"]).to be_empty + expect(record.errors["location_id"]).to be_empty + end + end + + context "with a location that is activating soon (has no deactivation periods)" do + let(:scheme) { create(:scheme) } + let(:location) { create(:location, scheme:, startdate: Time.zone.local(2022, 9, 15)) } + + it "produces no error" do + record.startdate = Time.zone.local(2022, 10, 15) + record.location = location + setup_validator.validate_scheme(record) + expect(record.errors["startdate"]).to be_empty + expect(record.errors["location_id"]).to be_empty + end + + it "produces an error when the date is before available_from date" do + record.startdate = Time.zone.local(2022, 8, 15) + record.location = location + setup_validator.validate_scheme(record) + expect(record.errors["startdate"]) + .to include(match I18n.t("validations.setup.startdate.location.activating_soon.startdate", postcode: location.postcode, date: "15 September 2022")) + expect(record.errors["location_id"]) + .to include(match I18n.t("validations.setup.startdate.location.activating_soon.location_id", postcode: location.postcode, date: "15 September 2022")) end end end @@ -293,14 +366,17 @@ RSpec.describe Validations::SetupValidations do record.startdate = Time.zone.local(2022, 7, 5) record.location = location setup_validator.validate_location(record) + expect(record.errors["startdate"]) + .to include(match I18n.t("validations.setup.startdate.location.deactivated.startdate", postcode: location.postcode, date: "4 June 2022")) 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.location_id", postcode: location.postcode, date: "4 June 2022")) end it "produces no error when tenancy start date is during an active location period" do record.startdate = Time.zone.local(2022, 6, 1) record.location = location setup_validator.validate_location(record) + expect(record.errors["startdate"]).to be_empty expect(record.errors["location_id"]).to be_empty end end @@ -318,19 +394,52 @@ RSpec.describe Validations::SetupValidations do record.startdate = Time.zone.local(2022, 7, 5) record.location = location setup_validator.validate_location(record) + expect(record.errors["startdate"]) + .to include(match I18n.t("validations.setup.startdate.location.reactivating_soon.startdate", postcode: location.postcode, date: "4 August 2022")) 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.location_id", postcode: location.postcode, date: "4 August 2022")) end it "produces no error when tenancy start date is during an active location period" do record.startdate = Time.zone.local(2022, 9, 1) record.location = location setup_validator.validate_location(record) + expect(record.errors["startdate"]).to be_empty + expect(record.errors["location_id"]).to be_empty + end + end + + context "with a location that has many reactivations soon" do + let(:scheme) { create(:scheme) } + let(:location) { create(:location, scheme:) } + + before do + create(:location_deactivation_period, deactivation_date: Time.zone.local(2022, 6, 4), reactivation_date: Time.zone.local(2022, 8, 4), location:) + create(:location_deactivation_period, deactivation_date: Time.zone.local(2022, 6, 2), reactivation_date: Time.zone.local(2022, 8, 3), location:) + create(:location_deactivation_period, deactivation_date: Time.zone.local(2022, 6, 1), reactivation_date: Time.zone.local(2022, 9, 4), location:) + location.reload + end + + it "produces error when tenancy start date is during deactivated location period" do + record.startdate = Time.zone.local(2022, 7, 5) + record.location = location + setup_validator.validate_location(record) + expect(record.errors["startdate"]) + .to include(match I18n.t("validations.setup.startdate.location.reactivating_soon.startdate", postcode: location.postcode, date: "4 September 2022")) + expect(record.errors["location_id"]) + .to include(match I18n.t("validations.setup.startdate.location.reactivating_soon.location_id", postcode: location.postcode, date: "4 September 2022")) + end + + it "produces no error when tenancy start date is during an active location period" do + record.startdate = Time.zone.local(2022, 10, 1) + record.location = location + setup_validator.validate_location(record) + expect(record.errors["startdate"]).to be_empty expect(record.errors["location_id"]).to be_empty end end - context "with a location with no deactivation periods" do + context "with a location that is activating soon (has no deactivation periods)" do let(:scheme) { create(:scheme) } let(:location) { create(:location, scheme:, startdate: Time.zone.local(2022, 9, 15)) } @@ -338,6 +447,7 @@ RSpec.describe Validations::SetupValidations do record.startdate = Time.zone.local(2022, 10, 15) record.location = location setup_validator.validate_location(record) + expect(record.errors["startdate"]).to be_empty expect(record.errors["location_id"]).to be_empty end @@ -345,8 +455,10 @@ RSpec.describe Validations::SetupValidations do record.startdate = Time.zone.local(2022, 8, 15) record.location = location setup_validator.validate_location(record) + expect(record.errors["startdate"]) + .to include(match I18n.t("validations.setup.startdate.location.activating_soon.startdate", postcode: location.postcode, date: "15 September 2022")) 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.location_id", postcode: location.postcode, date: "15 September 2022")) end end end