From acf6676947ef2bf01c4d90dddbe008d6d4e5af83 Mon Sep 17 00:00:00 2001 From: Kat Date: Thu, 17 Nov 2022 12:01:21 +0000 Subject: [PATCH] Update status method --- app/models/scheme.rb | 5 +- spec/factories/scheme_deactivation_period.rb | 5 ++ spec/models/scheme_spec.rb | 68 +++++++++++++------- spec/requests/schemes_controller_spec.rb | 25 ++++++- 4 files changed, 78 insertions(+), 25 deletions(-) create mode 100644 spec/factories/scheme_deactivation_period.rb diff --git a/app/models/scheme.rb b/app/models/scheme.rb index 13349674f..3dfe1ff55 100644 --- a/app/models/scheme.rb +++ b/app/models/scheme.rb @@ -217,8 +217,9 @@ class Scheme < ApplicationRecord end def status - return :active if deactivation_date.blank? - return :deactivating_soon if Time.zone.now < deactivation_date + recent_deactivation = scheme_deactivation_periods.deactivations_without_reactivation.first + return :active if recent_deactivation.blank? + return :deactivating_soon if Time.zone.now < recent_deactivation.deactivation_date :deactivated end diff --git a/spec/factories/scheme_deactivation_period.rb b/spec/factories/scheme_deactivation_period.rb new file mode 100644 index 000000000..c073bc68a --- /dev/null +++ b/spec/factories/scheme_deactivation_period.rb @@ -0,0 +1,5 @@ +FactoryBot.define do + factory :scheme_deactivation_period do + reactivation_date { nil } + end +end diff --git a/spec/models/scheme_spec.rb b/spec/models/scheme_spec.rb index b9e8fd886..59ac34de4 100644 --- a/spec/models/scheme_spec.rb +++ b/spec/models/scheme_spec.rb @@ -99,32 +99,56 @@ RSpec.describe Scheme, type: :model do Timecop.freeze(2022, 6, 7) end - it "returns active if the scheme is not deactivated" do - scheme.deactivation_date = nil - scheme.deactivation_date_type = nil - scheme.save! - expect(scheme.status).to eq(:active) - end + context "when there have not been any previous deactivations" do + it "returns active if the scheme is not deactivated" do + expect(scheme.status).to eq(:active) + end - it "returns deactivating soon if deactivation_date is in the future" do - scheme.deactivation_date = Time.zone.local(2022, 8, 8) - scheme.deactivation_date_type = "other" - scheme.save! - expect(scheme.status).to eq(:deactivating_soon) - end + it "returns deactivating soon if deactivation_date is in the future" do + scheme.scheme_deactivation_periods << FactoryBot.create(:scheme_deactivation_period, deactivation_date: Time.zone.local(2022, 8, 8)) + scheme.save! + expect(scheme.status).to eq(:deactivating_soon) + end - it "returns deactivated if deactivation_date is in the past" do - scheme.deactivation_date = Time.zone.local(2022, 4, 8) - scheme.deactivation_date_type = "other" - scheme.save! - expect(scheme.status).to eq(:deactivated) + it "returns deactivated if deactivation_date is in the past" do + scheme.scheme_deactivation_periods << FactoryBot.create(:scheme_deactivation_period, deactivation_date: Time.zone.local(2022, 6, 6)) + scheme.save! + expect(scheme.status).to eq(:deactivated) + end + + it "returns deactivated if deactivation_date is today" do + scheme.scheme_deactivation_periods << FactoryBot.create(:scheme_deactivation_period, deactivation_date: Time.zone.local(2022, 6, 7)) + scheme.save! + expect(scheme.status).to eq(:deactivated) + end end - it "returns deactivated if deactivation_date is today" do - scheme.deactivation_date = Time.zone.local(2022, 6, 7) - scheme.deactivation_date_type = "other" - scheme.save! - expect(scheme.status).to eq(:deactivated) + context "when there have been previous deactivations" do + before do + scheme.scheme_deactivation_periods << FactoryBot.create(:scheme_deactivation_period, deactivation_date: Time.zone.local(2022, 6, 4), reactivation_date: Time.zone.local(2022, 6, 5)) + end + + it "returns active if the scheme has no relevant deactivation records" do + expect(scheme.status).to eq(:active) + end + + it "returns deactivating soon if deactivation_date is in the future" do + scheme.scheme_deactivation_periods << FactoryBot.create(:scheme_deactivation_period, deactivation_date: Time.zone.local(2022, 8, 8)) + scheme.save! + expect(scheme.status).to eq(:deactivating_soon) + end + + it "returns deactivated if deactivation_date is in the past" do + scheme.scheme_deactivation_periods << FactoryBot.create(:scheme_deactivation_period, deactivation_date: Time.zone.local(2022, 6, 6)) + scheme.save! + expect(scheme.status).to eq(:deactivated) + end + + it "returns deactivated if deactivation_date is today" do + scheme.scheme_deactivation_periods << FactoryBot.create(:scheme_deactivation_period, deactivation_date: Time.zone.local(2022, 6, 7)) + scheme.save! + expect(scheme.status).to eq(:deactivated) + end end end diff --git a/spec/requests/schemes_controller_spec.rb b/spec/requests/schemes_controller_spec.rb index 59b748c96..237df9785 100644 --- a/spec/requests/schemes_controller_spec.rb +++ b/spec/requests/schemes_controller_spec.rb @@ -246,19 +246,42 @@ RSpec.describe SchemesController, type: :request do context "when looking at scheme details" do let(:user) { FactoryBot.create(:user, :data_coordinator) } let!(:scheme) { FactoryBot.create(:scheme, owning_organisation: user.organisation) } + let(:add_deactivations) { scheme.scheme_deactivation_periods << scheme_deactivation_period } before do Timecop.freeze(Time.utc(2022, 10, 10)) sign_in user + add_deactivations + scheme.save! get "/schemes/#{scheme.id}" end context "with active scheme" do + let(:add_deactivations) {} + it "renders deactivate this scheme" do expect(response).to have_http_status(:ok) expect(page).to have_link("Deactivate this scheme", href: "/schemes/#{scheme.id}/new-deactivation") end end + + context "with deactivated scheme" do + let(:scheme_deactivation_period) { FactoryBot.create(:scheme_deactivation_period, deactivation_date: Time.zone.local(2022, 10, 9)) } + + it "renders reactivate this scheme" do + expect(response).to have_http_status(:ok) + expect(page).to have_link("Reactivate this scheme", href: "/schemes/#{scheme.id}/reactivate") + end + end + + context "with scheme that's deactivating soon" do + let(:scheme_deactivation_period) { FactoryBot.create(:scheme_deactivation_period, deactivation_date: Time.zone.local(2022, 10, 12)) } + + it "renders reactivate this scheme" do + expect(response).to have_http_status(:ok) + expect(page).to have_link("Reactivate this scheme", href: "/schemes/#{scheme.id}/reactivate") + end + end end end @@ -1743,7 +1766,6 @@ RSpec.describe SchemesController, type: :request do let(:user) { FactoryBot.create(:user, :data_coordinator) } let!(:scheme) { FactoryBot.create(:scheme, owning_organisation: user.organisation) } let!(:location) { FactoryBot.create(:location, scheme:) } - let(:startdate) { Time.utc(2021, 1, 2) } let(:deactivation_date) { Time.utc(2022, 10, 10) } let!(:lettings_log) { FactoryBot.create(:lettings_log, :sh, location:, scheme:, startdate:, owning_organisation: user.organisation) } let(:startdate) { Time.utc(2022, 10, 11) } @@ -1787,6 +1809,7 @@ RSpec.describe SchemesController, type: :request do follow_redirect! follow_redirect! expect(response).to have_http_status(:ok) + expect(page).to have_css(".govuk-notification-banner.govuk-notification-banner--success") scheme.reload expect(scheme.scheme_deactivation_periods.count).to eq(1) expect(scheme.scheme_deactivation_periods.first.deactivation_date).to eq(deactivation_date)