Streamer: Don't crash on streaming chat notifications
authorlain <lain@soykaf.club>
Mon, 25 May 2020 15:27:45 +0000 (17:27 +0200)
committerlain <lain@soykaf.club>
Mon, 25 May 2020 15:27:45 +0000 (17:27 +0200)
lib/pleroma/web/common_api/common_api.ex
test/web/streamer/streamer_test.exs

index c08edbc5f3657406053e7e641e60dd3c8bd0209a..764fa4f4fbfd4c0d21260c4a8c4a8752ed2384cd 100644 (file)
@@ -467,12 +467,13 @@ defmodule Pleroma.Web.CommonAPI do
     {:ok, activity}
   end
 
-  def thread_muted?(%{id: nil} = _user, _activity), do: false
-
-  def thread_muted?(user, activity) do
-    ThreadMute.exists?(user.id, activity.data["context"])
+  def thread_muted?(%User{id: user_id}, %{data: %{"context" => context}})
+      when is_binary("context") do
+    ThreadMute.exists?(user_id, context)
   end
 
+  def thread_muted?(_, _), do: false
+
   def report(user, data) do
     with {:ok, account} <- get_reported_account(data.account_id),
          {:ok, {content_html, _, _}} <- make_report_content_html(data[:comment]),
index cb4595bb61da387336ac4a782fd32dbd49b75c01..115ba47032aa0c8e951796b410c7d895ecf789ff 100644 (file)
@@ -126,6 +126,21 @@ defmodule Pleroma.Web.StreamerTest do
       refute Streamer.filtered_by_user?(user, notify)
     end
 
+    test "it sends chat message notifications to the 'user:notification' stream", %{user: user} do
+      other_user = insert(:user)
+
+      {:ok, create_activity} = CommonAPI.post_chat_message(other_user, user, "hey")
+
+      notify =
+        Repo.get_by(Pleroma.Notification, user_id: user.id, activity_id: create_activity.id)
+        |> Repo.preload(:activity)
+
+      Streamer.get_topic_and_add_socket("user:notification", user)
+      Streamer.stream("user:notification", notify)
+      assert_receive {:render_with_user, _, _, ^notify}
+      refute Streamer.filtered_by_user?(user, notify)
+    end
+
     test "it doesn't send notify to the 'user:notification' stream when a user is blocked", %{
       user: user
     } do