Merge branch 'develop' into feature/store-statuses-data-inside-flag
[akkoma] / test / web / streamer / streamer_test.exs
index 88847e20f5c2223f2726de12a72e7f8b68c7aefa..400f3287d254bcc4ba92eceaa8493d5a237ee3e0 100644 (file)
@@ -1,5 +1,5 @@
 # Pleroma: A lightweight social networking server
-# Copyright © 2017-2018 Pleroma Authors <https://pleroma.social/>
+# Copyright © 2017-2019 Pleroma Authors <https://pleroma.social/>
 # SPDX-License-Identifier: AGPL-3.0-only
 
 defmodule Pleroma.Web.StreamerTest do
@@ -213,7 +213,7 @@ defmodule Pleroma.Web.StreamerTest do
     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)
       author = insert(:user)
-      user = insert(:user, following: [author.ap_id], info: %{skip_thread_containment: true})
+      user = insert(:user, following: [author.ap_id], skip_thread_containment: true)
 
       activity =
         insert(:note_activity,
@@ -233,30 +233,68 @@ defmodule Pleroma.Web.StreamerTest do
     end
   end
 
-  test "it doesn't send to blocked users" do
-    user = insert(:user)
-    blocked_user = insert(:user)
-    {:ok, user} = User.block(user, blocked_user)
+  describe "blocks" do
+    test "it doesn't send messages involving blocked users" do
+      user = insert(:user)
+      blocked_user = insert(:user)
+      {:ok, user} = User.block(user, blocked_user)
 
-    task =
-      Task.async(fn ->
-        refute_receive {:text, _}, 1_000
-      end)
+      task =
+        Task.async(fn ->
+          refute_receive {:text, _}, 1_000
+        end)
 
-    fake_socket = %StreamerSocket{
-      transport_pid: task.pid,
-      user: user
-    }
+      fake_socket = %StreamerSocket{
+        transport_pid: task.pid,
+        user: user
+      }
 
-    {:ok, activity} = CommonAPI.post(blocked_user, %{"status" => "Test"})
+      {:ok, activity} = CommonAPI.post(blocked_user, %{"status" => "Test"})
 
-    topics = %{
-      "public" => [fake_socket]
-    }
+      topics = %{
+        "public" => [fake_socket]
+      }
 
-    Worker.push_to_socket(topics, "public", activity)
+      Worker.push_to_socket(topics, "public", activity)
 
-    Task.await(task)
+      Task.await(task)
+    end
+
+    test "it doesn't send messages transitively involving blocked users" do
+      blocker = insert(:user)
+      blockee = insert(:user)
+      friend = insert(:user)
+
+      task =
+        Task.async(fn ->
+          refute_receive {:text, _}, 1_000
+        end)
+
+      fake_socket = %StreamerSocket{
+        transport_pid: task.pid,
+        user: blocker
+      }
+
+      topics = %{
+        "public" => [fake_socket]
+      }
+
+      {:ok, blocker} = User.block(blocker, blockee)
+
+      {:ok, activity_one} = CommonAPI.post(friend, %{"status" => "hey! @#{blockee.nickname}"})
+
+      Worker.push_to_socket(topics, "public", activity_one)
+
+      {:ok, activity_two} = CommonAPI.post(blockee, %{"status" => "hey! @#{friend.nickname}"})
+
+      Worker.push_to_socket(topics, "public", activity_two)
+
+      {:ok, activity_three} = CommonAPI.post(blockee, %{"status" => "hey! @#{blocker.nickname}"})
+
+      Worker.push_to_socket(topics, "public", activity_three)
+
+      Task.await(task)
+    end
   end
 
   test "it doesn't send unwanted DMs to list" do