From 3ce11b830ee69d8557146fce6d3507337298259d Mon Sep 17 00:00:00 2001
From: Mark Felder <feld@FreeBSD.org>
Date: Fri, 13 Nov 2020 17:01:53 -0600
Subject: [PATCH] Add capability for emoji reaction push notifications

---
 lib/pleroma/web/push/impl.ex        | 12 +++++++++++-
 test/pleroma/web/push/impl_test.exs | 18 ++++++++++++++++++
 2 files changed, 29 insertions(+), 1 deletion(-)

diff --git a/lib/pleroma/web/push/impl.ex b/lib/pleroma/web/push/impl.ex
index da535aa68..f91cb1d40 100644
--- a/lib/pleroma/web/push/impl.ex
+++ b/lib/pleroma/web/push/impl.ex
@@ -16,7 +16,7 @@ defmodule Pleroma.Web.Push.Impl do
   require Logger
   import Ecto.Query
 
-  @types ["Create", "Follow", "Announce", "Like", "Move"]
+  @types ["Create", "Follow", "Announce", "Like", "Move", "EmojiReact"]
 
   @doc "Performs sending notifications for user subscriptions"
   @spec perform(Notification.t()) :: list(any) | :error | {:error, :unknown_type}
@@ -149,6 +149,15 @@ defmodule Pleroma.Web.Push.Impl do
     "@#{actor.nickname} repeated: #{Utils.scrub_html_and_truncate(content, 80)}"
   end
 
+  def format_body(
+        %{activity: %{data: %{"type" => "EmojiReact", "content" => content}}},
+        actor,
+        _object,
+        _mastodon_type
+      ) do
+    "@#{actor.nickname} has reacted with #{content}"
+  end
+
   def format_body(
         %{activity: %{data: %{"type" => type}}} = notification,
         actor,
@@ -179,6 +188,7 @@ defmodule Pleroma.Web.Push.Impl do
       "reblog" -> "New Repeat"
       "favourite" -> "New Favorite"
       "pleroma:chat_mention" -> "New Chat Message"
+      "pleroma:emoji_reaction" -> "New Reaction"
       type -> "New #{String.capitalize(type || "event")}"
     end
   end
diff --git a/test/pleroma/web/push/impl_test.exs b/test/pleroma/web/push/impl_test.exs
index 7d8cc999a..2575c76d6 100644
--- a/test/pleroma/web/push/impl_test.exs
+++ b/test/pleroma/web/push/impl_test.exs
@@ -184,6 +184,24 @@ defmodule Pleroma.Web.Push.ImplTest do
              "New Favorite"
   end
 
+  test "renders title and body for pleroma:emoji_reaction activity" do
+    user = insert(:user, nickname: "Bob")
+
+    {:ok, activity} =
+      CommonAPI.post(user, %{
+        status: "This post is a really good post!"
+      })
+
+    {:ok, activity} = CommonAPI.react_with_emoji(activity.id, user, "👍")
+    object = Object.normalize(activity)
+
+    assert Impl.format_body(%{activity: activity, type: "pleroma:emoji_reaction"}, user, object) ==
+             "@Bob has reacted with 👍"
+
+    assert Impl.format_title(%{activity: activity, type: "pleroma:emoji_reaction"}) ==
+             "New Reaction"
+  end
+
   test "renders title for create activity with direct visibility" do
     user = insert(:user, nickname: "Bob")
 
-- 
2.49.0