Hooked up media deletion user script
This commit is contained in:
parent
7a61ac722b
commit
e0d6f0ad88
8 changed files with 90 additions and 1 deletions
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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()
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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})
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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})
|
||||||
|
|
|
||||||
|
|
@ -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")
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue