From 5ca010d6202273bcf08420e4f4fd1ba7d5ca4355 Mon Sep 17 00:00:00 2001 From: Ryan Brown Date: Tue, 17 Dec 2024 17:00:53 +0000 Subject: [PATCH] Allow deletion of review reminders Previously the only way to remove the review date from a document was to create a new edition and uncheck the set review date checkbox, then save the edition. If the user publishes the new edition but neglects to remove the review reminder, they will receive another reminder even though they updated the content. This commit makes it possible for the user to remove the reminder from the published edition without having to create another edition. --- .../admin/review_reminders_controller.rb | 9 +++++++- .../admin/review_reminders/_form.html.erb | 3 +++ .../review_reminders/confirm_destroy.html.erb | 21 +++++++++++++++++++ config/features.rb | 1 + config/routes.rb | 4 +++- features/review_reminder.feature | 8 +++++++ .../step_definitions/review_reminder_steps.rb | 15 +++++++++++++ .../admin/review_reminders_controller_test.rb | 18 ++++++++++++++++ 8 files changed, 77 insertions(+), 2 deletions(-) create mode 100644 app/views/admin/review_reminders/confirm_destroy.html.erb diff --git a/app/controllers/admin/review_reminders_controller.rb b/app/controllers/admin/review_reminders_controller.rb index 2519eca85eb..9361f537119 100644 --- a/app/controllers/admin/review_reminders_controller.rb +++ b/app/controllers/admin/review_reminders_controller.rb @@ -1,6 +1,6 @@ class Admin::ReviewRemindersController < Admin::BaseController before_action :load_document - before_action :load_review_reminder, only: %i[edit update] + before_action :load_review_reminder, only: %i[edit update confirm_destroy destroy] before_action :build_review_reminder, only: %i[new create] before_action :enforce_permissions! @@ -24,6 +24,13 @@ def update end end + def confirm_destroy; end + + def destroy + @review_reminder.destroy! + redirect_to admin_edition_path(@document.latest_edition), notice: "Review reminder deleted" + end + private def load_document diff --git a/app/views/admin/review_reminders/_form.html.erb b/app/views/admin/review_reminders/_form.html.erb index fff61166578..97043181d37 100644 --- a/app/views/admin/review_reminders/_form.html.erb +++ b/app/views/admin/review_reminders/_form.html.erb @@ -47,6 +47,9 @@ text: "Save", } %> + <% if Flipflop.delete_review_reminders? && review_reminder.persisted? %> + <%= link_to("Delete", confirm_destroy_admin_document_review_reminder_path(document, review_reminder), class: "govuk-link gem-link--destructive govuk-link--no-visited-state") %> + <% end %> <%= link_to("Cancel", admin_edition_path(@document.latest_edition), class: "govuk-link govuk-link--no-visited-state") %> <% end %> diff --git a/app/views/admin/review_reminders/confirm_destroy.html.erb b/app/views/admin/review_reminders/confirm_destroy.html.erb new file mode 100644 index 00000000000..85a5910b32c --- /dev/null +++ b/app/views/admin/review_reminders/confirm_destroy.html.erb @@ -0,0 +1,21 @@ +<% content_for :page_title, "Delete review reminder for #{@document.latest_edition.title}" %> +<% content_for :title, "Delete review reminder" %> +<% content_for :context, @document.latest_edition.title %> +<% content_for :title_margin_bottom, 8 %> + +
+
+ <%= form_tag admin_document_review_reminder_path(@document, @review_reminder), method: :delete do %> +

Are you sure you want to delete this review reminder?

