From 90083a754dc0bfe0c8a04fbaa3e78f68a848035e Mon Sep 17 00:00:00 2001
From: lain <lain@soykaf.club>
Date: Mon, 29 Jun 2020 17:48:18 +0200
Subject: [PATCH 1/3] Notifications: Never return `nil` in the notification
 list.

---
 lib/pleroma/notification.ex |  1 +
 test/notification_test.exs  | 12 ++++++++++++
 2 files changed, 13 insertions(+)

diff --git a/lib/pleroma/notification.ex b/lib/pleroma/notification.ex
index 9ee9606be..58dcf880a 100644
--- a/lib/pleroma/notification.ex
+++ b/lib/pleroma/notification.ex
@@ -367,6 +367,7 @@ defp do_create_notifications(%Activity{} = activity, options) do
         do_send = do_send && user in enabled_receivers
         create_notification(activity, user, do_send)
       end)
+      |> Enum.filter(& &1)
 
     {:ok, notifications}
   end
diff --git a/test/notification_test.exs b/test/notification_test.exs
index 526f43fab..5389dabca 100644
--- a/test/notification_test.exs
+++ b/test/notification_test.exs
@@ -21,7 +21,19 @@ defmodule Pleroma.NotificationTest do
   alias Pleroma.Web.Push
   alias Pleroma.Web.Streamer
 
+  # TODO: Test there's no nil notifications
+
   describe "create_notifications" do
+    test "never returns nil" do
+      user = insert(:user)
+      other_user = insert(:user, %{invisible: true})
+
+      {:ok, activity} = CommonAPI.post(user, %{status: "yeah"})
+      {:ok, activity} = CommonAPI.react_with_emoji(activity.id, other_user, "☕")
+
+      refute {:ok, [nil]} == Notification.create_notifications(activity)
+    end
+
     test "creates a notification for an emoji reaction" do
       user = insert(:user)
       other_user = insert(:user)

From c01f4ca07f3a3e47fb6532c55128c427fbc1f77e Mon Sep 17 00:00:00 2001
From: lain <lain@soykaf.club>
Date: Mon, 29 Jun 2020 17:52:56 +0200
Subject: [PATCH 2/3] Notification: Remove TODO.

---
 test/notification_test.exs | 2 --
 1 file changed, 2 deletions(-)

diff --git a/test/notification_test.exs b/test/notification_test.exs
index 5389dabca..6add3f7eb 100644
--- a/test/notification_test.exs
+++ b/test/notification_test.exs
@@ -21,8 +21,6 @@ defmodule Pleroma.NotificationTest do
   alias Pleroma.Web.Push
   alias Pleroma.Web.Streamer
 
-  # TODO: Test there's no nil notifications
-
   describe "create_notifications" do
     test "never returns nil" do
       user = insert(:user)

From 09c5991f82e91878a940f5957ac993e1fca72545 Mon Sep 17 00:00:00 2001
From: lain <lain@soykaf.club>
Date: Mon, 29 Jun 2020 16:04:14 +0000
Subject: [PATCH 3/3] Apply suggestion to lib/pleroma/notification.ex

---
 lib/pleroma/notification.ex | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lib/pleroma/notification.ex b/lib/pleroma/notification.ex
index 58dcf880a..2ef1a80c5 100644
--- a/lib/pleroma/notification.ex
+++ b/lib/pleroma/notification.ex
@@ -367,7 +367,7 @@ defp do_create_notifications(%Activity{} = activity, options) do
         do_send = do_send && user in enabled_receivers
         create_notification(activity, user, do_send)
       end)
-      |> Enum.filter(& &1)
+      |> Enum.reject(&is_nil/1)
 
     {:ok, notifications}
   end