Merge branch 'develop' into activation-meta
[akkoma] / test / web / streamer / streamer_test.exs
index db07c5df5ed623acc351a7493df9557112b1f70d..245f6e63f53f7bccab9782c236cea453ecf0f943 100644 (file)
@@ -7,11 +7,15 @@ defmodule Pleroma.Web.StreamerTest do
 
   import Pleroma.Factory
 
+  alias Pleroma.Chat
+  alias Pleroma.Chat.MessageReference
   alias Pleroma.Conversation.Participation
   alias Pleroma.List
+  alias Pleroma.Object
   alias Pleroma.User
   alias Pleroma.Web.CommonAPI
   alias Pleroma.Web.Streamer
+  alias Pleroma.Web.StreamerView
 
   @moduletag needs_streamer: true, capture_log: true
 
@@ -96,7 +100,7 @@ defmodule Pleroma.Web.StreamerTest do
 
     test "it streams the user's post in the 'user' stream", %{user: user} do
       Streamer.get_topic_and_add_socket("user", user)
-      {:ok, activity} = CommonAPI.post(user, %{"status" => "hey"})
+      {:ok, activity} = CommonAPI.post(user, %{status: "hey"})
       assert_receive {:render_with_user, _, _, ^activity}
       refute Streamer.filtered_by_user?(user, activity)
     end
@@ -105,8 +109,27 @@ defmodule Pleroma.Web.StreamerTest do
       Streamer.get_topic_and_add_socket("user", user)
 
       other_user = insert(:user)
-      {:ok, activity} = CommonAPI.post(other_user, %{"status" => "hey"})
-      {:ok, announce, _} = CommonAPI.repeat(activity.id, user)
+      {:ok, activity} = CommonAPI.post(other_user, %{status: "hey"})
+      {:ok, announce} = CommonAPI.repeat(activity.id, user)
+
+      assert_receive {:render_with_user, Pleroma.Web.StreamerView, "update.json", ^announce}
+      refute Streamer.filtered_by_user?(user, announce)
+    end
+
+    test "it streams boosts of mastodon user in the 'user' stream", %{user: user} do
+      Streamer.get_topic_and_add_socket("user", user)
+
+      other_user = insert(:user)
+      {:ok, activity} = CommonAPI.post(other_user, %{status: "hey"})
+
+      data =
+        File.read!("test/fixtures/mastodon-announce.json")
+        |> Poison.decode!()
+        |> Map.put("object", activity.data["object"])
+        |> Map.put("actor", user.ap_id)
+
+      {:ok, %Pleroma.Activity{data: _data, local: false} = announce} =
+        Pleroma.Web.ActivityPub.Transmogrifier.handle_incoming(data)
 
       assert_receive {:render_with_user, Pleroma.Web.StreamerView, "update.json", ^announce}
       refute Streamer.filtered_by_user?(user, announce)
@@ -126,6 +149,57 @@ defmodule Pleroma.Web.StreamerTest do
       refute Streamer.filtered_by_user?(user, notify)
     end
 
+    test "it sends chat messages to the 'user:pleroma_chat' stream", %{user: user} do
+      other_user = insert(:user)
+
+      {:ok, create_activity} = CommonAPI.post_chat_message(other_user, user, "hey cirno")
+      object = Object.normalize(create_activity, false)
+      chat = Chat.get(user.id, other_user.ap_id)
+      cm_ref = MessageReference.for_chat_and_object(chat, object)
+      cm_ref = %{cm_ref | chat: chat, object: object}
+
+      Streamer.get_topic_and_add_socket("user:pleroma_chat", user)
+      Streamer.stream("user:pleroma_chat", {user, cm_ref})
+
+      text = StreamerView.render("chat_update.json", %{chat_message_reference: cm_ref})
+
+      assert text =~ "hey cirno"
+      assert_receive {:text, ^text}
+    end
+
+    test "it sends chat messages to the 'user' stream", %{user: user} do
+      other_user = insert(:user)
+
+      {:ok, create_activity} = CommonAPI.post_chat_message(other_user, user, "hey cirno")
+      object = Object.normalize(create_activity, false)
+      chat = Chat.get(user.id, other_user.ap_id)
+      cm_ref = MessageReference.for_chat_and_object(chat, object)
+      cm_ref = %{cm_ref | chat: chat, object: object}
+
+      Streamer.get_topic_and_add_socket("user", user)
+      Streamer.stream("user", {user, cm_ref})
+
+      text = StreamerView.render("chat_update.json", %{chat_message_reference: cm_ref})
+
+      assert text =~ "hey cirno"
+      assert_receive {:text, ^text}
+    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
@@ -134,7 +208,7 @@ defmodule Pleroma.Web.StreamerTest do
 
       Streamer.get_topic_and_add_socket("user:notification", user)
 
-      {:ok, activity} = CommonAPI.post(user, %{"status" => ":("})
+      {:ok, activity} = CommonAPI.post(user, %{status: ":("})
       {:ok, _} = CommonAPI.favorite(blocked, activity.id)
 
       refute_receive _
