Hooked up media deletion user script

This commit is contained in:
Kieran Eglin 2024-05-01 14:38:06 -07:00
parent 7a61ac722b
commit e0d6f0ad88
No known key found for this signature in database
GPG key ID: 193984967FCF432D
8 changed files with 90 additions and 1 deletions

View file

@ -10,8 +10,10 @@ defmodule Pinchflat.Media do
alias Pinchflat.Sources.Source alias Pinchflat.Sources.Source
alias Pinchflat.Media.MediaItem alias Pinchflat.Media.MediaItem
alias Pinchflat.Media.MediaQuery alias Pinchflat.Media.MediaQuery
alias Pinchflat.Metadata.MediaMetadata
alias Pinchflat.Utils.FilesystemUtils alias Pinchflat.Utils.FilesystemUtils
alias Pinchflat.Metadata.MediaMetadata
alias Pinchflat.Lifecycle.UserScripts.CommandRunner, as: UserScriptRunner
@doc """ @doc """
Returns the list of media_items. Returns the list of media_items.
@ -180,6 +182,7 @@ defmodule Pinchflat.Media do
if delete_files do if delete_files do
{:ok, _} = do_delete_media_files(media_item) {:ok, _} = do_delete_media_files(media_item)
:ok = run_user_script(:media_deleted, media_item)
end end
# Should delete these no matter what # Should delete these no matter what
@ -202,6 +205,7 @@ defmodule Pinchflat.Media do
Tasks.delete_tasks_for(media_item) Tasks.delete_tasks_for(media_item)
{:ok, _} = do_delete_media_files(media_item) {:ok, _} = do_delete_media_files(media_item)
:ok = run_user_script(:media_deleted, media_item)
update_media_item(media_item, Map.merge(filepath_attrs, addl_attrs)) update_media_item(media_item, Map.merge(filepath_attrs, addl_attrs))
end end
@ -237,4 +241,10 @@ defmodule Pinchflat.Media do
|> Enum.filter(&is_binary/1) |> Enum.filter(&is_binary/1)
|> Enum.each(&FilesystemUtils.delete_file_and_remove_empty_directories/1) |> Enum.each(&FilesystemUtils.delete_file_and_remove_empty_directories/1)
end end
defp run_user_script(event, media_item) do
runner = Application.get_env(:pinchflat, :user_script_runner, UserScriptRunner)
runner.run(event, media_item)
end
end end

View file

@ -1,13 +1,22 @@
defmodule Pinchflat.Downloading.MediaRetentionWorkerTest do defmodule Pinchflat.Downloading.MediaRetentionWorkerTest do
use Pinchflat.DataCase use Pinchflat.DataCase
import Mox
import Pinchflat.MediaFixtures import Pinchflat.MediaFixtures
import Pinchflat.SourcesFixtures import Pinchflat.SourcesFixtures
alias Pinchflat.Media alias Pinchflat.Media
alias Pinchflat.Downloading.MediaRetentionWorker alias Pinchflat.Downloading.MediaRetentionWorker
setup :verify_on_exit!
describe "perform/1" do describe "perform/1" do
setup do
stub(UserScriptRunnerMock, :run, fn _event_type, _data -> :ok end)
:ok
end
test "deletes media files that are past their retention date" do test "deletes media files that are past their retention date" do
{_source, old_media_item, new_media_item} = prepare_records() {_source, old_media_item, new_media_item} = prepare_records()

View file

@ -749,6 +749,12 @@ defmodule Pinchflat.MediaTest do
end end
describe "delete_media_item/2 when testing file deletion" do describe "delete_media_item/2 when testing file deletion" do
setup do
stub(UserScriptRunnerMock, :run, fn _event_type, _data -> :ok end)
:ok
end
test "deletes the media item's files" do test "deletes the media item's files" do
media_item = media_item_with_attachments() media_item = media_item_with_attachments()
@ -799,9 +805,27 @@ defmodule Pinchflat.MediaTest do
:ok = File.rm(Path.join([root_directory, "test.txt"])) :ok = File.rm(Path.join([root_directory, "test.txt"]))
:ok = File.rmdir(root_directory) :ok = File.rmdir(root_directory)
end end
test "calls the user script runner" do
media_item = media_item_with_attachments()
expect(UserScriptRunnerMock, :run, fn :media_deleted, data ->
assert data.id == media_item.id
:ok
end)
assert {:ok, _} = Media.delete_media_item(media_item, delete_files: true)
end
end end
describe "delete_media_files/2" do describe "delete_media_files/2" do
setup do
stub(UserScriptRunnerMock, :run, fn _event_type, _data -> :ok end)
:ok
end
test "does not delete the media_item" do test "does not delete the media_item" do
media_item = media_item_fixture() media_item = media_item_fixture()
@ -854,6 +878,18 @@ defmodule Pinchflat.MediaTest do
assert {:ok, updated_media_item} = Media.delete_media_files(media_item, %{prevent_download: true}) assert {:ok, updated_media_item} = Media.delete_media_files(media_item, %{prevent_download: true})
assert updated_media_item.prevent_download assert updated_media_item.prevent_download
end end
test "calls the user script runner" do
media_item = media_item_with_attachments()
expect(UserScriptRunnerMock, :run, fn :media_deleted, data ->
assert data.id == media_item.id
:ok
end)
assert {:ok, _} = Media.delete_media_files(media_item)
end
end end
describe "change_media_item/1" do describe "change_media_item/1" do

