@@ -221,6 +221,24 @@ defmodule Pinchflat.MediaTest do
221221 end
222222 end
223223
224+ describe "media_filepaths/1" do
225+ test "returns filepaths in a flat list" do
226+ filepaths = % {
227+ media_filepath: "/video/test.mp4" ,
228+ thumbnail_filepath: "/video/test.jpg" ,
229+ subtitle_filepaths: [ [ "en" , "video/test.srt" ] ]
230+ }
231+
232+ media_item = media_item_fixture ( filepaths )
233+
234+ assert Media . media_filepaths ( media_item ) == [
235+ "/video/test.mp4" ,
236+ "/video/test.jpg" ,
237+ "video/test.srt"
238+ ]
239+ end
240+ end
241+
224242 describe "create_media_item/1" do
225243 test "creating with valid data creates a media_item" do
226244 valid_attrs = % {
@@ -282,6 +300,61 @@ defmodule Pinchflat.MediaTest do
282300 end
283301 end
284302
303+ describe "delete_attachments/1" do
304+ test "deletes the media item's files" do
305+ media_item = media_item_with_attachments ( )
306+
307+ assert { :ok , _ } = Media . delete_attachments ( media_item )
308+ refute File . exists? ( media_item . media_filepath )
309+ end
310+
311+ test "does not delete the media item" do
312+ media_item = media_item_with_attachments ( )
313+
314+ assert { :ok , _ } = Media . delete_attachments ( media_item )
315+
316+ assert Repo . reload! ( media_item )
317+ end
318+
319+ test "deletes the parent folder if it is empty" do
320+ media_item = media_item_with_attachments ( )
321+ root_directory = Path . dirname ( media_item . media_filepath )
322+
323+ assert { :ok , _ } = Media . delete_attachments ( media_item )
324+ refute File . exists? ( root_directory )
325+ end
326+
327+ test "does not delete the parent folder if it is not empty" do
328+ media_item = media_item_with_attachments ( )
329+ root_directory = Path . dirname ( media_item . media_filepath )
330+ File . touch ( Path . join ( [ root_directory , "test.txt" ] ) )
331+
332+ assert { :ok , _ } = Media . delete_attachments ( media_item )
333+ assert File . exists? ( root_directory )
334+
335+ :ok = File . rm ( Path . join ( [ root_directory , "test.txt" ] ) )
336+ :ok = File . rmdir ( root_directory )
337+ end
338+ end
339+
340+ describe "delete_media_item_and_attachments/1" do
341+ setup do
342+ media_item = media_item_with_attachments ( )
343+ { :ok , media_item: media_item }
344+ end
345+
346+ test "deletes the media item" , % { media_item: media_item } do
347+ assert { :ok , _ } = Media . delete_media_item_and_attachments ( media_item )
348+ assert_raise Ecto.NoResultsError , fn -> Media . get_media_item! ( media_item . id ) end
349+ end
350+
351+ test "deletes associated files" , % { media_item: media_item } do
352+ assert File . exists? ( media_item . media_filepath )
353+ assert { :ok , _ } = Media . delete_media_item_and_attachments ( media_item )
354+ refute File . exists? ( media_item . media_filepath )
355+ end
356+ end
357+
285358 describe "change_media_item/1" do
286359 test "change_media_item/1 returns a media_item changeset" do
287360 media_item = media_item_fixture ( )
0 commit comments