purge chat and shout endpoints
[akkoma] / test / pleroma / web / streamer_test.exs
index 3229ba6f9c90d0990a037d72d32de01668960f6d..841db0e91144bb811ac72b6d030979903890be18 100644 (file)
@@ -1,5 +1,5 @@
 # Pleroma: A lightweight social networking server
 # Pleroma: A lightweight social networking server
-# Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>
+# Copyright © 2017-2021 Pleroma Authors <https://pleroma.social/>
 # SPDX-License-Identifier: AGPL-3.0-only
 
 defmodule Pleroma.Web.StreamerTest do
 # SPDX-License-Identifier: AGPL-3.0-only
 
 defmodule Pleroma.Web.StreamerTest do
@@ -7,15 +7,11 @@ defmodule Pleroma.Web.StreamerTest do
 
   import Pleroma.Factory
 
 
   import Pleroma.Factory
 
-  alias Pleroma.Chat
-  alias Pleroma.Chat.MessageReference
   alias Pleroma.Conversation.Participation
   alias Pleroma.List
   alias Pleroma.Conversation.Participation
   alias Pleroma.List
-  alias Pleroma.Object
   alias Pleroma.User
   alias Pleroma.Web.CommonAPI
   alias Pleroma.Web.Streamer
   alias Pleroma.User
   alias Pleroma.Web.CommonAPI
   alias Pleroma.Web.Streamer
-  alias Pleroma.Web.StreamerView
 
   @moduletag needs_streamer: true, capture_log: true
 
 
   @moduletag needs_streamer: true, capture_log: true
 
@@ -80,20 +76,16 @@ defmodule Pleroma.Web.StreamerTest do
       expected_user_topic = "user:#{user.id}"
       expected_notification_topic = "user:notification:#{user.id}"
       expected_direct_topic = "direct:#{user.id}"
       expected_user_topic = "user:#{user.id}"
       expected_notification_topic = "user:notification:#{user.id}"
       expected_direct_topic = "direct:#{user.id}"
-      expected_pleroma_chat_topic = "user:pleroma_chat:#{user.id}"
 
       for valid_user_token <- [read_oauth_token, read_statuses_token] do
         assert {:ok, ^expected_user_topic} = Streamer.get_topic("user", user, valid_user_token)
 
         assert {:ok, ^expected_direct_topic} =
                  Streamer.get_topic("direct", user, valid_user_token)
 
       for valid_user_token <- [read_oauth_token, read_statuses_token] do
         assert {:ok, ^expected_user_topic} = Streamer.get_topic("user", user, valid_user_token)
 
         assert {:ok, ^expected_direct_topic} =
                  Streamer.get_topic("direct", user, valid_user_token)
-
-        assert {:ok, ^expected_pleroma_chat_topic} =
-                 Streamer.get_topic("user:pleroma_chat", user, valid_user_token)
       end
 
       for invalid_user_token <- [read_notifications_token, badly_scoped_token],
       end
 
       for invalid_user_token <- [read_notifications_token, badly_scoped_token],
-          user_topic <- ["user", "direct", "user:pleroma_chat"] do
+          user_topic <- ["user", "direct"] do
         assert {:error, :unauthorized} = Streamer.get_topic(user_topic, user, invalid_user_token)
       end
 
         assert {:error, :unauthorized} = Streamer.get_topic(user_topic, user, invalid_user_token)
       end
 
@@ -257,66 +249,6 @@ defmodule Pleroma.Web.StreamerTest do
       refute Streamer.filtered_by_user?(user, notify)
     end
 
       refute Streamer.filtered_by_user?(user, notify)
     end
 
-    test "it sends chat messages to the 'user:pleroma_chat' stream", %{
-      user: user,
-      token: oauth_token
-    } do
-      other_user = insert(:user)
-
-      {:ok, create_activity} =
-        CommonAPI.post_chat_message(other_user, user, "hey cirno", idempotency_key: "123")
-
-      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, oauth_token)
-      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, token: oauth_token} 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, oauth_token)
-      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,
-      token: oauth_token
-    } 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, oauth_token)
-      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,
       token: oauth_token
     test "it doesn't send notify to the 'user:notification' stream when a user is blocked", %{
       user: user,
       token: oauth_token
@@ -383,19 +315,8 @@ defmodule Pleroma.Web.StreamerTest do
       user: user,
       token: oauth_token
     } do
       user: user,
       token: oauth_token
     } do
-      user_url = user.ap_id
       user2 = insert(:user)
 
       user2 = insert(:user)
 
-      body =
-        File.read!("test/fixtures/users_mock/localhost.json")
-        |> String.replace("{{nickname}}", user.nickname)
-        |> Jason.encode!()
-
-      Tesla.Mock.mock_global(fn
-        %{method: :get, url: ^user_url} ->
-          %Tesla.Env{status: 200, body: body}
-      end)
-
       Streamer.get_topic_and_add_socket("user:notification", user, oauth_token)
       {:ok, _follower, _followed, follow_activity} = CommonAPI.follow(user2, user)
 
       Streamer.get_topic_and_add_socket("user:notification", user, oauth_token)
       {:ok, _follower, _followed, follow_activity} = CommonAPI.follow(user2, user)
 
@@ -404,68 +325,51 @@ defmodule Pleroma.Web.StreamerTest do
       refute Streamer.filtered_by_user?(user, notif)
     end
 
       refute Streamer.filtered_by_user?(user, notif)
     end
 
-    test "it sends relationships updates to the 'user' stream", %{
+    test "it sends follow relationships updates to the 'user' stream", %{
       user: user,
       token: oauth_token
     } do
       user_id = user.id
       user: user,
       token: oauth_token
     } do
       user_id = user.id
