mobilizon.chapril.org-mobil.../test/service/workers/legacy_notifier_builder_tes...

193 lines
5.9 KiB
Elixir

defmodule Mobilizon.Service.Workers.LegacyNotifierBuilderTest do
@moduledoc """
Test the ActivityBuilder module
"""
alias Mobilizon.Activities.Activity
alias Mobilizon.Actors.Actor
alias Mobilizon.Discussions.Comment
alias Mobilizon.Events.Event
alias Mobilizon.Service.Notifier.Mock, as: NotifierMock
alias Mobilizon.Service.Workers.LegacyNotifierBuilder
alias Mobilizon.Users.User
use Mobilizon.DataCase, async: true
import Mox
import Mobilizon.Factory
setup_all do
Mox.defmock(Mobilizon.Service.Notifier.Mock, for: Mobilizon.Service.Notifier)
Mobilizon.Config.put([Mobilizon.Service.Notifier, :notifiers], [
Mobilizon.Service.Notifier.Mock
])
:ok
end
@mentionned %{
"type" => "comment",
"subject" => "event_comment_mention",
"object_type" => "comment",
"inserted_at" => DateTime.utc_now(),
"op" => "legacy_notify"
}
@announcement %{
"type" => "comment",
"subject" => "participation_event_comment",
"object_type" => "comment",
"inserted_at" => DateTime.utc_now(),
"op" => "legacy_notify"
}
setup :verify_on_exit!
describe "Generates a comment mention notification " do
test "not if the actor is remote" do
%User{} = user1 = insert(:user)
%Actor{id: actor_id} = actor = insert(:actor, user: user1)
%Actor{id: actor_id_2} = insert(:actor, domain: "remote.tld", user: nil)
%Event{title: title, uuid: uuid} = event = insert(:event)
%Comment{id: comment_id} = insert(:comment, event: event, actor: actor)
args =
Map.merge(@mentionned, %{
"subject_params" => %{
event_uuid: uuid,
event_title: title
},
"author_id" => actor_id,
"object_id" => to_string(comment_id),
"mentions" => [actor_id_2]
})
NotifierMock
|> expect(:ready?, 0, fn -> true end)
|> expect(:send, 0, fn %User{},
%Activity{
type: :comment,
subject: :event_comment_mention,
object_type: :comment
},
[single_activity: true] ->
{:ok, :sent}
end)
assert :ok == LegacyNotifierBuilder.perform(%Oban.Job{args: args})
end
test "if the actor mentionned is local" do
%User{} = user1 = insert(:user)
%User{} = user2 = insert(:user)
%Actor{id: actor_id} = actor = insert(:actor, user: user1)
%Actor{id: actor_id_2} = insert(:actor, user: user2)
%Event{title: title, uuid: uuid} = event = insert(:event)
%Comment{id: comment_id} = insert(:comment, event: event, actor: actor)
args =
Map.merge(@mentionned, %{
"subject_params" => %{
event_uuid: uuid,
event_title: title
},
"author_id" => actor_id,
"object_id" => to_string(comment_id),
"mentions" => [actor_id_2]
})
NotifierMock
|> expect(:ready?, fn -> true end)
|> expect(:send, fn %User{},
%Activity{
type: :comment,
subject: :event_comment_mention,
object_type: :comment
},
[single_activity: true] ->
{:ok, :sent}
end)
assert :ok == LegacyNotifierBuilder.perform(%Oban.Job{args: args})
end
end
describe "Generates an announcement comment notification" do
test "not if there's no participants" do
%User{} = user1 = insert(:user)
%Actor{id: actor_id} = actor = insert(:actor, user: user1)
%Actor{} = insert(:actor, domain: "remote.tld", user: nil)
%Event{title: title, uuid: uuid, id: event_id} = event = insert(:event)
%Comment{id: comment_id} = insert(:comment, event: event, actor: actor)
args =
Map.merge(@announcement, %{
"subject_params" => %{
"event_uuid" => uuid,
"event_title" => title,
"event_id" => event_id
},
"author_id" => actor_id,
"object_id" => to_string(comment_id)
})
NotifierMock
|> expect(:ready?, 0, fn -> true end)
|> expect(:send, 0, fn %User{},
%Activity{
type: :comment,
subject: :participation_event_comment,
object_type: :comment
},
[single_activity: true] ->
{:ok, :sent}
end)
assert :ok == LegacyNotifierBuilder.perform(%Oban.Job{args: args})
end
test "if there's some participants" do
%User{} = user1 = insert(:user)
%User{} = user2 = insert(:user)
%Actor{id: actor_id} = actor = insert(:actor, user: user1)
%Actor{} = actor2 = insert(:actor, user: user2)
%Event{title: title, uuid: uuid, id: event_id} = event = insert(:event)
%Comment{id: comment_id} = insert(:comment, event: event, actor: actor)
insert(:participant, event: event, actor: actor2)
args =
Map.merge(@announcement, %{
"subject_params" => %{
"event_uuid" => uuid,
"event_title" => title,
"event_id" => event_id
},
"author_id" => actor_id,
"object_id" => to_string(comment_id)
})
NotifierMock
|> expect(:ready?, fn -> true end)
|> expect(:send, fn %User{},
%Activity{
type: :comment,
subject: :participation_event_comment,
object_type: :comment
},
[single_activity: true] ->
{:ok, :sent}
end)
assert :ok == LegacyNotifierBuilder.perform(%Oban.Job{args: args})
end
end
end