Delete media items (#20)

* Added method for deleting media files and their content

* Adds controllers and methods for deleting media and files

* Improved tmpfile setup and teardown for tests

* Actually got tmpfile cleanup running once per suite run

* Finally fixed flash messages
This commit is contained in:
Kieran authored and GitHub committed 2024-02-15 13:51:19 -08:00
1 parent 060e340558
commit 9d3b9cc063
17 files changed
+305 -33

No files matched your search

+73
View File
@@ -221,6 +221,24 @@ defmodule Pinchflat.MediaTest do
end
end
describe "media_filepaths/1" do
test "returns filepaths in a flat list" do
filepaths = %{
media_filepath: "/video/test.mp4",
thumbnail_filepath: "/video/test.jpg",
subtitle_filepaths: [["en", "video/test.srt"]]
}
media_item = media_item_fixture(filepaths)
assert Media.media_filepaths(media_item) == [
"/video/test.mp4",
"/video/test.jpg",
"video/test.srt"
]
end
end
describe "create_media_item/1" do
test "creating with valid data creates a media_item" do
valid_attrs = %{
@@ -282,6 +300,61 @@ defmodule Pinchflat.MediaTest do
end
end
describe "delete_attachments/1" do
test "deletes the media item's files" do
media_item = media_item_with_attachments()
assert {:ok, _} = Media.delete_attachments(media_item)
refute File.exists?(media_item.media_filepath)
end
test "does not delete the media item" do
media_item = media_item_with_attachments()
assert {:ok, _} = Media.delete_attachments(media_item)
assert Repo.reload!(media_item)
end
test "deletes the parent folder if it is empty" do
media_item = media_item_with_attachments()
root_directory = Path.dirname(media_item.media_filepath)
assert {:ok, _} = Media.delete_attachments(media_item)
refute File.exists?(root_directory)
end
test "does not delete the parent folder if it is not empty" do
media_item = media_item_with_attachments()
root_directory = Path.dirname(media_item.media_filepath)
File.touch(Path.join([root_directory, "test.txt"]))
assert {:ok, _} = Media.delete_attachments(media_item)
assert File.exists?(root_directory)
:ok = File.rm(Path.join([root_directory, "test.txt"]))
:ok = File.rmdir(root_directory)
end
end
describe "delete_media_item_and_attachments/1" do
setup do
media_item = media_item_with_attachments()
{:ok, media_item: media_item}
end
test "deletes the media item", %{media_item: media_item} do
assert {:ok, _} = Media.delete_media_item_and_attachments(media_item)
assert_raise Ecto.NoResultsError, fn -> Media.get_media_item!(media_item.id) end
end
test "deletes associated files", %{media_item: media_item} do
assert File.exists?(media_item.media_filepath)
assert {:ok, _} = Media.delete_media_item_and_attachments(media_item)
refute File.exists?(media_item.media_filepath)
end
end
describe "change_media_item/1" do
test "change_media_item/1 returns a media_item changeset" do
media_item = media_item_fixture()
@@ -12,7 +12,7 @@ defmodule Pinchflat.Profiles.Options.YtDlp.DownloadOptionBuilderTest do
test "it generates an expanded output path based on the given template" do
assert {:ok, res} = DownloadOptionBuilder.build(@media_profile)
assert {:output, "/tmp/videos/%(title)S.%(ext)s"} in res
assert {:output, "/tmp/test/videos/%(title)S.%(ext)s"} in res
end
end