View file

@ -1,6 +1,7 @@
defmodule Pinchflat.ProfilesTest do defmodule Pinchflat.ProfilesTest do
use Pinchflat.DataCase use Pinchflat.DataCase
import Mox
import Pinchflat.MediaFixtures import Pinchflat.MediaFixtures
import Pinchflat.SourcesFixtures import Pinchflat.SourcesFixtures
import Pinchflat.ProfilesFixtures import Pinchflat.ProfilesFixtures
@ -10,6 +11,8 @@ defmodule Pinchflat.ProfilesTest do
@invalid_attrs %{name: nil, output_path_template: nil} @invalid_attrs %{name: nil, output_path_template: nil}
setup :verify_on_exit!
describe "schema" do describe "schema" do
test "can be JSON encoded without error" do test "can be JSON encoded without error" do
profile = media_profile_fixture() profile = media_profile_fixture()
@ -112,6 +115,12 @@ defmodule Pinchflat.ProfilesTest do
end end
describe "delete_media_profile/2 when deleting files" do describe "delete_media_profile/2 when deleting files" do
setup do
stub(UserScriptRunnerMock, :run, fn _event_type, _data -> :ok end)
:ok
end
test "still deletes all the needful records" do test "still deletes all the needful records" do
media_profile = media_profile_fixture() media_profile = media_profile_fixture()
source = source_fixture(media_profile_id: media_profile.id) source = source_fixture(media_profile_id: media_profile.id)

View file

@ -618,6 +618,12 @@ defmodule Pinchflat.SourcesTest do
end end
describe "delete_source/2 when deleting files" do describe "delete_source/2 when deleting files" do
setup do
stub(UserScriptRunnerMock, :run, fn _event_type, _data -> :ok end)
:ok
end
test "deletes source and media_items" do test "deletes source and media_items" do
source = source_fixture() source = source_fixture()
media_item = media_item_with_attachments(%{source_id: source.id}) media_item = media_item_with_attachments(%{source_id: source.id})

View file

@ -1,11 +1,14 @@
defmodule PinchflatWeb.MediaItemControllerTest do defmodule PinchflatWeb.MediaItemControllerTest do
use PinchflatWeb.ConnCase use PinchflatWeb.ConnCase
import Mox
import Pinchflat.MediaFixtures import Pinchflat.MediaFixtures
alias Pinchflat.Repo alias Pinchflat.Repo
alias Pinchflat.Downloading.MediaDownloadWorker alias Pinchflat.Downloading.MediaDownloadWorker
setup :verify_on_exit!
describe "show media" do describe "show media" do
setup [:create_media_item] setup [:create_media_item]
@ -49,6 +52,7 @@ defmodule PinchflatWeb.MediaItemControllerTest do
describe "delete media" do describe "delete media" do
setup do setup do
media_item = media_item_with_attachments() media_item = media_item_with_attachments()
stub(UserScriptRunnerMock, :run, fn _event_type, _data -> :ok end)
%{media_item: media_item} %{media_item: media_item}
end end

View file

@ -1,6 +1,7 @@
defmodule PinchflatWeb.MediaProfileControllerTest do defmodule PinchflatWeb.MediaProfileControllerTest do
use PinchflatWeb.ConnCase use PinchflatWeb.ConnCase
import Mox
import Pinchflat.MediaFixtures import Pinchflat.MediaFixtures
import Pinchflat.SourcesFixtures import Pinchflat.SourcesFixtures
import Pinchflat.ProfilesFixtures import Pinchflat.ProfilesFixtures
@ -15,6 +16,8 @@ defmodule PinchflatWeb.MediaProfileControllerTest do
} }
@invalid_attrs %{name: nil, output_path_template: nil} @invalid_attrs %{name: nil, output_path_template: nil}
setup :verify_on_exit!
setup do setup do
Settings.set(onboarding: false) Settings.set(onboarding: false)
@ -136,6 +139,12 @@ defmodule PinchflatWeb.MediaProfileControllerTest do
describe "delete media_profile when deleting the records and files" do describe "delete media_profile when deleting the records and files" do
setup [:create_media_profile] setup [:create_media_profile]
setup do
stub(UserScriptRunnerMock, :run, fn _event_type, _data -> :ok end)
:ok
end
test "deletes chosen media_profile and its associations", %{conn: conn, media_profile: media_profile} do test "deletes chosen media_profile and its associations", %{conn: conn, media_profile: media_profile} do
source = source_fixture(media_profile_id: media_profile.id) source = source_fixture(media_profile_id: media_profile.id)
media_item = media_item_with_attachments(%{source_id: source.id}) media_item = media_item_with_attachments(%{source_id: source.id})

View file

@ -145,6 +145,12 @@ defmodule PinchflatWeb.SourceControllerTest do
describe "delete source when deleting the records and files" do describe "delete source when deleting the records and files" do
setup [:create_source] setup [:create_source]
setup do
stub(UserScriptRunnerMock, :run, fn _event_type, _data -> :ok end)
:ok
end
test "deletes chosen source and media_items", %{conn: conn, source: source, media_item: media_item} do test "deletes chosen source and media_items", %{conn: conn, source: source, media_item: media_item} do
delete(conn, ~p"/sources/#{source}?delete_files=true") delete(conn, ~p"/sources/#{source}?delete_files=true")