150 lines
4.7 KiB
Elixir
150 lines
4.7 KiB
Elixir
defmodule Mobilizon.Service.Notifier.EmailTest do
|
|
@moduledoc """
|
|
Test the Email notifier module
|
|
"""
|
|
|
|
alias Mobilizon.Activities.Activity
|
|
alias Mobilizon.{Config, Users}
|
|
alias Mobilizon.Service.Notifier.Email
|
|
alias Mobilizon.Users.{ActivitySetting, Setting, User}
|
|
|
|
use Mobilizon.DataCase
|
|
import Swoosh.TestAssertions
|
|
import Mobilizon.Factory
|
|
|
|
describe "Returns if the module is loaded" do
|
|
test "Loaded by default" do
|
|
assert Email.ready?() == true
|
|
end
|
|
|
|
test "If disabled" do
|
|
Config.put([Email, :enabled], false)
|
|
assert Email.ready?() == false
|
|
Config.put([Email, :enabled], true)
|
|
end
|
|
end
|
|
|
|
describe "sending email for activities" do
|
|
test "when the user doesn't allow it" do
|
|
%Activity{} = activity = insert(:mobilizon_activity, inserted_at: DateTime.utc_now())
|
|
%User{} = user = insert(:user, activity_settings: [])
|
|
%Setting{} = user_settings = insert(:settings, user_id: user.id, group_notifications: :none)
|
|
user = %User{user | settings: user_settings}
|
|
|
|
assert {:ok, :skipped} == Email.send(user, activity)
|
|
|
|
refute_email_sent()
|
|
end
|
|
|
|
test "when the user allows it" do
|
|
%Activity{} = activity = insert(:mobilizon_activity, inserted_at: DateTime.utc_now())
|
|
%User{} = user = insert(:user)
|
|
|
|
%Setting{} =
|
|
user_settings = insert(:settings, user_id: user.id, group_notifications: :direct)
|
|
|
|
%ActivitySetting{} =
|
|
activity_setting = insert(:mobilizon_activity_setting, user_id: user.id, user: user)
|
|
|
|
user = %User{user | settings: user_settings, activity_settings: [activity_setting]}
|
|
|
|
assert {:ok, :sent} == Email.send(user, activity)
|
|
|
|
assert_email_sent(to: user.email)
|
|
end
|
|
|
|
test "if it's been an hour since the last notification" do
|
|
%Activity{} = activity = insert(:mobilizon_activity, inserted_at: DateTime.utc_now())
|
|
%User{} = user = insert(:user)
|
|
|
|
%Setting{} =
|
|
user_settings =
|
|
insert(:settings,
|
|
user_id: user.id,
|
|
group_notifications: :one_hour,
|
|
last_notification_sent: DateTime.add(DateTime.utc_now(), -3_659)
|
|
)
|
|
|
|
%ActivitySetting{} =
|
|
activity_setting = insert(:mobilizon_activity_setting, user_id: user.id, user: user)
|
|
|
|
user = %User{user | settings: user_settings, activity_settings: [activity_setting]}
|
|
|
|
assert {:ok, :sent} == Email.send(user, activity)
|
|
|
|
assert_email_sent(to: user.email)
|
|
end
|
|
|
|
test "if there's no delay since the last notification" do
|
|
%Activity{} = activity = insert(:mobilizon_activity, inserted_at: DateTime.utc_now())
|
|
%User{} = user = insert(:user)
|
|
|
|
%Setting{} =
|
|
user_settings =
|
|
insert(:settings,
|
|
user_id: user.id,
|
|
group_notifications: :one_hour,
|
|
last_notification_sent: nil
|
|
)
|
|
|
|
%ActivitySetting{} =
|
|
activity_setting = insert(:mobilizon_activity_setting, user_id: user.id, user: user)
|
|
|
|
user = %User{user | settings: user_settings, activity_settings: [activity_setting]}
|
|
|
|
assert {:ok, :sent} == Email.send(user, activity)
|
|
|
|
assert_email_sent(to: user.email)
|
|
end
|
|
|
|
test "not if we already have sent notifications" do
|
|
%Activity{} = activity = insert(:mobilizon_activity, inserted_at: DateTime.utc_now())
|
|
%User{} = user = insert(:user)
|
|
|
|
old = DateTime.add(DateTime.utc_now(), -3600 * 24 * 3)
|
|
|
|
%Setting{} =
|
|
user_settings =
|
|
insert(:settings,
|
|
user_id: user.id,
|
|
group_notifications: :one_day,
|
|
last_notification_sent: old
|
|
)
|
|
|
|
%ActivitySetting{} =
|
|
activity_setting = insert(:mobilizon_activity_setting, user_id: user.id, user: user)
|
|
|
|
user = %User{user | settings: user_settings, activity_settings: [activity_setting]}
|
|
|
|
assert {:ok, :sent} == Email.send(user, activity, recap: :one_day)
|
|
|
|
assert_email_sent(to: user.email)
|
|
|
|
assert %{last_notification_sent: updated_last_notification_sent} =
|
|
user_settings = Users.get_setting(user.id)
|
|
|
|
assert old != updated_last_notification_sent
|
|
assert DateTime.diff(DateTime.utc_now(), updated_last_notification_sent) < 5
|
|
|
|
user = %User{user | settings: user_settings, activity_settings: [activity_setting]}
|
|
|
|
assert {:ok, :skipped} == Email.send(user, activity, recap: :one_day)
|
|
|
|
refute_email_sent()
|
|
end
|
|
end
|
|
|
|
describe "send_anonymous_activity" do
|
|
@email "someone@somewhere.tld"
|
|
|
|
test "send activity notification to anonymous user" do
|
|
%Activity{} =
|
|
activity = insert(:mobilizon_activity, inserted_at: DateTime.utc_now(), type: :comment)
|
|
|
|
Email.send_anonymous_activity(@email, activity, locale: "en")
|
|
|
|
assert_email_sent(to: @email)
|
|
end
|
|
end
|
|
end
|