Skip to content

Commit

Permalink
Add feature toggle for add downtime transition
Browse files Browse the repository at this point in the history
  • Loading branch information
Ana Botto committed Jan 30, 2024
1 parent 4a58b74 commit 85f8d42
Show file tree
Hide file tree
Showing 8 changed files with 258 additions and 98 deletions.
28 changes: 2 additions & 26 deletions app/controllers/downtimes_controller.rb
Original file line number Diff line number Diff line change
@@ -1,11 +1,7 @@
class DowntimesController < ApplicationController
before_action :require_govuk_editor
before_action :load_edition, except: [:index]
before_action :process_params, only: %i[create update]

def index
@transactions = TransactionEdition.published.order_by(%i[title asc])
end
before_action :load_edition
before_action :process_params, only: %i[create]

def new
@downtime = Downtime.new(artefact: @edition.artefact)
Expand All @@ -22,26 +18,6 @@ def create
end
end

def edit
@downtime = Downtime.for(@edition.artefact)
end

def update
@downtime = Downtime.for(@edition.artefact)

if params["commit"] == "Cancel downtime"
DowntimeRemover.destroy_immediately(@downtime)
flash[:success] = "#{edition_link} downtime message cancelled".html_safe
redirect_to downtimes_path
elsif @downtime.update(downtime_params)
DowntimeScheduler.schedule_publish_and_expiry(@downtime)
flash[:success] = "#{edition_link} downtime message re-scheduled (from #{view_context.downtime_datetime(@downtime)})".html_safe
redirect_to downtimes_path
else
render :edit
end
end

private

def downtime_params
Expand Down
75 changes: 75 additions & 0 deletions app/controllers/legacy_downtimes_controller.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
class LegacyDowntimesController < ApplicationController
before_action :require_govuk_editor
before_action :load_edition, except: [:index]
before_action :process_params, only: %i[create update]

def index
@transactions = TransactionEdition.published.order_by(%i[title asc])
end

def new
@downtime = Downtime.new(artefact: @edition.artefact)
end

def create
@downtime = Downtime.new(downtime_params)
if @downtime.save
DowntimeScheduler.schedule_publish_and_expiry(@downtime)
flash[:success] = "#{edition_link} downtime message scheduled (from #{view_context.downtime_datetime(@downtime)})".html_safe
redirect_to downtimes_path
else
render :new
end
end

def edit
@downtime = Downtime.for(@edition.artefact)
end

def update
@downtime = Downtime.for(@edition.artefact)

if params["commit"] == "Cancel downtime"
DowntimeRemover.destroy_immediately(@downtime)
flash[:success] = "#{edition_link} downtime message cancelled".html_safe
redirect_to downtimes_path
elsif @downtime.update(downtime_params)
DowntimeScheduler.schedule_publish_and_expiry(@downtime)
flash[:success] = "#{edition_link} downtime message re-scheduled (from #{view_context.downtime_datetime(@downtime)})".html_safe
redirect_to downtimes_path
else
render :edit
end
end

private

def downtime_params
params[:downtime].permit([
"artefact_id",
"message",
"end_time(1i)",
"end_time(2i)",
"end_time(3i)",
"end_time(4i)",
"end_time(5i)",
"start_time(1i)",
"start_time(2i)",
"start_time(3i)",
"start_time(4i)",
"start_time(5i)",
])
end

def load_edition
@edition = Edition.find(params[:edition_id])
end

def process_params
squash_multiparameter_datetime_attributes(downtime_params, %w[start_time end_time])
end

def edition_link
view_context.link_to(@edition.title, edit_edition_downtime_path(@edition), class: "link-inherit bold")
end
end
File renamed without changes.
File renamed without changes.
4 changes: 4 additions & 0 deletions config/features.rb
Original file line number Diff line number Diff line change
Expand Up @@ -12,4 +12,8 @@
feature :design_system_reports_page,
default: false,
description: "A transition of the reports page to use the GOV.UK Design System"

