From 6e0bdee5b6639a35eb3c79418e4a3d6de58fde14 Mon Sep 17 00:00:00 2001 From: Kieran Eglin Date: Tue, 2 Apr 2024 14:38:24 -0700 Subject: [PATCH] Added new deletion options to controller and UI --- .../media_items/media_item_controller.ex | 13 ++---- .../media_item_html/show.html.heex | 16 ++++++-- .../media_item_controller_test.exs | 41 ++++++++----------- 3 files changed, 32 insertions(+), 38 deletions(-) diff --git a/lib/pinchflat_web/controllers/media_items/media_item_controller.ex b/lib/pinchflat_web/controllers/media_items/media_item_controller.ex index 31a9ef4..2aac648 100644 --- a/lib/pinchflat_web/controllers/media_items/media_item_controller.ex +++ b/lib/pinchflat_web/controllers/media_items/media_item_controller.ex @@ -17,19 +17,12 @@ defmodule PinchflatWeb.MediaItems.MediaItemController do end def delete(conn, %{"id" => id} = params) do - delete_files = Map.get(params, "delete_files", false) + prevent_download = Map.get(params, "prevent_download", false) media_item = Media.get_media_item!(id) - {:ok, _} = Media.delete_media_item(media_item, delete_files: delete_files) - - flash_message = - if delete_files do - "Record and files deleted successfully." - else - "Record deleted successfully. Files were not deleted." - end + {:ok, _} = Media.delete_media_files(media_item, prevent_download: prevent_download) conn - |> put_flash(:info, flash_message) + |> put_flash(:info, "Files deleted successfully.") |> redirect(to: ~p"/sources/#{media_item.source_id}") end diff --git a/lib/pinchflat_web/controllers/media_items/media_item_html/show.html.heex b/lib/pinchflat_web/controllers/media_items/media_item_html/show.html.heex index fb81b1a..d325f6f 100644 --- a/lib/pinchflat_web/controllers/media_items/media_item_html/show.html.heex +++ b/lib/pinchflat_web/controllers/media_items/media_item_html/show.html.heex @@ -4,7 +4,7 @@ <.icon name="hero-arrow-left" class="w-10 h-10 hover:dark:text-white" />

- Media Item #<%= @media_item.id %> + <%= StringUtils.truncate(@media_item.title, 35) %>

@@ -15,13 +15,22 @@ <.button_dropdown text="Actions" class="justify-center w-full sm:w-50"> <:option> <.link - href={~p"/sources/#{@media_item.source_id}/media/#{@media_item}?delete_files=true"} + href={~p"/sources/#{@media_item.source_id}/media/#{@media_item}"} method="delete" - data-confirm="Are you sure you want to delete this record and all associated files on disk? This cannot be undone." + data-confirm="Are you sure you want to delete all files for this media item? This cannot be undone." > Delete Files + <:option> + <.link + href={~p"/sources/#{@media_item.source_id}/media/#{@media_item}?prevent_download=true"} + method="delete" + data-confirm="Are you sure you want to delete all files for this media item and prevent it from re-downloading in the future? This cannot be undone." + > + Delete and Ignore + + @@ -32,6 +41,7 @@ <.media_preview media_item={@media_item} /> <% end %> +

<%= @media_item.title %>

Attributes

Source: diff --git a/test/pinchflat_web/controllers/media_item_controller_test.exs b/test/pinchflat_web/controllers/media_item_controller_test.exs index 428d337..c1beed0 100644 --- a/test/pinchflat_web/controllers/media_item_controller_test.exs +++ b/test/pinchflat_web/controllers/media_item_controller_test.exs @@ -10,27 +10,28 @@ defmodule PinchflatWeb.MediaItemControllerTest do test "renders the page", %{conn: conn, media_item: media_item} do conn = get(conn, ~p"/sources/#{media_item.source_id}/media/#{media_item}") - assert html_response(conn, 200) =~ "Media Item ##{media_item.id}" + + assert html_response(conn, 200) =~ "#{media_item.title}" end end - describe "delete media when just deleting the records" do + describe "delete media" do setup do media_item = media_item_with_attachments() %{media_item: media_item} end - test "the media item is deleted", %{conn: conn, media_item: media_item} do + test "the media item not is deleted", %{conn: conn, media_item: media_item} do delete(conn, ~p"/sources/#{media_item.source_id}/media/#{media_item.id}") - assert_raise Ecto.NoResultsError, fn -> Repo.reload!(media_item) end + assert Repo.reload!(media_item) end - test "the files are not deleted", %{conn: conn, media_item: media_item} do + test "the files are deleted", %{conn: conn, media_item: media_item} do delete(conn, ~p"/sources/#{media_item.source_id}/media/#{media_item.id}") - assert File.exists?(media_item.media_filepath) + refute File.exists?(media_item.media_filepath) end test "redirects to the source page", %{conn: conn, media_item: media_item} do @@ -38,31 +39,21 @@ defmodule PinchflatWeb.MediaItemControllerTest do assert redirected_to(conn) == ~p"/sources/#{media_item.source_id}" end - end - describe "delete media when deleting the records and files" do - setup do - media_item = media_item_with_attachments() + test "doesn't prevent re-download by default", %{conn: conn, media_item: media_item} do + delete(conn, ~p"/sources/#{media_item.source_id}/media/#{media_item.id}") - %{media_item: media_item} + media_item = Repo.reload(media_item) + + refute media_item.prevent_download end - test "the media item is deleted", %{conn: conn, media_item: media_item} do - delete(conn, ~p"/sources/#{media_item.source_id}/media/#{media_item.id}?delete_files=true") + test "can optionally prevent re-download", %{conn: conn, media_item: media_item} do + delete(conn, ~p"/sources/#{media_item.source_id}/media/#{media_item.id}?prevent_download=true") - assert_raise Ecto.NoResultsError, fn -> Repo.reload!(media_item) end - end + media_item = Repo.reload(media_item) - test "the files are deleted", %{conn: conn, media_item: media_item} do - delete(conn, ~p"/sources/#{media_item.source_id}/media/#{media_item.id}?delete_files=true") - - refute File.exists?(media_item.media_filepath) - end - - test "redirects to the source page", %{conn: conn, media_item: media_item} do - conn = delete(conn, ~p"/sources/#{media_item.source_id}/media/#{media_item.id}?delete_files=true") - - assert redirected_to(conn) == ~p"/sources/#{media_item.source_id}" + assert media_item.prevent_download end end