ba097c736e
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
118 lines
3.1 KiB
Elixir
118 lines
3.1 KiB
Elixir
defmodule Mobilizon.MediaTest do
|
|
use Mobilizon.DataCase
|
|
|
|
import Mobilizon.Factory
|
|
|
|
alias Mobilizon.{Config, Medias}
|
|
alias Mobilizon.Medias.Media
|
|
|
|
alias Mobilizon.Web.Upload.Uploader
|
|
|
|
describe "media" do
|
|
setup [:ensure_local_uploader]
|
|
alias Mobilizon.Medias.Media
|
|
|
|
@valid_attrs %{
|
|
file: %{
|
|
url: "https://something.tld/media/something",
|
|
name: "something old"
|
|
}
|
|
}
|
|
|
|
test "get_media!/1 returns the media with given id" do
|
|
media = insert(:media)
|
|
assert Medias.get_media!(media.id).id == media.id
|
|
end
|
|
|
|
test "create_media/1 with valid data creates a media" do
|
|
assert {:ok, %Media{} = media} =
|
|
Medias.create_media(Map.put(@valid_attrs, :actor_id, insert(:actor).id))
|
|
|
|
assert media.file.name == "something old"
|
|
end
|
|
end
|
|
|
|
describe "delete_media/1" do
|
|
setup do
|
|
File.rm_rf!(Config.get!([Uploader.Local, :uploads]))
|
|
File.mkdir(Config.get!([Uploader.Local, :uploads]))
|
|
:ok
|
|
end
|
|
|
|
test "deletes the media" do
|
|
media = insert(:media)
|
|
|
|
%URI{path: "/media/" <> path} = URI.parse(media.file.url)
|
|
|
|
assert File.exists?(
|
|
Config.get!([Uploader.Local, :uploads]) <>
|
|
"/" <> path
|
|
)
|
|
|
|
assert {:ok, %Media{}} = Medias.delete_media(media)
|
|
assert_raise Ecto.NoResultsError, fn -> Medias.get_media!(media.id) end
|
|
|
|
refute File.exists?(
|
|
Config.get!([Uploader.Local, :uploads]) <>
|
|
"/" <> path
|
|
)
|
|
end
|
|
|
|
test "doesn't delete the media if two media entities are using the same URL" do
|
|
Config.put([Mobilizon.Web.Upload, :filters], [
|
|
Mobilizon.Web.Upload.Filter.Dedupe
|
|
])
|
|
|
|
media1 = insert(:media)
|
|
media2 = insert(:media)
|
|
|
|
assert media1.file.url == media2.file.url
|
|
|
|
%URI{path: "/media/" <> path} = URI.parse(media1.file.url)
|
|
|
|
assert File.exists?(
|
|
Config.get!([Uploader.Local, :uploads]) <>
|
|
"/" <> path
|
|
)
|
|
|
|
assert {:ok, %Media{}} = Medias.delete_media(media1)
|
|
assert_raise Ecto.NoResultsError, fn -> Medias.get_media!(media1.id) end
|
|
|
|
assert File.exists?(
|
|
Config.get!([Uploader.Local, :uploads]) <>
|
|
"/" <> path
|
|
)
|
|
|
|
Config.put([Mobilizon.Web.Upload, :filters], [])
|
|
end
|
|
|
|
test "doesn't delete the media if the same file is being used in a profile" do
|
|
Config.put([Mobilizon.Web.Upload, :filters], [
|
|
Mobilizon.Web.Upload.Filter.Dedupe
|
|
])
|
|
|
|
actor = insert(:actor)
|
|
media = insert(:media)
|
|
|
|
assert media.file.url == actor.avatar.url
|
|
|
|
%URI{path: "/media/" <> path} = URI.parse(media.file.url)
|
|
|
|
assert File.exists?(
|
|
Config.get!([Uploader.Local, :uploads]) <>
|
|
"/" <> path
|
|
)
|
|
|
|
assert {:ok, %Media{}} = Medias.delete_media(media)
|
|
assert_raise Ecto.NoResultsError, fn -> Medias.get_media!(media.id) end
|
|
|
|
assert File.exists?(
|
|
Config.get!([Uploader.Local, :uploads]) <>
|
|
"/" <> path
|
|
)
|
|
|
|
Config.put([Mobilizon.Web.Upload, :filters], [])
|
|
end
|
|
end
|
|
end
|