@@ -145,7 +219,7 @@ defmodule Pleroma.Web.StreamerTest do
     } do
       user2 = insert(:user)
 
-      {:ok, activity} = CommonAPI.post(user, %{"status" => "super hot take"})
+      {:ok, activity} = CommonAPI.post(user, %{status: "super hot take"})
       {:ok, _} = CommonAPI.add_mute(user, activity)
 
       Streamer.get_topic_and_add_socket("user:notification", user)
@@ -161,7 +235,7 @@ defmodule Pleroma.Web.StreamerTest do
     } do
       user2 = insert(:user, %{ap_id: "https://hecking-lewd-place.com/user/meanie"})
 
-      {:ok, activity} = CommonAPI.post(user, %{"status" => "super hot take"})
+      {:ok, activity} = CommonAPI.post(user, %{status: "super hot take"})
       Streamer.get_topic_and_add_socket("user:notification", user)
       {:ok, favorite_activity} = CommonAPI.favorite(user2, activity.id)
 
@@ -176,7 +250,7 @@ defmodule Pleroma.Web.StreamerTest do
       user2 = insert(:user, %{ap_id: "https://hecking-lewd-place.com/user/meanie"})
 
       {:ok, user} = User.block_domain(user, "hecking-lewd-place.com")
-      {:ok, activity} = CommonAPI.post(user, %{"status" => "super hot take"})
+      {:ok, activity} = CommonAPI.post(user, %{status: "super hot take"})
       Streamer.get_topic_and_add_socket("user:notification", user)
       {:ok, favorite_activity} = CommonAPI.favorite(user2, activity.id)
 
@@ -215,7 +289,7 @@ defmodule Pleroma.Web.StreamerTest do
 
     Streamer.get_topic_and_add_socket("public", other_user)
 
-    {:ok, activity} = CommonAPI.post(user, %{"status" => "Test"})
+    {:ok, activity} = CommonAPI.post(user, %{status: "Test"})
     assert_receive {:render_with_user, _, _, ^activity}
     refute Streamer.filtered_by_user?(user, activity)
   end
@@ -223,7 +297,7 @@ defmodule Pleroma.Web.StreamerTest do
   test "works for deletions" do
     user = insert(:user)
     other_user = insert(:user)
-    {:ok, activity} = CommonAPI.post(other_user, %{"status" => "Test"})
+    {:ok, activity} = CommonAPI.post(other_user, %{status: "Test"})
 
     Streamer.get_topic_and_add_socket("public", user)
 
@@ -238,7 +312,7 @@ defmodule Pleroma.Web.StreamerTest do
 
     Streamer.get_topic_and_add_socket("public", nil)
 
-    {:ok, activity} = CommonAPI.post(user, %{"status" => "Test"})
+    {:ok, activity} = CommonAPI.post(user, %{status: "Test"})
     activity_id = activity.id
     assert_receive {:text, event}
     assert %{"event" => "update", "payload" => payload} = Jason.decode!(event)
@@ -323,7 +397,7 @@ defmodule Pleroma.Web.StreamerTest do
       {:ok, _user_relationship} = User.block(user, blocked_user)
 
       Streamer.get_topic_and_add_socket("public", user)
-      {:ok, activity} = CommonAPI.post(blocked_user, %{"status" => "Test"})
+      {:ok, activity} = CommonAPI.post(blocked_user, %{status: "Test"})
       assert_receive {:render_with_user, _, _, ^activity}
       assert Streamer.filtered_by_user?(user, activity)
     end
@@ -337,17 +411,17 @@ defmodule Pleroma.Web.StreamerTest do
 
       {:ok, _user_relationship} = User.block(blocker, blockee)
 
-      {:ok, activity_one} = CommonAPI.post(friend, %{"status" => "hey! @#{blockee.nickname}"})
+      {:ok, activity_one} = CommonAPI.post(friend, %{status: "hey! @#{blockee.nickname}"})
 
       assert_receive {:render_with_user, _, _, ^activity_one}
       assert Streamer.filtered_by_user?(blocker, activity_one)
 
-      {:ok, activity_two} = CommonAPI.post(blockee, %{"status" => "hey! @#{friend.nickname}"})
+      {:ok, activity_two} = CommonAPI.post(blockee, %{status: "hey! @#{friend.nickname}"})
 
       assert_receive {:render_with_user, _, _, ^activity_two}
       assert Streamer.filtered_by_user?(blocker, activity_two)
 
-      {:ok, activity_three} = CommonAPI.post(blockee, %{"status" => "hey! @#{blocker.nickname}"})
+      {:ok, activity_three} = CommonAPI.post(blockee, %{status: "hey! @#{blocker.nickname}"})
 
       assert_receive {:render_with_user, _, _, ^activity_three}
       assert Streamer.filtered_by_user?(blocker, activity_three)
@@ -369,8 +443,8 @@ defmodule Pleroma.Web.StreamerTest do
 
       {:ok, _activity} =
         CommonAPI.post(user_b, %{
-          "status" => "@#{user_c.nickname} Test",
-          "visibility" => "direct"
+          status: "@#{user_c.nickname} Test",
+          visibility: "direct"
         })
 
       refute_receive _
