total rebase
[anni] / test / pleroma / workers / cron / digest_emails_worker_test.exs
1 # Pleroma: A lightweight social networking server
2 # Copyright © 2017-2022 Pleroma Authors <https://pleroma.social/>
3 # SPDX-License-Identifier: AGPL-3.0-only
4
5 defmodule Pleroma.Workers.Cron.DigestEmailsWorkerTest do
6   use Pleroma.DataCase
7
8   import Pleroma.Factory
9
10   alias Pleroma.Tests.ObanHelpers
11   alias Pleroma.User
12   alias Pleroma.Web.CommonAPI
13
14   setup do: clear_config([:email_notifications, :digest])
15
16   setup do
17     Mox.stub_with(Pleroma.UnstubbedConfigMock, Pleroma.Config)
18     :ok
19   end
20
21   setup do
22     clear_config([:email_notifications, :digest], %{
23       active: true,
24       inactivity_threshold: 7,
25       interval: 7
26     })
27
28     user = insert(:user)
29
30     date =
31       Timex.now()
32       |> Timex.shift(days: -10)
33       |> Timex.to_naive_datetime()
34
35     user2 = insert(:user, last_digest_emailed_at: date)
36     {:ok, _} = User.switch_email_notifications(user2, "digest", true)
37     CommonAPI.post(user, %{status: "hey @#{user2.nickname}!"})
38
39     {:ok, user2: user2}
40   end
41
42   test "it sends digest emails", %{user2: user2} do
43     Pleroma.Workers.Cron.DigestEmailsWorker.perform(%Oban.Job{})
44     # Performing job(s) enqueued at previous step
45     ObanHelpers.perform_all()
46
47     assert_received {:email, email}
48     assert email.to == [{user2.name, user2.email}]
49     assert email.subject == "Your digest from #{Pleroma.Config.get(:instance)[:name]}"
50   end
51
52   test "it doesn't fail when a user has no email", %{user2: user2} do
53     {:ok, _} = user2 |> Ecto.Changeset.change(%{email: nil}) |> Pleroma.Repo.update()
54
55     Pleroma.Workers.Cron.DigestEmailsWorker.perform(%Oban.Job{})
56     # Performing job(s) enqueued at previous step
57     ObanHelpers.perform_all()
58   end
59 end