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