test(emails): add test for group notification emails

Add test for Mobilizon.Web.Email.Group

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
This commit is contained in:
Thomas Citharel 2023-05-25 12:06:55 +02:00
parent 927e95f387
commit fe4fbc0bdf
No known key found for this signature in database
GPG Key ID: A061B9DDE0CA0773
1 changed files with 156 additions and 0 deletions

View File

@ -0,0 +1,156 @@
defmodule Mobilizon.Web.Email.GroupTest do
@moduledoc """
Test the Mobilizon.Web.Email.Group module
"""
alias Mobilizon.Actors.Actor
alias Mobilizon.Events.Event
alias Mobilizon.Users
alias Mobilizon.Users.{ActivitySetting, Setting, User}
alias Mobilizon.Web.Email.Group
use Mobilizon.DataCase
import Swoosh.TestAssertions
import Mobilizon.Factory
describe "Notify of new event" do
test "members, followers, execept the ones that disabled it" do
{_user_creator, actor} = insert_user_with_settings("user@creator.com")
%Actor{} = group = insert(:group)
%Event{} = event = insert(:event, attributed_to: group, organizer_actor: actor)
insert(:member,
parent: group,
actor: actor,
role: :administrator,
member_since: DateTime.add(DateTime.utc_now(), -3600)
)
{_user_member, actor_member} = insert_user_with_settings("user@member.com")
insert(:member,
parent: group,
actor: actor_member,
role: :member,
member_since: DateTime.add(DateTime.utc_now(), -3600)
)
{_user_pending_member, actor_pending_member} =
insert_user_with_settings("user@pending.member.com")
insert(:member,
parent: group,
actor: actor_pending_member,
role: :not_approved
)
{_user_invited_member, actor_invited_member} =
insert_user_with_settings("user@invited.member.com")
insert(:member,
parent: group,
actor: actor_invited_member,
role: :invited,
member_since: DateTime.add(DateTime.utc_now(), -3600)
)
{_user_rejected_member, actor_rejected_member} =
insert_user_with_settings("user@rejected.member.com")
insert(:member,
parent: group,
actor: actor_rejected_member,
role: :rejected,
member_since: DateTime.add(DateTime.utc_now(), -3600)
)
{_user_approved_follower, actor_follower} =
insert_user_with_settings("user@approved.follower.com")
insert(:follower, actor: actor_follower, target_actor: group, approved: true)
{_user_no_notify_follower, actor_follower_no_notify} =
insert_user_with_settings("user@no-notify.follower.com")
insert(:follower,
actor: actor_follower_no_notify,
target_actor: group,
approved: true,
notify: false
)
{_user_unapproved_follower, actor_unapproved_follower} =
insert_user_with_settings("user@unapproved.follower.com")
insert(:follower, actor: actor_unapproved_follower, target_actor: group, approved: false)
# One profile has no notify, the other one has it
{user_still_notify_follower, actor_follower_still_notify} =
insert_user_with_settings("user@still-notify.follower.com")
insert(:follower,
actor: actor_follower_still_notify,
target_actor: group,
approved: true,
notify: false
)
%Actor{} = actor_follower_with_notify = insert(:actor, user: user_still_notify_follower)
insert(:follower,
actor: actor_follower_with_notify,
target_actor: group,
approved: true,
notify: true
)
%Actor{} = actor_remote_follower = insert(:actor, user: nil, domain: "some.remote.tld")
insert(:follower,
actor: actor_remote_follower,
target_actor: group,
approved: true,
notify: true
)
assert :ok == Group.notify_of_new_event(event)
refute_email_sent(to: "user@creator.com")
refute_email_sent(to: "user@pending.member.com")
refute_email_sent(to: "user@invited.member.com")
refute_email_sent(to: "user@rejected.member.com")
refute_email_sent(to: "user@unapproved.follower.com")
refute_email_sent(to: "user@no-notify.follower.com")
assert_email_sent(to: "user@member.com")
assert_email_sent(to: "user@approved.follower.com")
assert_email_sent(to: "user@still-notify.follower.com")
end
end
defp insert_user_with_settings(email) do
%User{} = user = insert(:user, email: email)
%Actor{} = actor = insert(:actor, user: user)
%Setting{} =
user_settings =
insert(:settings,
user: user,
user_id: user.id,
group_notifications: :one_day
)
%ActivitySetting{} =
activity_setting = insert(:mobilizon_activity_setting, user_id: user.id, user: user)
{:ok, user} =
Users.update_user(user, %{
settings: user_settings,
activity_settings: [activity_setting],
default_actor_id: actor.id
})
{user, actor}
end
end