-      user_url = user.ap_id
-      follower = insert(:user)
-      follower_token = insert(:oauth_token, user: follower)
-      follower_id = follower.id
-
-      body =
-        File.read!("test/fixtures/users_mock/localhost.json")
-        |> String.replace("{{nickname}}", user.nickname)
-        |> Jason.encode!()
-
-      Tesla.Mock.mock_global(fn
-        %{method: :get, url: ^user_url} ->
-          %Tesla.Env{status: 200, body: body}
-      end)
+      other_user = insert(:user)
+      other_user_id = other_user.id
 
       Streamer.get_topic_and_add_socket("user", user, oauth_token)
 
       Streamer.get_topic_and_add_socket("user", user, oauth_token)
-      Streamer.get_topic_and_add_socket("user", follower, follower_token)
-      {:ok, _follower, _followed, _follow_activity} = CommonAPI.follow(follower, user)
+      {:ok, _follower, _followed, _follow_activity} = CommonAPI.follow(user, other_user)
 
 
-      # follow_pending event sent to both follower and following
       assert_receive {:text, event}
       assert_receive {:text, event}
-      assert_receive {:text, ^event}
 
 
-      assert %{"event" => "pleroma:relationships_update", "payload" => payload} =
+      assert %{"event" => "pleroma:follow_relationships_update", "payload" => payload} =
                Jason.decode!(event)
 
       assert %{
                "follower" => %{
                  "follower_count" => 0,
                  "following_count" => 0,
                Jason.decode!(event)
 
       assert %{
                "follower" => %{
                  "follower_count" => 0,
                  "following_count" => 0,
-                 "id" => ^follower_id
+                 "id" => ^user_id
                },
                "following" => %{
                  "follower_count" => 0,
                  "following_count" => 0,
                },
                "following" => %{
                  "follower_count" => 0,
                  "following_count" => 0,
-                 "id" => ^user_id
+                 "id" => ^other_user_id
                },
                "state" => "follow_pending"
              } = Jason.decode!(payload)
 
                },
                "state" => "follow_pending"
              } = Jason.decode!(payload)
 
-      # follow_accept event sent to both follower and following
       assert_receive {:text, event}
       assert_receive {:text, event}
-      assert_receive {:text, ^event}
 
 
-      assert %{"event" => "pleroma:relationships_update", "payload" => payload} =
+      assert %{"event" => "pleroma:follow_relationships_update", "payload" => payload} =
                Jason.decode!(event)
 
       assert %{
                "follower" => %{
                  "follower_count" => 0,
                  "following_count" => 1,
                Jason.decode!(event)
 
       assert %{
                "follower" => %{
                  "follower_count" => 0,
                  "following_count" => 1,
-                 "id" => ^follower_id
+                 "id" => ^user_id
                },
                "following" => %{
                  "follower_count" => 1,
                  "following_count" => 0,
                },
                "following" => %{
                  "follower_count" => 1,
                  "following_count" => 0,
-                 "id" => ^user_id
+                 "id" => ^other_user_id
                },
                "state" => "follow_accept"
              } = Jason.decode!(payload)
                },
                "state" => "follow_accept"
              } = Jason.decode!(payload)
@@ -516,7 +420,7 @@ defmodule Pleroma.Web.StreamerTest do
 
   describe "thread_containment/2" do
     test "it filters to user if recipients invalid and thread containment is enabled" do
 
   describe "thread_containment/2" do
     test "it filters to user if recipients invalid and thread containment is enabled" do
-      Pleroma.Config.put([:instance, :skip_thread_containment], false)
+      clear_config([:instance, :skip_thread_containment], false)
       author = insert(:user)
       %{user: user, token: oauth_token} = oauth_access(["read"])
       User.follow(user, author, :follow_accept)
       author = insert(:user)
       %{user: user, token: oauth_token} = oauth_access(["read"])
       User.follow(user, author, :follow_accept)
@@ -537,7 +441,7 @@ defmodule Pleroma.Web.StreamerTest do
     end
 
     test "it sends message if recipients invalid and thread containment is disabled" do
     end
 
     test "it sends message if recipients invalid and thread containment is disabled" do
-      Pleroma.Config.put([:instance, :skip_thread_containment], true)
+      clear_config([:instance, :skip_thread_containment], true)
       author = insert(:user)
       %{user: user, token: oauth_token} = oauth_access(["read"])
       User.follow(user, author, :follow_accept)
       author = insert(:user)
       %{user: user, token: oauth_token} = oauth_access(["read"])
       User.follow(user, author, :follow_accept)
@@ -559,7 +463,7 @@ defmodule Pleroma.Web.StreamerTest do
     end
 
     test "it sends message if recipients invalid and thread containment is enabled but user's thread containment is disabled" do
     end
 
     test "it sends message if recipients invalid and thread containment is enabled but user's thread containment is disabled" do
-      Pleroma.Config.put([:instance, :skip_thread_containment], false)
+      clear_config([:instance, :skip_thread_containment], false)
       author = insert(:user)
       user = insert(:user, skip_thread_containment: true)
       %{token: oauth_token} = oauth_access(["read"], user: user)
       author = insert(:user)
       user = insert(:user, skip_thread_containment: true)
       %{token: oauth_token} = oauth_access(["read"], user: user)
@@ -800,6 +704,7 @@ defmodule Pleroma.Web.StreamerTest do
       refute_receive _
     end
 
       refute_receive _
     end
 
+    @tag :erratic
     test "it sends conversation update to the 'direct' stream when a message is deleted", %{
       user: user,
       token: oauth_token
     test "it sends conversation update to the 'direct' stream when a message is deleted", %{
       user: user,
       token: oauth_token