[#114] Added email confirmation resend action. Added tests
[akkoma] / test / web / twitter_api / twitter_api_controller_test.exs
index cbb5f77962b0d0a9cc7d1087d0da5ffa2700ae38..eb154608c23d51c9956e45e354303d5cb043bf8f 100644 (file)
@@ -873,35 +873,67 @@ defmodule Pleroma.Web.TwitterAPI.ControllerTest do
     end
   end
 
-  describe "POST /api/email_invite, with valid parameters" do
-    setup [:valid_user]
-
+  describe "GET /api/account/confirm_email/:token" do
     setup do
-      invites_enabled = Pleroma.Config.get([:instance, :invites_enabled])
-      Pleroma.Config.put([:instance, :invites_enabled], true)
+      user = insert(:user)
+      info_change = User.Info.confirmation_update(user.info, :unconfirmed)
+
+      {:ok, user} =
+        user
+        |> Changeset.change()
+        |> Changeset.put_embed(:info, info_change)
+        |> Repo.update()
 
-      on_exit(fn ->
-        Pleroma.Config.put([:instance, :invites_enabled], invites_enabled)
-        :ok
-      end)
+      assert user.info.confirmation_pending
 
-      :ok
+      [user: user]
     end
 
-    test "it returns 204", %{conn: conn, user: user} do
-      recipient_email = "foo@bar.com"
-      recipient_name = "J. D."
+    test "it redirects to root url", %{conn: conn, user: user} do
+      conn = get(conn, "/api/account/confirm_email/#{user.info.confirmation_token}")
 
-      conn =
-        conn
-        |> assign(:user, user)
-        |> post("/api/email_invite?email=#{recipient_email}&name=#{recipient_name}")
+      assert 302 == conn.status
+    end
 
-      assert json_response(conn, :no_content)
+    test "it confirms the user account", %{conn: conn, user: user} do
+      get(conn, "/api/account/confirm_email/#{user.info.confirmation_token}")
 
-      Swoosh.TestAssertions.assert_email_sent(
-        Pleroma.UserEmail.user_invitation_email(user, recipient_email, recipient_name)
-      )
+      user = Repo.get(User, user.id)
+
+      refute user.info.confirmation_pending
+      refute user.info.confirmation_token
+    end
+  end
+
+  describe "POST /api/account/resend_confirmation_email" do
+    setup do
+      user = insert(:user)
+      info_change = User.Info.confirmation_update(user.info, :unconfirmed)
+
+      {:ok, user} =
+        user
+        |> Changeset.change()
+        |> Changeset.put_embed(:info, info_change)
+        |> Repo.update()
+
+      assert user.info.confirmation_pending
+
+      [user: user]
+    end
+
+    test "it returns 204 No Content", %{conn: conn, user: user} do
+      conn
+      |> assign(:user, user)
+      |> post("/api/account/resend_confirmation_email?email=#{user.email}")
+      |> json_response(:no_content)
+    end
+
+    test "it sends confirmation email", %{conn: conn, user: user} do
+      conn
+      |> assign(:user, user)
+      |> post("/api/account/resend_confirmation_email?email=#{user.email}")
+
+      Swoosh.TestAssertions.assert_email_sent(Pleroma.UserEmail.account_confirmation_email(user))
     end
   end