Merge branch 'chore/copyright-headers' into 'develop'
[akkoma] / test / tasks / email_test.exs
index 944c070641f7f878e136ac5ecebb89031f88c6c3..9523aefd884fa48e9479ac06da0eb1ec1b11e98a 100644 (file)
@@ -1,3 +1,7 @@
+# Pleroma: A lightweight social networking server
+# Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>
+# SPDX-License-Identifier: AGPL-3.0-only
+
 defmodule Mix.Tasks.Pleroma.EmailTest do
   use Pleroma.DataCase
 
@@ -6,6 +10,8 @@ defmodule Mix.Tasks.Pleroma.EmailTest do
   alias Pleroma.Config
   alias Pleroma.Tests.ObanHelpers
 
+  import Pleroma.Factory
+
   setup_all do
     Mix.shell(Mix.Shell.Process)
 
@@ -16,6 +22,9 @@ defmodule Mix.Tasks.Pleroma.EmailTest do
     :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])
@@ -48,5 +57,71 @@ defmodule Mix.Tasks.Pleroma.EmailTest do
         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