summaryrefslogtreecommitdiff
path: root/test/tasks/email_test.exs
blob: 5393e3573d9f2bf1d3fbab1dbc414702210d57be (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
defmodule Mix.Tasks.Pleroma.EmailTest do
  use Pleroma.DataCase

  import Swoosh.TestAssertions

  alias Pleroma.Config
  alias Pleroma.Tests.ObanHelpers

  import Pleroma.Factory

  setup_all do
    Mix.shell(Mix.Shell.Process)

    on_exit(fn ->
      Mix.shell(Mix.Shell.IO)
    end)

    :ok
  end

  setup do: clear_config([Pleroma.Emails.Mailer, :enabled], true)
  setup do: clear_config([:instance, :account_activation_required], true)

  describe "pleroma.email test" do
    test "Sends test email with no given address" do
      mail_to = Config.get([:instance, :email])

      :ok = Mix.Tasks.Pleroma.Email.run(["test"])

      ObanHelpers.perform_all()

      assert_receive {:mix_shell, :info, [message]}
      assert message =~ "Test email has been sent"

      assert_email_sent(
        to: mail_to,
        html_body: ~r/a test email was requested./i
      )
    end

    test "Sends test email with given address" do
      mail_to = "hewwo@example.com"

      :ok = Mix.Tasks.Pleroma.Email.run(["test", "--to", mail_to])

      ObanHelpers.perform_all()

      assert_receive {:mix_shell, :info, [message]}
      assert message =~ "Test email has been sent"

      assert_email_sent(
        to: mail_to,
        html_body: ~r/a test email was requested./i
      )
    end

    test "Sends confirmation emails" do
      local_user1 =
        insert(:user, %{
          confirmation_pending: true,
          confirmation_token: "mytoken",
          deactivated: false,
          email: "local1@pleroma.com",
          local: true
        })

      local_user2 =
        insert(:user, %{
          confirmation_pending: true,
          confirmation_token: "mytoken",
          deactivated: false,
          email: "local2@pleroma.com",
          local: true
        })

      :ok = Mix.Tasks.Pleroma.Email.run(["resend_confirmation_emails"])

      ObanHelpers.perform_all()

      assert_email_sent(to: {local_user1.name, local_user1.email})
      assert_email_sent(to: {local_user2.name, local_user2.email})
    end

    test "Does not send confirmation email to inappropriate users" do
      # confirmed user
      insert(:user, %{
        confirmation_pending: false,
        confirmation_token: "mytoken",
        deactivated: false,
        email: "confirmed@pleroma.com",
        local: true
      })

      # remote user
      insert(:user, %{
        deactivated: false,
        email: "remote@not-pleroma.com",
        local: false
      })

      # deactivated user =
      insert(:user, %{
        deactivated: true,
        email: "deactivated@pleroma.com",
        local: false
      })

      # invisible user
      insert(:user, %{
        deactivated: false,
        email: "invisible@pleroma.com",
        local: true,
        invisible: true
      })

      :ok = Mix.Tasks.Pleroma.Email.run(["resend_confirmation_emails"])

      ObanHelpers.perform_all()

      refute_email_sent()
    end
  end
end