@@ -387,8 +461,8 @@ defmodule Pleroma.Web.StreamerTest do
 
       {:ok, _activity} =
         CommonAPI.post(user_b, %{
-          "status" => "Test",
-          "visibility" => "private"
+          status: "Test",
+          visibility: "private"
         })
 
       refute_receive _
@@ -407,8 +481,8 @@ defmodule Pleroma.Web.StreamerTest do
 
       {:ok, activity} =
         CommonAPI.post(user_b, %{
-          "status" => "Test",
-          "visibility" => "private"
+          status: "Test",
+          visibility: "private"
         })
 
       assert_receive {:render_with_user, _, _, ^activity}
@@ -424,10 +498,10 @@ defmodule Pleroma.Web.StreamerTest do
       CommonAPI.follow(user1, user2)
       CommonAPI.hide_reblogs(user1, user2)
 
-      {:ok, create_activity} = CommonAPI.post(user3, %{"status" => "I'm kawen"})
+      {:ok, create_activity} = CommonAPI.post(user3, %{status: "I'm kawen"})
 
       Streamer.get_topic_and_add_socket("user", user1)
-      {:ok, announce_activity, _} = CommonAPI.repeat(create_activity.id, user2)
+      {:ok, announce_activity} = CommonAPI.repeat(create_activity.id, user2)
       assert_receive {:render_with_user, _, _, ^announce_activity}
       assert Streamer.filtered_by_user?(user1, announce_activity)
     end
@@ -438,9 +512,9 @@ defmodule Pleroma.Web.StreamerTest do
       CommonAPI.follow(user1, user2)
       CommonAPI.hide_reblogs(user1, user2)
 
-      {:ok, create_activity} = CommonAPI.post(user1, %{"status" => "I'm kawen"})
+      {:ok, create_activity} = CommonAPI.post(user1, %{status: "I'm kawen"})
       Streamer.get_topic_and_add_socket("user", user1)
-      {:ok, _favorite_activity, _} = CommonAPI.repeat(create_activity.id, user2)
+      {:ok, _announce_activity} = CommonAPI.repeat(create_activity.id, user2)
 
       assert_receive {:render_with_user, _, "notification.json", notif}
       assert Streamer.filtered_by_user?(user1, notif)
@@ -452,7 +526,7 @@ defmodule Pleroma.Web.StreamerTest do
       CommonAPI.follow(user1, user2)
       CommonAPI.hide_reblogs(user1, user2)
 
-      {:ok, create_activity} = CommonAPI.post(user1, %{"status" => "I'm kawen"})
+      {:ok, create_activity} = CommonAPI.post(user1, %{status: "I'm kawen"})
       Streamer.get_topic_and_add_socket("user", user1)
       {:ok, _favorite_activity} = CommonAPI.favorite(user2, create_activity.id)
 
@@ -466,7 +540,7 @@ defmodule Pleroma.Web.StreamerTest do
     user2 = insert(:user)
     Streamer.get_topic_and_add_socket("user", user2)
     {:ok, user2, user, _activity} = CommonAPI.follow(user2, user)
-    {:ok, activity} = CommonAPI.post(user, %{"status" => "super hot take"})
+    {:ok, activity} = CommonAPI.post(user, %{status: "super hot take"})
     {:ok, _} = CommonAPI.add_mute(user2, activity)
     assert_receive {:render_with_user, _, _, ^activity}
     assert Streamer.filtered_by_user?(user2, activity)
@@ -485,8 +559,8 @@ defmodule Pleroma.Web.StreamerTest do
 
       {:ok, _create_activity} =
         CommonAPI.post(another_user, %{
-          "status" => "hey @#{user.nickname}",
-          "visibility" => "direct"
+          status: "hey @#{user.nickname}",
+          visibility: "direct"
         })
 
       assert_receive {:text, received_event}
@@ -507,8 +581,8 @@ defmodule Pleroma.Web.StreamerTest do
 
       {:ok, create_activity} =
         CommonAPI.post(another_user, %{
-          "status" => "hi @#{user.nickname}",
-          "visibility" => "direct"
+          status: "hi @#{user.nickname}",
+          visibility: "direct"
         })
 
       create_activity_id = create_activity.id
@@ -533,15 +607,15 @@ defmodule Pleroma.Web.StreamerTest do
 
       {:ok, create_activity} =
         CommonAPI.post(another_user, %{
-          "status" => "hi @#{user.nickname}",
-          "visibility" => "direct"
+          status: "hi @#{user.nickname}",
+          visibility: "direct"
         })
 
       {:ok, create_activity2} =
         CommonAPI.post(another_user, %{
-          "status" => "hi @#{user.nickname} 2",
-          "in_reply_to_status_id" => create_activity.id,
-          "visibility" => "direct"
+          status: "hi @#{user.nickname} 2",
+          in_reply_to_status_id: create_activity.id,
+          visibility: "direct"
         })
 
       assert_receive {:render_with_user, _, _, ^create_activity}