diff --git a/app/controllers/locations_controller.rb b/app/controllers/locations_controller.rb index 783566931..8d46ca92f 100644 --- a/app/controllers/locations_controller.rb +++ b/app/controllers/locations_controller.rb @@ -54,7 +54,9 @@ class LocationsController < ApplicationController end def reactivate - flash[:notice] = reactivate_success_notice + if @location.location_deactivation_periods.deactivations_without_reactivation.update!(reactivation_date:) + flash[:notice] = reactivate_success_notice + end redirect_to scheme_location_path(@scheme, @location) end @@ -203,17 +205,26 @@ private end def deactivation_date + toggle_date("deactivation_date") + + end + + def reactivation_date + toggle_date("reactivation_date") + end + + def toggle_date(key) if params[:location].blank? return - elsif params[:location][:deactivation_date_type] == "default" + elsif params[:location]["#{key}_type".to_sym] == "default" return FormHandler.instance.current_collection_start_date - elsif params[:location][:deactivation_date].present? - return params[:location][:deactivation_date] + elsif params[:location][key.to_sym].present? + return params[:location][key.to_sym] end - day = params[:location]["deactivation_date(3i)"] - month = params[:location]["deactivation_date(2i)"] - year = params[:location]["deactivation_date(1i)"] + day = params[:location]["#{key}(3i)"] + month = params[:location]["#{key}(2i)"] + year = params[:location]["#{key}(1i)"] return nil if [day, month, year].any?(&:blank?) Time.zone.local(year.to_i, month.to_i, day.to_i) if Date.valid_date?(year.to_i, month.to_i, day.to_i) diff --git a/spec/requests/locations_controller_spec.rb b/spec/requests/locations_controller_spec.rb index 0eaf7c488..965df1468 100644 --- a/spec/requests/locations_controller_spec.rb +++ b/spec/requests/locations_controller_spec.rb @@ -1470,8 +1470,7 @@ RSpec.describe LocationsController, 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(:deactivation_date) { Time.utc(2022, 10, 10) } - let(:reactivation_date) { Time.utc(2022, 10, 12) } + let(:deactivation_date) { Time.zone.local(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) } @@ -1488,7 +1487,7 @@ RSpec.describe LocationsController, type: :request do end context "with default date" do - let(:params) { { location: { reactivation_date_type: "default", reactivation_date: } } } + let(:params) { { location: { reactivation_date_type: "default" } } } it "redirects to the location page and displays a success banner" do expect(response).to redirect_to("/schemes/#{scheme.id}/locations/#{location.id}") @@ -1497,10 +1496,17 @@ RSpec.describe LocationsController, type: :request do expect(page).to have_css(".govuk-notification-banner.govuk-notification-banner--success") expect(page).to have_content("#{location.name} has been reactivated") end + + it "updates existing location deactivations with valid reactivation date" do + follow_redirect! + location.reload + expect(location.location_deactivation_periods.count).to eq(1) + expect(location.location_deactivation_periods.first.reactivation_date).to eq(Time.zone.local(2022, 4, 1)) + end end context "with other date" do - let(:params) { { location: { deactivation_date_type: "other", "deactivation_date(3i)": "10", "deactivation_date(2i)": "10", "deactivation_date(1i)": "2022" } } } + let(:params) { { location: { reactivation_date_type: "other", "reactivation_date(3i)": "14", "reactivation_date(2i)": "10", "reactivation_date(1i)": "2022" } } } it "redirects to the location page and displays a success banner" do expect(response).to redirect_to("/schemes/#{scheme.id}/locations/#{location.id}") @@ -1508,6 +1514,13 @@ RSpec.describe LocationsController, type: :request do expect(page).to have_css(".govuk-notification-banner.govuk-notification-banner--success") expect(page).to have_content("#{location.name} has been reactivated") end + + it "updates existing location deactivations with valid reactivation date" do + follow_redirect! + location.reload + expect(location.location_deactivation_periods.count).to eq(1) + expect(location.location_deactivation_periods.first.reactivation_date).to eq(Time.zone.local(2022, 10, 14)) + end end end end