feature :design_system_downtime_new,
default: false,
description: "A transition of the add downtime page to use the GOV.UK Design System"
end
7 changes: 5 additions & 2 deletions config/routes.rb
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
put "resolve", on: :member
end

get "downtimes" => "downtimes#index"
get "downtimes" => "legacy_downtimes#index"

resources :artefacts, only: %i[new create update]

Expand Down Expand Up @@ -42,7 +42,10 @@
}
end

resource :downtime, only: %i[new create edit update destroy]
constraints FeatureConstraint.new("design_system_downtime_new") do
resource :downtime, only: %i[new create]
end
resource :downtime, only: %i[new create edit update destroy], controller: "legacy_downtimes"
end

constraints FeatureConstraint.new("design_system_reports_page") do
Expand Down
71 changes: 1 addition & 70 deletions test/functional/downtimes_controller_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -5,31 +5,6 @@ class DowntimesControllerTest < ActionController::TestCase
login_as_stub_user
end

context "#index" do
should "list all published transaction editions" do
unpublished_transaction_edition = FactoryBot.create(:transaction_edition)
transaction_editions = FactoryBot.create_list(:transaction_edition, 2, :published)

get :index

assert_response :ok
assert_select "h3.publication-table-title", count: 0, text: unpublished_transaction_edition.title
transaction_editions.each do |edition|
assert_select "h3.publication-table-title", text: edition.title
end
end

should "redirect to root page if welsh_editor" do
login_as_welsh_editor

get :index

assert_response :redirect
assert_redirected_to controller: "root", action: "index"
assert_includes flash[:danger], "do not have permission"
end
end

context "#new" do
should "render the page ok" do
get :new, params: { edition_id: edition.id }
Expand All @@ -53,7 +28,7 @@ class DowntimesControllerTest < ActionController::TestCase
should "redirect to the downtime index page" do
DowntimeScheduler.stubs(:schedule_publish_and_expiry)
post :create, params: { edition_id: edition.id, downtime: downtime_params }
assert_redirected_to controller: "downtimes", action: "index"
assert_redirected_to controller: "legacy_downtimes", action: "index"
end
end

Expand All @@ -75,50 +50,6 @@ class DowntimesControllerTest < ActionController::TestCase
end
end

context "#edit" do
should "render the page ok" do
create_downtime
get :edit, params: { edition_id: edition.id }
assert_response :ok
end
end

context "#update" do
context "cancelling scheduled downtime" do
should "invoke the DowntimeRemover" do
DowntimeRemover.expects(:destroy_immediately).with(downtime)
put :update, params: { edition_id: edition.id, downtime: downtime_params, commit: "Cancel downtime" }
end

should "redirect to the downtime index" do
DowntimeRemover.stubs(:destroy_immediately)
put :update, params: { edition_id: edition.id, downtime: downtime_params, commit: "Cancel downtime" }
assert_redirected_to controller: "downtimes", action: "index"
end
end

context "rescheduling planned downtime" do
should "schedule the changes for publication and expiration" do
DowntimeScheduler.expects(:schedule_publish_and_expiry).with(downtime)
put :update, params: { edition_id: edition.id, downtime: downtime_params, commit: "Re-schedule downtime message" }
end

should "redirect to the downtime index" do
create_downtime
DowntimeScheduler.stubs(:schedule_publish_and_expiry)
put :update, params: { edition_id: edition.id, downtime: downtime_params, commit: "Re-schedule downtime message" }
assert_redirected_to controller: "downtimes", action: "index"
end
end

context "with invalid form data" do
should "rerender the page" do
create_downtime
put :update, params: { edition_id: edition.id, downtime: invalid_params, commit: "Re-schedule downtime message" }
assert_template :edit
end
end
end

Check failure on line 53 in test/functional/downtimes_controller_test.rb

View workflow job for this annotation

GitHub Actions / Lint Ruby / Run RuboCop

Layout/EmptyLines: Extra blank line detected. (https://rubystyle.guide#two-or-more-empty-lines)
def edition
@edition ||= FactoryBot.create(:transaction_edition)
Expand Down
Loading

0 comments on commit 85f8d42

Please sign in to comment.