From 3a60c4cd02f6dc0e7cc0848be93b5b8fa925aa0c Mon Sep 17 00:00:00 2001
From: kosiakkatrina <54268893+kosiakkatrina@users.noreply.github.com>
Date: Mon, 28 Nov 2022 10:46:12 +0000
Subject: [PATCH] Deactivation does not affect logs (#1018)
* Update affected logs count and skip the confirmation page if no logs are affected for locations
* Update affected logs count and skip the confirmation page if no logs are affected for schemes
* refactor
---
app/controllers/locations_controller.rb | 9 +++-
app/controllers/schemes_controller.rb | 9 +++-
.../locations/deactivate_confirm.html.erb | 2 +-
app/views/schemes/deactivate_confirm.html.erb | 2 +-
spec/requests/locations_controller_spec.rb | 50 +++++++++++++++---
spec/requests/schemes_controller_spec.rb | 52 ++++++++++++++++---
6 files changed, 102 insertions(+), 22 deletions(-)
diff --git a/app/controllers/locations_controller.rb b/app/controllers/locations_controller.rb
index b3f3ab203..1da3bf5c4 100644
--- a/app/controllers/locations_controller.rb
+++ b/app/controllers/locations_controller.rb
@@ -38,8 +38,13 @@ class LocationsController < ApplicationController
end
def deactivate_confirm
- @deactivation_date = params[:deactivation_date]
- @deactivation_date_type = params[:deactivation_date_type]
+ @affected_logs = @location.lettings_logs.filter_by_before_startdate(params[:deactivation_date])
+ if @affected_logs.count.zero?
+ deactivate
+ else
+ @deactivation_date = params[:deactivation_date]
+ @deactivation_date_type = params[:deactivation_date_type]
+ end
end
def deactivate
diff --git a/app/controllers/schemes_controller.rb b/app/controllers/schemes_controller.rb
index a26471ca1..389446b7f 100644
--- a/app/controllers/schemes_controller.rb
+++ b/app/controllers/schemes_controller.rb
@@ -39,8 +39,13 @@ class SchemesController < ApplicationController
end
def deactivate_confirm
- @deactivation_date = params[:deactivation_date]
- @deactivation_date_type = params[:deactivation_date_type]
+ @affected_logs = @scheme.lettings_logs.filter_by_before_startdate(params[:deactivation_date])
+ if @affected_logs.count.zero?
+ deactivate
+ else
+ @deactivation_date = params[:deactivation_date]
+ @deactivation_date_type = params[:deactivation_date_type]
+ end
end
def deactivate
diff --git a/app/views/locations/deactivate_confirm.html.erb b/app/views/locations/deactivate_confirm.html.erb
index 47b7bbf60..6748af918 100644
--- a/app/views/locations/deactivate_confirm.html.erb
+++ b/app/views/locations/deactivate_confirm.html.erb
@@ -4,7 +4,7 @@
<% end %>
<%= @location.postcode %>
- This change will affect <%= @location.lettings_logs.count %> logs
+ This change will affect <%= @affected_logs.count %> logs
<%= govuk_warning_text text: I18n.t("warnings.location.deactivate.review_logs") %>
<%= f.hidden_field :confirm, value: true %>
diff --git a/app/views/schemes/deactivate_confirm.html.erb b/app/views/schemes/deactivate_confirm.html.erb
index 92479d93b..b5dda160e 100644
--- a/app/views/schemes/deactivate_confirm.html.erb
+++ b/app/views/schemes/deactivate_confirm.html.erb
@@ -4,7 +4,7 @@
<% end %>
<%= @scheme.service_name %>
- This change will affect <%= @scheme.lettings_logs.count %> logs
+ This change will affect <%= @affected_logs.count %> logs
<%= govuk_warning_text text: I18n.t("warnings.scheme.deactivate.review_logs") %>
<%= f.hidden_field :confirm, value: true %>
diff --git a/spec/requests/locations_controller_spec.rb b/spec/requests/locations_controller_spec.rb
index 237149f7d..b1cffd3bf 100644
--- a/spec/requests/locations_controller_spec.rb
+++ b/spec/requests/locations_controller_spec.rb
@@ -1243,11 +1243,13 @@ RSpec.describe LocationsController, type: :request do
let!(:lettings_log) { FactoryBot.create(:lettings_log, :sh, location:, scheme:, startdate:, owning_organisation: user.organisation) }
let(:startdate) { Time.utc(2022, 10, 11) }
let(:add_deactivations) { nil }
+ let(:setup_locations) { nil }
before do
Timecop.freeze(Time.utc(2022, 10, 10))
sign_in user
add_deactivations
+ setup_locations
location.save!
patch "/schemes/#{scheme.id}/locations/#{location.id}/new-deactivation", params:
end
@@ -1259,20 +1261,52 @@ RSpec.describe LocationsController, type: :request do
context "with default date" do
let(:params) { { location_deactivation_period: { deactivation_date_type: "default", deactivation_date: } } }
- it "redirects to the confirmation page" do
- follow_redirect!
- expect(response).to have_http_status(:ok)
- expect(page).to have_content("This change will affect #{location.lettings_logs.count} logs")
+ context "and affected logs" do
+ it "redirects to the confirmation page" do
+ follow_redirect!
+ expect(response).to have_http_status(:ok)
+ expect(page).to have_content("This change will affect 1 logs")
+ end
+ end
+
+ context "and no affected logs" do
+ let(:setup_locations) { location.lettings_logs.update(location: nil) }
+
+ it "redirects to the location page and updates the deactivation period" do
+ follow_redirect!
+ follow_redirect!
+ expect(response).to have_http_status(:ok)
+ expect(page).to have_css(".govuk-notification-banner.govuk-notification-banner--success")
+ location.reload
+ expect(location.location_deactivation_periods.count).to eq(1)
+ expect(location.location_deactivation_periods.first.deactivation_date).to eq(Time.zone.local(2022, 4, 1))
+ end
end
end
context "with other date" do
let(:params) { { location_deactivation_period: { deactivation_date_type: "other", "deactivation_date(3i)": "10", "deactivation_date(2i)": "10", "deactivation_date(1i)": "2022" } } }
- it "redirects to the confirmation page" do
- follow_redirect!
- expect(response).to have_http_status(:ok)
- expect(page).to have_content("This change will affect #{location.lettings_logs.count} logs")
+ context "and afected logs" do
+ it "redirects to the confirmation page" do
+ follow_redirect!
+ expect(response).to have_http_status(:ok)
+ expect(page).to have_content("This change will affect #{location.lettings_logs.count} logs")
+ end
+ end
+
+ context "and no affected logs" do
+ let(:setup_locations) { location.lettings_logs.update(location: nil) }
+
+ it "redirects to the location page and updates the deactivation period" do
+ follow_redirect!
+ follow_redirect!
+ expect(response).to have_http_status(:ok)
+ expect(page).to have_css(".govuk-notification-banner.govuk-notification-banner--success")
+ location.reload
+ expect(location.location_deactivation_periods.count).to eq(1)
+ expect(location.location_deactivation_periods.first.deactivation_date).to eq(Time.zone.local(2022, 10, 10))
+ end
end
end
diff --git a/spec/requests/schemes_controller_spec.rb b/spec/requests/schemes_controller_spec.rb
index ee9cca533..4de927f8f 100644
--- a/spec/requests/schemes_controller_spec.rb
+++ b/spec/requests/schemes_controller_spec.rb
@@ -1772,10 +1772,12 @@ RSpec.describe SchemesController, type: :request do
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) }
+ let(:setup_schemes) { nil }
before do
Timecop.freeze(Time.utc(2022, 10, 10))
sign_in user
+ setup_schemes
patch "/schemes/#{scheme.id}/new-deactivation", params:
end
@@ -1786,20 +1788,54 @@ RSpec.describe SchemesController, type: :request do
context "with default date" do
let(:params) { { scheme_deactivation_period: { deactivation_date_type: "default", deactivation_date: } } }
- it "redirects to the confirmation page" do
- follow_redirect!
- expect(response).to have_http_status(:ok)
- expect(page).to have_content("This change will affect #{scheme.lettings_logs.count} logs")
+ context "and affected logs" do
+ it "redirects to the confirmation page" do
+ follow_redirect!
+ expect(response).to have_http_status(:ok)
+ expect(page).to have_content("This change will affect #{scheme.lettings_logs.count} logs")
+ end
+ end
+
+ context "and no affected logs" do
+ let(:setup_schemes) { scheme.lettings_logs.update(scheme: nil) }
+
+ it "redirects to the location page and updates the deactivation period" do
+ follow_redirect!
+ 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(Time.zone.local(2022, 4, 1))
+ end
end
end
context "with other date" do
let(:params) { { scheme_deactivation_period: { deactivation_date_type: "other", "deactivation_date(3i)": "10", "deactivation_date(2i)": "10", "deactivation_date(1i)": "2022" } } }
- it "redirects to the confirmation page" do
- follow_redirect!
- expect(response).to have_http_status(:ok)
- expect(page).to have_content("This change will affect #{scheme.lettings_logs.count} logs")
+ context "and affected logs" do
+ it "redirects to the confirmation page" do
+ follow_redirect!
+ expect(response).to have_http_status(:ok)
+ expect(page).to have_content("This change will affect #{scheme.lettings_logs.count} logs")
+ end
+ end
+
+ context "and no affected logs" do
+ let(:setup_schemes) { scheme.lettings_logs.update(scheme: nil) }
+
+ it "redirects to the location page and updates the deactivation period" do
+ follow_redirect!
+ 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(Time.zone.local(2022, 10, 10))
+ end
end
end