Fixed deduplicated files from orphan media being deleted as well
Happens when a file is uploaded, then orphaned, and a similar file is used somewhere. The CleanMedia job service didn't consider that case Signed-off-by: Thomas Citharel <tcit@tcit.fr>
This commit is contained in:
@@ -16,7 +16,7 @@ defmodule Mobilizon.Service.CleanOrphanMediaTest do
|
||||
refute is_nil(Medias.get_media(media_id))
|
||||
refute is_nil(Medias.get_media(media_2_id))
|
||||
|
||||
assert {:ok, [found_media]} = CleanOrphanMedia.clean()
|
||||
assert {:ok, [[found_media]]} = CleanOrphanMedia.clean()
|
||||
assert found_media.id == media_id
|
||||
|
||||
assert is_nil(Medias.get_media(media_id))
|
||||
@@ -31,7 +31,7 @@ defmodule Mobilizon.Service.CleanOrphanMediaTest do
|
||||
refute is_nil(Medias.get_media(media_id))
|
||||
refute is_nil(Medias.get_media(media_2_id))
|
||||
|
||||
assert {:ok, [found_media]} = CleanOrphanMedia.clean(dry_run: true)
|
||||
assert {:ok, [[found_media]]} = CleanOrphanMedia.clean(dry_run: true)
|
||||
assert found_media.id == media_id
|
||||
|
||||
refute is_nil(Medias.get_media(media_id))
|
||||
@@ -46,7 +46,7 @@ defmodule Mobilizon.Service.CleanOrphanMediaTest do
|
||||
refute is_nil(Medias.get_media(media_id))
|
||||
refute is_nil(Medias.get_media(media_2_id))
|
||||
|
||||
assert {:ok, [found_media]} = CleanOrphanMedia.clean(grace_period: 12)
|
||||
assert {:ok, [[found_media]]} = CleanOrphanMedia.clean(grace_period: 12)
|
||||
assert found_media.id == media_id
|
||||
|
||||
assert is_nil(Medias.get_media(media_id))
|
||||
|
||||
@@ -280,7 +280,7 @@ defmodule Mobilizon.Factory do
|
||||
%Mobilizon.Medias.File{
|
||||
name: "My Media",
|
||||
url: url,
|
||||
content_type: "image/png",
|
||||
content_type: "image/jpg",
|
||||
size: 13_120
|
||||
}
|
||||
end
|
||||
|
||||
@@ -43,21 +43,22 @@ defmodule Mix.Tasks.Mobilizon.Media.CleanOrphanTest do
|
||||
test "with media returned" do
|
||||
media1 = insert(:media)
|
||||
media2 = insert(:media)
|
||||
media3 = insert(:media, file: create_file())
|
||||
|
||||
with_mock CleanOrphanMedia,
|
||||
clean: fn [dry_run: true, grace_period: 48] -> {:ok, [media1, media2]} end do
|
||||
clean: fn [dry_run: true, grace_period: 48] -> {:ok, [[media1, media2], [media3]]} end do
|
||||
CleanOrphan.run(["--dry-run"])
|
||||
assert_received {:mix_shell, :info, [output_received]}
|
||||
assert output_received == "List of files that would have been deleted"
|
||||
assert_received {:mix_shell, :info, [output_received]}
|
||||
|
||||
assert output_received ==
|
||||
"ID: #{media1.id}, Actor: #{media1.actor_id}, URL: #{media1.file.url}"
|
||||
"ID: #{media1.id}, Actor: #{media1.actor_id}, Deduplicated 2 times, URL: #{media1.file.url}"
|
||||
|
||||
assert_received {:mix_shell, :info, [output_received]}
|
||||
|
||||
assert output_received ==
|
||||
"ID: #{media2.id}, Actor: #{media2.actor_id}, URL: #{media2.file.url}"
|
||||
"ID: #{media3.id}, Actor: #{media3.actor_id}, Deduplicated 1 times, URL: #{media3.file.url}"
|
||||
|
||||
assert_received {:mix_shell, :info, [output_received]}
|
||||
assert output_received == "2 files would have been deleted"
|
||||
@@ -78,21 +79,22 @@ defmodule Mix.Tasks.Mobilizon.Media.CleanOrphanTest do
|
||||
test "with media returned" do
|
||||
media1 = insert(:media)
|
||||
media2 = insert(:media)
|
||||
media3 = insert(:media, file: create_file())
|
||||
|
||||
with_mock CleanOrphanMedia,
|
||||
clean: fn [dry_run: false, grace_period: 48] -> {:ok, [media1, media2]} end do
|
||||
clean: fn [dry_run: false, grace_period: 48] -> {:ok, [[media1, media2], [media3]]} end do
|
||||
CleanOrphan.run(["--verbose"])
|
||||
assert_received {:mix_shell, :info, [output_received]}
|
||||
assert output_received == "List of files that have been deleted"
|
||||
assert_received {:mix_shell, :info, [output_received]}
|
||||
|
||||
assert output_received ==
|
||||
"ID: #{media1.id}, Actor: #{media1.actor_id}, URL: #{media1.file.url}"
|
||||
"ID: #{media1.id}, Actor: #{media1.actor_id}, Deduplicated 2 times, URL: #{media1.file.url}"
|
||||
|
||||
assert_received {:mix_shell, :info, [output_received]}
|
||||
|
||||
assert output_received ==
|
||||
"ID: #{media2.id}, Actor: #{media2.actor_id}, URL: #{media2.file.url}"
|
||||
"ID: #{media3.id}, Actor: #{media3.actor_id}, Deduplicated 1 times, URL: #{media3.file.url}"
|
||||
|
||||
assert_received {:mix_shell, :info, [output_received]}
|
||||
assert output_received == "2 files have been deleted"
|
||||
@@ -121,4 +123,29 @@ defmodule Mix.Tasks.Mobilizon.Media.CleanOrphanTest do
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
defp create_file do
|
||||
File.cp!("test/fixtures/picture.png", "test/fixtures/picture_tmp.png")
|
||||
|
||||
file = %Plug.Upload{
|
||||
content_type: "image/png",
|
||||
path: Path.absname("test/fixtures/picture_tmp.png"),
|
||||
filename: "image.png"
|
||||
}
|
||||
|
||||
{:ok, data} = Mobilizon.Web.Upload.store(file)
|
||||
|
||||
%{
|
||||
content_type: "image/png",
|
||||
name: "image.png",
|
||||
url: url
|
||||
} = data
|
||||
|
||||
%Mobilizon.Medias.File{
|
||||
name: "My Media",
|
||||
url: url,
|
||||
content_type: "image/png",
|
||||
size: 13_120
|
||||
}
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user