+ +
+ <%= render "govuk_publishing_components/components/button", { + text: "Delete", + destructive: true, + } %> + + <%= link_to("Cancel", edit_admin_document_review_reminder_path(@document, @review_reminder), class: "govuk-link govuk-link--no-visited-state") %> +
+ <% end %> +
+
diff --git a/config/features.rb b/config/features.rb index 09a5dcaf884..e180a95811b 100644 --- a/config/features.rb +++ b/config/features.rb @@ -21,6 +21,7 @@ # feature :world_domination, # default: true, # description: "Take over the world." + feature :delete_review_reminders, description: "Enables deletion of review reminders", default: false feature :govspeak_visual_editor, description: "Enables a visual editor for Govspeak fields", default: false feature :override_government, description: "Enables GDS Editors and Admins to override the government associated with a document", default: false feature :show_link_to_content_block_manager, description: "Shows link to Content Block Manager from Whitehall editor", default: Whitehall.integration_or_staging? diff --git a/config/routes.rb b/config/routes.rb index f737b5061c5..ec2400c9561 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -77,7 +77,9 @@ def redirect(path, options = { prefix: Whitehall.router_prefix }) end resources :documents, only: [] do - resources :review_reminders, only: %i[new create edit update] + resources :review_reminders, only: %i[new create edit update destroy] do + get :confirm_destroy, on: :member + end end resources :authors, only: [:show] diff --git a/features/review_reminder.feature b/features/review_reminder.feature index 0f04705a03a..5ef2475a456 100644 --- a/features/review_reminder.feature +++ b/features/review_reminder.feature @@ -23,3 +23,11 @@ Feature: Review reminders When I click the button "Edit review date" on the edition summary page for "Standard Beard Lengths" And I update the review date to "2033-1-1" Then I should see the review date of "1 January 2033" on the edition summary page + + Scenario: Deleting the review date for a published publication + Given a published publication "Standard Beard Lengths" with a PDF attachment + And The delete review reminder feature flag is "enabled" + And a review reminder exists for "Standard Beard Lengths" with the date "2032-1-1" + When I click the button "Edit review date" on the edition summary page for "Standard Beard Lengths" + And I delete the review date + Then I should not see a review date on the edition summary page diff --git a/features/step_definitions/review_reminder_steps.rb b/features/step_definitions/review_reminder_steps.rb index 9738fc2c9d4..9a09e62c0a7 100644 --- a/features/step_definitions/review_reminder_steps.rb +++ b/features/step_definitions/review_reminder_steps.rb @@ -1,3 +1,8 @@ +And(/^The delete review reminder feature flag is "(enabled|disabled)"$/) do |enabled| + @test_strategy ||= Flipflop::FeatureSet.current.test! + @test_strategy.switch!(:delete_review_reminders, enabled == "enabled") +end + And(/^I add a review date of "([^"]*)" and the email address "([^"]*)" on the edit page$/) do |date, email| click_link "Edit draft" check "Set a reminder to review this content after it has been published" @@ -19,6 +24,11 @@ assert_selector ".app-view-summary__section .govuk-summary-list__row:nth-child(5) .govuk-summary-list__value", text: date end +Then(/^I should not see a review date on the edition summary page$/) do + assert_selector ".app-view-summary__section .govuk-summary-list__row:nth-child(5) .govuk-summary-list__key", text: "Review date" + assert_selector ".app-view-summary__section .govuk-summary-list__row:nth-child(5) .govuk-summary-list__value", text: "Not set" +end + When(/^I click the button "([^"]*)" on the edition summary page for "([^"]*)"$/) do |label, title| edition = Edition.find_by!(title:) visit admin_edition_path(edition) @@ -45,3 +55,8 @@ check "Review overdue" click_on "Search" end + +And(/^I delete the review date$/) do + click_link "Delete" + click_button "Delete" +end diff --git a/test/functional/admin/review_reminders_controller_test.rb b/test/functional/admin/review_reminders_controller_test.rb index ed7baa568b7..8e36cacf23a 100644 --- a/test/functional/admin/review_reminders_controller_test.rb +++ b/test/functional/admin/review_reminders_controller_test.rb @@ -103,4 +103,22 @@ class Admin::ReviewRemindersControllerTest < ActionController::TestCase assert_equal assigns(:review_reminder).email_address, "" assert_template :edit end + + test "GET to :confirm_destroy assigns the correct values and renders the correct template" do + review_reminder = create(:review_reminder, document: @document) + + get :confirm_destroy, params: { document_id: @document, id: review_reminder } + + assert_equal assigns(:document), @document + assert_equal assigns(:review_reminder), review_reminder + assert_template :confirm_destroy + end + + test "DELETE to :destroy destroys the review reminder" do + review_reminder = create(:review_reminder, document: @document) + + delete :destroy, params: { document_id: @document, id: review_reminder } + + assert @document.reload.review_reminder.nil? + end end