From 440c5325fb765d0109efaaab7e65b5ad670b0dc6 Mon Sep 17 00:00:00 2001 From: Kat Date: Fri, 11 Oct 2024 12:13:55 +0100 Subject: [PATCH] Add delete confirmation page --- .../collection_resources_controller.rb | 10 +++ .../_collection_resource_summary_list.erb | 2 +- .../delete_confirmation.html.erb | 31 +++++++++ config/routes.rb | 1 + .../collection_resources_controller_spec.rb | 63 ++++++++++++++++++- 5 files changed, 105 insertions(+), 2 deletions(-) create mode 100644 app/views/collection_resources/delete_confirmation.html.erb diff --git a/app/controllers/collection_resources_controller.rb b/app/controllers/collection_resources_controller.rb index 5203ceea1..1a9832a06 100644 --- a/app/controllers/collection_resources_controller.rb +++ b/app/controllers/collection_resources_controller.rb @@ -184,6 +184,16 @@ class CollectionResourcesController < ApplicationController end end + def delete_confirmation + return render_not_found unless current_user.support? + + @collection_resource = CollectionResource.find_by(id: params[:collection_resource_id]) + + return render_not_found unless @collection_resource + + render "collection_resources/delete_confirmation" + end + private def resource_params diff --git a/app/views/collection_resources/_collection_resource_summary_list.erb b/app/views/collection_resources/_collection_resource_summary_list.erb index 0e630f0aa..4946367c2 100644 --- a/app/views/collection_resources/_collection_resource_summary_list.erb +++ b/app/views/collection_resources/_collection_resource_summary_list.erb @@ -35,7 +35,7 @@ ) %> <% row.with_action( text: "Delete", - href: "/", + href: collection_resource_delete_confirmation_path(resource), classes: "app-!-colour-red" ) %> <% end %> diff --git a/app/views/collection_resources/delete_confirmation.html.erb b/app/views/collection_resources/delete_confirmation.html.erb new file mode 100644 index 000000000..83dd65440 --- /dev/null +++ b/app/views/collection_resources/delete_confirmation.html.erb @@ -0,0 +1,31 @@ +<% content_for :before_content do %> + <% content_for :title, "Are you sure you want to delete the #{@collection_resource.short_display_name.downcase}?" %> + <%= govuk_back_link href: collection_resources_path %> +<% end %> + +
+
+ <%= "#{@collection_resource.log_type.humanize} #{text_year_range_format(@collection_resource.year)}" %> +

+ <%= content_for(:title) %> +

+

+ This file will no longer be available for users to download. +

+ + <%= govuk_warning_text(text: "You will not be able to undo this action.") %> + +
+ <%= govuk_button_to( + "Delete resource", + "/", + method: :delete, + ) %> + <%= govuk_button_link_to( + "Cancel", + collection_resources_path, + secondary: true, + ) %> +
+
+
diff --git a/config/routes.rb b/config/routes.rb index cbac4894a..e451ae034 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -51,6 +51,7 @@ Rails.application.routes.draw do get "/download", to: "collection_resources#download_additional_collection_resource" get "/edit", to: "collection_resources#edit_additional_collection_resource" patch "/update", to: "collection_resources#update_additional_collection_resource" + get "/delete-confirmation", to: "collection_resources#delete_confirmation" end get "clear-filters", to: "sessions#clear_filters" diff --git a/spec/requests/collection_resources_controller_spec.rb b/spec/requests/collection_resources_controller_spec.rb index a6d88f911..fe756d9e0 100644 --- a/spec/requests/collection_resources_controller_spec.rb +++ b/spec/requests/collection_resources_controller_spec.rb @@ -183,7 +183,7 @@ RSpec.describe CollectionResourcesController, type: :request do expect(page).to have_content("additional resource") expect(page).not_to have_content("additional resource 2") expect(page).to have_link("additional.pdf", href: collection_resource_download_path(collection_resource)) - expect(page).to have_link("Delete") + expect(page).to have_link("Delete", href: collection_resource_delete_confirmation_path(collection_resource)) end end end @@ -813,4 +813,65 @@ RSpec.describe CollectionResourcesController, type: :request do end end end + + describe "GET #collection_resource_delete_confirmation" do + let(:collection_resource) { create(:collection_resource, :additional, year: 2025, log_type: "sales", short_display_name: "additional resource", download_filename: "additional.pdf") } + + context "when user is not signed in" do + it "redirects to the sign in page" do + get collection_resource_delete_confirmation_path(collection_resource) + expect(response).to redirect_to(new_user_session_path) + end + end + + context "when user is signed in as a data coordinator" do + let(:user) { create(:user, :data_coordinator) } + + before do + sign_in user + end + + it "returns page not found" do + get collection_resource_delete_confirmation_path(collection_resource) + expect(response).to have_http_status(:not_found) + end + end + + context "when user is signed in as a data provider" do + let(:user) { create(:user, :data_provider) } + + before do + sign_in user + end + + it "returns page not found" do + get collection_resource_delete_confirmation_path(collection_resource) + expect(response).to have_http_status(:not_found) + end + end + + context "when user is signed in as a support user" do + let(:user) { create(:user, :support) } + + before do + allow(Time.zone).to receive(:today).and_return(Time.zone.local(2025, 1, 8)) + allow(user).to receive(:need_two_factor_authentication?).and_return(false) + sign_in user + end + + context "and the file exists on S3" do + it "displays delete confirmation page content" do + get collection_resource_delete_confirmation_path(collection_resource) + + expect(page).to have_content("Sales 2025 to 2026") + expect(page).to have_content("Are you sure you want to delete the additional resource?") + expect(page).to have_content("This file will no longer be available for users to download.") + expect(page).to have_content("You will not be able to undo this action.") + expect(page).to have_button("Delete resource") + expect(page).to have_link("Back", href: collection_resources_path) + expect(page).to have_link("Cancel", href: collection_resources_path) + end + end + end + end end