From 62c27e016441d8f0649fea0ea9cfe0646e2b6f11 Mon Sep 17 00:00:00 2001
From: tusooa <tusooa@kazv.moe>
Date: Wed, 14 Dec 2022 01:04:42 -0500
Subject: [PATCH] Fix failure when registering a user with no email when
 approval required

---
 lib/pleroma/user.ex        |  6 +++++-
 test/pleroma/user_test.exs | 15 +++++++++++++++
 2 files changed, 20 insertions(+), 1 deletion(-)

diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex
index b422e5c1d..d2ae08888 100644
--- a/lib/pleroma/user.ex
+++ b/lib/pleroma/user.ex
@@ -905,7 +905,7 @@ defmodule Pleroma.User do
     end
   end
 
-  defp send_user_approval_email(user) do
+  defp send_user_approval_email(%User{email: email} = user) when is_binary(email) do
     user
     |> Pleroma.Emails.UserEmail.approval_pending_email()
     |> Pleroma.Emails.Mailer.deliver_async()
@@ -913,6 +913,10 @@ defmodule Pleroma.User do
     {:ok, :enqueued}
   end
 
+  defp send_user_approval_email(_user) do
+    {:ok, :skipped}
+  end
+
   defp send_admin_approval_emails(user) do
     all_superusers()
     |> Enum.filter(fn user -> not is_nil(user.email) end)
diff --git a/test/pleroma/user_test.exs b/test/pleroma/user_test.exs
index 303598fad..a58c8f68b 100644
--- a/test/pleroma/user_test.exs
+++ b/test/pleroma/user_test.exs
@@ -591,6 +591,21 @@ defmodule Pleroma.UserTest do
       refute_email_sent()
     end
 
+    test "it works when the registering user does not provide an email" do
+      clear_config([Pleroma.Emails.Mailer, :enabled], false)
+      clear_config([:instance, :account_activation_required], false)
+      clear_config([:instance, :account_approval_required], true)
+
+      cng = User.register_changeset(%User{}, @full_user_data |> Map.put(:email, ""))
+
+      # The user is still created
+      assert {:ok, %User{nickname: "nick"}} = User.register(cng)
+
+      # No emails are sent
+      ObanHelpers.perform_all()
+      refute_email_sent()
+    end
+
     test "it requires an email, name, nickname and password, bio is optional when account_activation_required is enabled" do
       clear_config([:instance, :account_activation_required], true)