diff options
Diffstat (limited to 'test/web')
| -rw-r--r-- | test/web/activity_pub/activity_pub_controller_test.exs | 83 | ||||
| -rw-r--r-- | test/web/activity_pub/activity_pub_test.exs | 4 | ||||
| -rw-r--r-- | test/web/activity_pub/publisher_test.exs | 68 | ||||
| -rw-r--r-- | test/web/activity_pub/utils_test.exs | 232 | ||||
| -rw-r--r-- | test/web/admin_api/admin_api_controller_test.exs | 8 | ||||
| -rw-r--r-- | test/web/mastodon_api/mastodon_api_controller_test.exs | 2 | ||||
| -rw-r--r-- | test/web/streamer/ping_test.exs | 36 | ||||
| -rw-r--r-- | test/web/streamer/state_test.exs | 54 | ||||
| -rw-r--r-- | test/web/streamer/streamer_test.exs (renamed from test/web/streamer_test.exs) | 105 | 
9 files changed, 521 insertions, 71 deletions
| diff --git a/test/web/activity_pub/activity_pub_controller_test.exs b/test/web/activity_pub/activity_pub_controller_test.exs index 9b78fb72d..f83b14452 100644 --- a/test/web/activity_pub/activity_pub_controller_test.exs +++ b/test/web/activity_pub/activity_pub_controller_test.exs @@ -8,6 +8,7 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubControllerTest do    import Pleroma.Factory    alias Pleroma.Activity +  alias Pleroma.Delivery    alias Pleroma.Instances    alias Pleroma.Object    alias Pleroma.Tests.ObanHelpers @@ -893,4 +894,86 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubControllerTest do        assert result["totalItems"] == 15      end    end + +  describe "delivery tracking" do +    test "it tracks a signed object fetch", %{conn: conn} do +      user = insert(:user, local: false) +      activity = insert(:note_activity) +      object = Object.normalize(activity) + +      object_path = String.trim_leading(object.data["id"], Pleroma.Web.Endpoint.url()) + +      conn +      |> put_req_header("accept", "application/activity+json") +      |> assign(:user, user) +      |> get(object_path) +      |> json_response(200) + +      assert Delivery.get(object.id, user.id) +    end + +    test "it tracks a signed activity fetch", %{conn: conn} do +      user = insert(:user, local: false) +      activity = insert(:note_activity) +      object = Object.normalize(activity) + +      activity_path = String.trim_leading(activity.data["id"], Pleroma.Web.Endpoint.url()) + +      conn +      |> put_req_header("accept", "application/activity+json") +      |> assign(:user, user) +      |> get(activity_path) +      |> json_response(200) + +      assert Delivery.get(object.id, user.id) +    end + +    test "it tracks a signed object fetch when the json is cached", %{conn: conn} do +      user = insert(:user, local: false) +      other_user = insert(:user, local: false) +      activity = insert(:note_activity) +      object = Object.normalize(activity) + +      object_path = String.trim_leading(object.data["id"], Pleroma.Web.Endpoint.url()) + +      conn +      |> put_req_header("accept", "application/activity+json") +      |> assign(:user, user) +      |> get(object_path) +      |> json_response(200) + +      build_conn() +      |> put_req_header("accept", "application/activity+json") +      |> assign(:user, other_user) +      |> get(object_path) +      |> json_response(200) + +      assert Delivery.get(object.id, user.id) +      assert Delivery.get(object.id, other_user.id) +    end + +    test "it tracks a signed activity fetch when the json is cached", %{conn: conn} do +      user = insert(:user, local: false) +      other_user = insert(:user, local: false) +      activity = insert(:note_activity) +      object = Object.normalize(activity) + +      activity_path = String.trim_leading(activity.data["id"], Pleroma.Web.Endpoint.url()) + +      conn +      |> put_req_header("accept", "application/activity+json") +      |> assign(:user, user) +      |> get(activity_path) +      |> json_response(200) + +      build_conn() +      |> put_req_header("accept", "application/activity+json") +      |> assign(:user, other_user) +      |> get(activity_path) +      |> json_response(200) + +      assert Delivery.get(object.id, user.id) +      assert Delivery.get(object.id, other_user.id) +    end +  end  end diff --git a/test/web/activity_pub/activity_pub_test.exs b/test/web/activity_pub/activity_pub_test.exs index d0118fefa..4100108a5 100644 --- a/test/web/activity_pub/activity_pub_test.exs +++ b/test/web/activity_pub/activity_pub_test.exs @@ -38,9 +38,7 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubTest do          stream: fn _, _ -> nil end do          ActivityPub.stream_out_participations(conversation.participations) -        Enum.each(participations, fn participation -> -          assert called(Pleroma.Web.Streamer.stream("participation", participation)) -        end) +        assert called(Pleroma.Web.Streamer.stream("participation", participations))        end      end    end diff --git a/test/web/activity_pub/publisher_test.exs b/test/web/activity_pub/publisher_test.exs index c7d0dc3a5..df03b4008 100644 --- a/test/web/activity_pub/publisher_test.exs +++ b/test/web/activity_pub/publisher_test.exs @@ -3,7 +3,7 @@  # SPDX-License-Identifier: AGPL-3.0-only  defmodule Pleroma.Web.ActivityPub.PublisherTest do -  use Pleroma.DataCase +  use Pleroma.Web.ConnCase    import ExUnit.CaptureLog    import Pleroma.Factory @@ -12,7 +12,9 @@ defmodule Pleroma.Web.ActivityPub.PublisherTest do    alias Pleroma.Activity    alias Pleroma.Instances +  alias Pleroma.Object    alias Pleroma.Web.ActivityPub.Publisher +  alias Pleroma.Web.CommonAPI    @as_public "https://www.w3.org/ns/activitystreams#Public" @@ -268,5 +270,69 @@ defmodule Pleroma.Web.ActivityPub.PublisherTest do                 })               )      end + +    test_with_mock "publishes a delete activity to peers who signed fetch requests to the create acitvity/object.", +                   Pleroma.Web.Federator.Publisher, +                   [:passthrough], +                   [] do +      fetcher = +        insert(:user, +          local: false, +          info: %{ +            ap_enabled: true, +            source_data: %{"inbox" => "https://domain.com/users/nick1/inbox"} +          } +        ) + +      another_fetcher = +        insert(:user, +          local: false, +          info: %{ +            ap_enabled: true, +            source_data: %{"inbox" => "https://domain2.com/users/nick1/inbox"} +          } +        ) + +      actor = insert(:user) + +      note_activity = insert(:note_activity, user: actor) +      object = Object.normalize(note_activity) + +      activity_path = String.trim_leading(note_activity.data["id"], Pleroma.Web.Endpoint.url()) +      object_path = String.trim_leading(object.data["id"], Pleroma.Web.Endpoint.url()) + +      build_conn() +      |> put_req_header("accept", "application/activity+json") +      |> assign(:user, fetcher) +      |> get(object_path) +      |> json_response(200) + +      build_conn() +      |> put_req_header("accept", "application/activity+json") +      |> assign(:user, another_fetcher) +      |> get(activity_path) +      |> json_response(200) + +      {:ok, delete} = CommonAPI.delete(note_activity.id, actor) + +      res = Publisher.publish(actor, delete) +      assert res == :ok + +      assert called( +               Pleroma.Web.Federator.Publisher.enqueue_one(Publisher, %{ +                 inbox: "https://domain.com/users/nick1/inbox", +                 actor_id: actor.id, +                 id: delete.data["id"] +               }) +             ) + +      assert called( +               Pleroma.Web.Federator.Publisher.enqueue_one(Publisher, %{ +                 inbox: "https://domain2.com/users/nick1/inbox", +                 actor_id: actor.id, +                 id: delete.data["id"] +               }) +             ) +    end    end  end diff --git a/test/web/activity_pub/utils_test.exs b/test/web/activity_pub/utils_test.exs index eb429b2c4..b1c1d6f71 100644 --- a/test/web/activity_pub/utils_test.exs +++ b/test/web/activity_pub/utils_test.exs @@ -87,6 +87,18 @@ defmodule Pleroma.Web.ActivityPub.UtilsTest do        assert Utils.determine_explicit_mentions(object) == []      end + +    test "works with an object has tags as map" do +      object = %{ +        "tag" => %{ +          "type" => "Mention", +          "href" => "https://example.com/~alyssa", +          "name" => "Alyssa P. Hacker" +        } +      } + +      assert Utils.determine_explicit_mentions(object) == ["https://example.com/~alyssa"] +    end    end    describe "make_unlike_data/3" do @@ -300,8 +312,8 @@ defmodule Pleroma.Web.ActivityPub.UtilsTest do        {:ok, follow_activity_two} =          Utils.update_follow_state_for_all(follow_activity_two, "accept") -      assert Repo.get(Activity, follow_activity.id).data["state"] == "accept" -      assert Repo.get(Activity, follow_activity_two.id).data["state"] == "accept" +      assert refresh_record(follow_activity).data["state"] == "accept" +      assert refresh_record(follow_activity_two).data["state"] == "accept"      end    end @@ -323,8 +335,8 @@ defmodule Pleroma.Web.ActivityPub.UtilsTest do        {:ok, follow_activity_two} = Utils.update_follow_state(follow_activity_two, "reject") -      assert Repo.get(Activity, follow_activity.id).data["state"] == "pending" -      assert Repo.get(Activity, follow_activity_two.id).data["state"] == "reject" +      assert refresh_record(follow_activity).data["state"] == "pending" +      assert refresh_record(follow_activity_two).data["state"] == "reject"      end    end @@ -401,4 +413,216 @@ defmodule Pleroma.Web.ActivityPub.UtilsTest do        assert ^like_activity = Utils.get_existing_like(user.ap_id, object)      end    end + +  describe "get_get_existing_announce/2" do +    test "returns nil if announce not found" do +      actor = insert(:user) +      refute Utils.get_existing_announce(actor.ap_id, %{data: %{"id" => "test"}}) +    end + +    test "fetches existing announce" do +      note_activity = insert(:note_activity) +      assert object = Object.normalize(note_activity) +      actor = insert(:user) + +      {:ok, announce, _object} = ActivityPub.announce(actor, object) +      assert Utils.get_existing_announce(actor.ap_id, object) == announce +    end +  end + +  describe "fetch_latest_block/2" do +    test "fetches last block activities" do +      user1 = insert(:user) +      user2 = insert(:user) + +      assert {:ok, %Activity{} = _} = ActivityPub.block(user1, user2) +      assert {:ok, %Activity{} = _} = ActivityPub.block(user1, user2) +      assert {:ok, %Activity{} = activity} = ActivityPub.block(user1, user2) + +      assert Utils.fetch_latest_block(user1, user2) == activity +    end +  end + +  describe "recipient_in_message/3" do +    test "returns true when recipient in `to`" do +      recipient = insert(:user) +      actor = insert(:user) +      assert Utils.recipient_in_message(recipient, actor, %{"to" => recipient.ap_id}) + +      assert Utils.recipient_in_message( +               recipient, +               actor, +               %{"to" => [recipient.ap_id], "cc" => ""} +             ) +    end + +    test "returns true when recipient in `cc`" do +      recipient = insert(:user) +      actor = insert(:user) +      assert Utils.recipient_in_message(recipient, actor, %{"cc" => recipient.ap_id}) + +      assert Utils.recipient_in_message( +               recipient, +               actor, +               %{"cc" => [recipient.ap_id], "to" => ""} +             ) +    end + +    test "returns true when recipient in `bto`" do +      recipient = insert(:user) +      actor = insert(:user) +      assert Utils.recipient_in_message(recipient, actor, %{"bto" => recipient.ap_id}) + +      assert Utils.recipient_in_message( +               recipient, +               actor, +               %{"bcc" => "", "bto" => [recipient.ap_id]} +             ) +    end + +    test "returns true when recipient in `bcc`" do +      recipient = insert(:user) +      actor = insert(:user) +      assert Utils.recipient_in_message(recipient, actor, %{"bcc" => recipient.ap_id}) + +      assert Utils.recipient_in_message( +               recipient, +               actor, +               %{"bto" => "", "bcc" => [recipient.ap_id]} +             ) +    end + +    test "returns true when message without addresses fields" do +      recipient = insert(:user) +      actor = insert(:user) +      assert Utils.recipient_in_message(recipient, actor, %{"bccc" => recipient.ap_id}) + +      assert Utils.recipient_in_message( +               recipient, +               actor, +               %{"btod" => "", "bccc" => [recipient.ap_id]} +             ) +    end + +    test "returns false" do +      recipient = insert(:user) +      actor = insert(:user) +      refute Utils.recipient_in_message(recipient, actor, %{"to" => "ap_id"}) +    end +  end + +  describe "lazy_put_activity_defaults/2" do +    test "returns map with id and published data" do +      note_activity = insert(:note_activity) +      object = Object.normalize(note_activity) +      res = Utils.lazy_put_activity_defaults(%{"context" => object.data["id"]}) +      assert res["context"] == object.data["id"] +      assert res["context_id"] == object.id +      assert res["id"] +      assert res["published"] +    end + +    test "returns map with fake id and published data" do +      assert %{ +               "context" => "pleroma:fakecontext", +               "context_id" => -1, +               "id" => "pleroma:fakeid", +               "published" => _ +             } = Utils.lazy_put_activity_defaults(%{}, true) +    end + +    test "returns activity data with object" do +      note_activity = insert(:note_activity) +      object = Object.normalize(note_activity) + +      res = +        Utils.lazy_put_activity_defaults(%{ +          "context" => object.data["id"], +          "object" => %{} +        }) + +      assert res["context"] == object.data["id"] +      assert res["context_id"] == object.id +      assert res["id"] +      assert res["published"] +      assert res["object"]["id"] +      assert res["object"]["published"] +      assert res["object"]["context"] == object.data["id"] +      assert res["object"]["context_id"] == object.id +    end +  end + +  describe "make_flag_data" do +    test "returns empty map when params is invalid" do +      assert Utils.make_flag_data(%{}, %{}) == %{} +    end + +    test "returns map with Flag object" do +      reporter = insert(:user) +      target_account = insert(:user) +      {:ok, activity} = CommonAPI.post(target_account, %{"status" => "foobar"}) +      context = Utils.generate_context_id() +      content = "foobar" + +      target_ap_id = target_account.ap_id +      activity_ap_id = activity.data["id"] + +      res = +        Utils.make_flag_data( +          %{ +            actor: reporter, +            context: context, +            account: target_account, +            statuses: [%{"id" => activity.data["id"]}], +            content: content +          }, +          %{} +        ) + +      assert %{ +               "type" => "Flag", +               "content" => ^content, +               "context" => ^context, +               "object" => [^target_ap_id, ^activity_ap_id], +               "state" => "open" +             } = res +    end +  end + +  describe "add_announce_to_object/2" do +    test "adds actor to announcement" do +      user = insert(:user) +      object = insert(:note) + +      activity = +        insert(:note_activity, +          data: %{ +            "actor" => user.ap_id, +            "cc" => [Pleroma.Constants.as_public()] +          } +        ) + +      assert {:ok, updated_object} = Utils.add_announce_to_object(activity, object) +      assert updated_object.data["announcements"] == [user.ap_id] +      assert updated_object.data["announcement_count"] == 1 +    end +  end + +  describe "remove_announce_from_object/2" do +    test "removes actor from announcements" do +      user = insert(:user) +      user2 = insert(:user) + +      object = +        insert(:note, +          data: %{"announcements" => [user.ap_id, user2.ap_id], "announcement_count" => 2} +        ) + +      activity = insert(:note_activity, data: %{"actor" => user.ap_id}) + +      assert {:ok, updated_object} = Utils.remove_announce_from_object(activity, object) +      assert updated_object.data["announcements"] == [user2.ap_id] +      assert updated_object.data["announcement_count"] == 1 +    end +  end  end diff --git a/test/web/admin_api/admin_api_controller_test.exs b/test/web/admin_api/admin_api_controller_test.exs index 516de5d0c..c497ea098 100644 --- a/test/web/admin_api/admin_api_controller_test.exs +++ b/test/web/admin_api/admin_api_controller_test.exs @@ -1309,6 +1309,7 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do          |> json_response(:ok)        assert Enum.empty?(response["reports"]) +      assert response["total"] == 0      end      test "returns reports", %{conn: conn} do @@ -1331,6 +1332,8 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do        assert length(response["reports"]) == 1        assert report["id"] == report_id + +      assert response["total"] == 1      end      test "returns reports with specified state", %{conn: conn} do @@ -1364,6 +1367,8 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do        assert length(response["reports"]) == 1        assert open_report["id"] == first_report_id +      assert response["total"] == 1 +        response =          conn          |> get("/api/pleroma/admin/reports", %{ @@ -1376,6 +1381,8 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do        assert length(response["reports"]) == 1        assert closed_report["id"] == second_report_id +      assert response["total"] == 1 +        response =          conn          |> get("/api/pleroma/admin/reports", %{ @@ -1384,6 +1391,7 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do          |> json_response(:ok)        assert Enum.empty?(response["reports"]) +      assert response["total"] == 0      end      test "returns 403 when requested by a non-admin" do diff --git a/test/web/mastodon_api/mastodon_api_controller_test.exs b/test/web/mastodon_api/mastodon_api_controller_test.exs index 9c5322ccb..fb04748bb 100644 --- a/test/web/mastodon_api/mastodon_api_controller_test.exs +++ b/test/web/mastodon_api/mastodon_api_controller_test.exs @@ -752,7 +752,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIControllerTest do      query_string = "ids[]=#{id1}&ids[]=#{id2}"      conn = get(conn, "/api/v1/statuses/?#{query_string}") -    assert [%{"id" => ^id1}, %{"id" => ^id2}] = json_response(conn, :ok) +    assert [%{"id" => ^id1}, %{"id" => ^id2}] = Enum.sort_by(json_response(conn, :ok), & &1["id"])    end    describe "deleting a status" do diff --git a/test/web/streamer/ping_test.exs b/test/web/streamer/ping_test.exs new file mode 100644 index 000000000..3d52c00e4 --- /dev/null +++ b/test/web/streamer/ping_test.exs @@ -0,0 +1,36 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2019 Pleroma Authors <https://pleroma.social/> +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.PingTest do +  use Pleroma.DataCase + +  import Pleroma.Factory +  alias Pleroma.Web.Streamer + +  setup do +    start_supervised({Streamer.supervisor(), [ping_interval: 30]}) + +    :ok +  end + +  describe "sockets" do +    setup do +      user = insert(:user) +      {:ok, %{user: user}} +    end + +    test "it sends pings", %{user: user} do +      task = +        Task.async(fn -> +          assert_receive {:text, received_event}, 40 +          assert_receive {:text, received_event}, 40 +          assert_receive {:text, received_event}, 40 +        end) + +      Streamer.add_socket("public", %{transport_pid: task.pid, assigns: %{user: user}}) + +      Task.await(task) +    end +  end +end diff --git a/test/web/streamer/state_test.exs b/test/web/streamer/state_test.exs new file mode 100644 index 000000000..d1aeac541 --- /dev/null +++ b/test/web/streamer/state_test.exs @@ -0,0 +1,54 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2019 Pleroma Authors <https://pleroma.social/> +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.StateTest do +  use Pleroma.DataCase + +  import Pleroma.Factory +  alias Pleroma.Web.Streamer +  alias Pleroma.Web.Streamer.StreamerSocket + +  @moduletag needs_streamer: true + +  describe "sockets" do +    setup do +      user = insert(:user) +      user2 = insert(:user) +      {:ok, %{user: user, user2: user2}} +    end + +    test "it can add a socket", %{user: user} do +      Streamer.add_socket("public", %{transport_pid: 1, assigns: %{user: user}}) + +      assert(%{"public" => [%StreamerSocket{transport_pid: 1}]} = Streamer.get_sockets()) +    end + +    test "it can add multiple sockets per user", %{user: user} do +      Streamer.add_socket("public", %{transport_pid: 1, assigns: %{user: user}}) +      Streamer.add_socket("public", %{transport_pid: 2, assigns: %{user: user}}) + +      assert( +        %{ +          "public" => [ +            %StreamerSocket{transport_pid: 2}, +            %StreamerSocket{transport_pid: 1} +          ] +        } = Streamer.get_sockets() +      ) +    end + +    test "it will not add a duplicate socket", %{user: user} do +      Streamer.add_socket("activity", %{transport_pid: 1, assigns: %{user: user}}) +      Streamer.add_socket("activity", %{transport_pid: 1, assigns: %{user: user}}) + +      assert( +        %{ +          "activity" => [ +            %StreamerSocket{transport_pid: 1} +          ] +        } = Streamer.get_sockets() +      ) +    end +  end +end diff --git a/test/web/streamer_test.exs b/test/web/streamer/streamer_test.exs index 96fa7645f..88847e20f 100644 --- a/test/web/streamer_test.exs +++ b/test/web/streamer/streamer_test.exs @@ -5,24 +5,20 @@  defmodule Pleroma.Web.StreamerTest do    use Pleroma.DataCase +  import Pleroma.Factory +    alias Pleroma.List    alias Pleroma.User    alias Pleroma.Web.CommonAPI    alias Pleroma.Web.Streamer -  import Pleroma.Factory +  alias Pleroma.Web.Streamer.StreamerSocket +  alias Pleroma.Web.Streamer.Worker +  @moduletag needs_streamer: true    clear_config_all([:instance, :skip_thread_containment])    describe "user streams" do      setup do -      GenServer.start(Streamer, %{}, name: Streamer) - -      on_exit(fn -> -        if pid = Process.whereis(Streamer) do -          Process.exit(pid, :kill) -        end -      end) -        user = insert(:user)        notify = insert(:notification, user: user, activity: build(:note_activity))        {:ok, %{user: user, notify: notify}} @@ -125,11 +121,9 @@ defmodule Pleroma.Web.StreamerTest do          assert_receive {:text, _}, 4_000        end) -    fake_socket = %{ +    fake_socket = %StreamerSocket{        transport_pid: task.pid, -      assigns: %{ -        user: user -      } +      user: user      }      {:ok, activity} = CommonAPI.post(other_user, %{"status" => "Test"}) @@ -138,7 +132,7 @@ defmodule Pleroma.Web.StreamerTest do        "public" => [fake_socket]      } -    Streamer.push_to_socket(topics, "public", activity) +    Worker.push_to_socket(topics, "public", activity)      Task.await(task) @@ -155,11 +149,9 @@ defmodule Pleroma.Web.StreamerTest do          assert received_event == expected_event        end) -    fake_socket = %{ +    fake_socket = %StreamerSocket{        transport_pid: task.pid, -      assigns: %{ -        user: user -      } +      user: user      }      {:ok, activity} = CommonAPI.delete(activity.id, other_user) @@ -168,7 +160,7 @@ defmodule Pleroma.Web.StreamerTest do        "public" => [fake_socket]      } -    Streamer.push_to_socket(topics, "public", activity) +    Worker.push_to_socket(topics, "public", activity)      Task.await(task)    end @@ -189,9 +181,9 @@ defmodule Pleroma.Web.StreamerTest do          )        task = Task.async(fn -> refute_receive {:text, _}, 1_000 end) -      fake_socket = %{transport_pid: task.pid, assigns: %{user: user}} +      fake_socket = %StreamerSocket{transport_pid: task.pid, user: user}        topics = %{"public" => [fake_socket]} -      Streamer.push_to_socket(topics, "public", activity) +      Worker.push_to_socket(topics, "public", activity)        Task.await(task)      end @@ -211,9 +203,9 @@ defmodule Pleroma.Web.StreamerTest do          )        task = Task.async(fn -> assert_receive {:text, _}, 1_000 end) -      fake_socket = %{transport_pid: task.pid, assigns: %{user: user}} +      fake_socket = %StreamerSocket{transport_pid: task.pid, user: user}        topics = %{"public" => [fake_socket]} -      Streamer.push_to_socket(topics, "public", activity) +      Worker.push_to_socket(topics, "public", activity)        Task.await(task)      end @@ -233,9 +225,9 @@ defmodule Pleroma.Web.StreamerTest do          )        task = Task.async(fn -> assert_receive {:text, _}, 1_000 end) -      fake_socket = %{transport_pid: task.pid, assigns: %{user: user}} +      fake_socket = %StreamerSocket{transport_pid: task.pid, user: user}        topics = %{"public" => [fake_socket]} -      Streamer.push_to_socket(topics, "public", activity) +      Worker.push_to_socket(topics, "public", activity)        Task.await(task)      end @@ -251,11 +243,9 @@ defmodule Pleroma.Web.StreamerTest do          refute_receive {:text, _}, 1_000        end) -    fake_socket = %{ +    fake_socket = %StreamerSocket{        transport_pid: task.pid, -      assigns: %{ -        user: user -      } +      user: user      }      {:ok, activity} = CommonAPI.post(blocked_user, %{"status" => "Test"}) @@ -264,7 +254,7 @@ defmodule Pleroma.Web.StreamerTest do        "public" => [fake_socket]      } -    Streamer.push_to_socket(topics, "public", activity) +    Worker.push_to_socket(topics, "public", activity)      Task.await(task)    end @@ -284,11 +274,9 @@ defmodule Pleroma.Web.StreamerTest do          refute_receive {:text, _}, 1_000        end) -    fake_socket = %{ +    fake_socket = %StreamerSocket{        transport_pid: task.pid, -      assigns: %{ -        user: user_a -      } +      user: user_a      }      {:ok, activity} = @@ -301,7 +289,7 @@ defmodule Pleroma.Web.StreamerTest do        "list:#{list.id}" => [fake_socket]      } -    Streamer.handle_cast(%{action: :stream, topic: "list", item: activity}, topics) +    Worker.handle_call({:stream, "list", activity}, self(), topics)      Task.await(task)    end @@ -318,11 +306,9 @@ defmodule Pleroma.Web.StreamerTest do          refute_receive {:text, _}, 1_000        end) -    fake_socket = %{ +    fake_socket = %StreamerSocket{        transport_pid: task.pid, -      assigns: %{ -        user: user_a -      } +      user: user_a      }      {:ok, activity} = @@ -335,12 +321,12 @@ defmodule Pleroma.Web.StreamerTest do        "list:#{list.id}" => [fake_socket]      } -    Streamer.handle_cast(%{action: :stream, topic: "list", item: activity}, topics) +    Worker.handle_call({:stream, "list", activity}, self(), topics)      Task.await(task)    end -  test "it send wanted private posts to list" do +  test "it sends wanted private posts to list" do      user_a = insert(:user)      user_b = insert(:user) @@ -354,11 +340,9 @@ defmodule Pleroma.Web.StreamerTest do          assert_receive {:text, _}, 1_000        end) -    fake_socket = %{ +    fake_socket = %StreamerSocket{        transport_pid: task.pid, -      assigns: %{ -        user: user_a -      } +      user: user_a      }      {:ok, activity} = @@ -367,11 +351,12 @@ defmodule Pleroma.Web.StreamerTest do          "visibility" => "private"        }) -    topics = %{ -      "list:#{list.id}" => [fake_socket] -    } +    Streamer.add_socket( +      "list:#{list.id}", +      fake_socket +    ) -    Streamer.handle_cast(%{action: :stream, topic: "list", item: activity}, topics) +    Worker.handle_call({:stream, "list", activity}, self(), %{})      Task.await(task)    end @@ -387,11 +372,9 @@ defmodule Pleroma.Web.StreamerTest do          refute_receive {:text, _}, 1_000        end) -    fake_socket = %{ +    fake_socket = %StreamerSocket{        transport_pid: task.pid, -      assigns: %{ -        user: user1 -      } +      user: user1      }      {:ok, create_activity} = CommonAPI.post(user3, %{"status" => "I'm kawen"}) @@ -401,7 +384,7 @@ defmodule Pleroma.Web.StreamerTest do        "public" => [fake_socket]      } -    Streamer.push_to_socket(topics, "public", announce_activity) +    Worker.push_to_socket(topics, "public", announce_activity)      Task.await(task)    end @@ -417,6 +400,8 @@ defmodule Pleroma.Web.StreamerTest do      task = Task.async(fn -> refute_receive {:text, _}, 4_000 end) +    Process.sleep(4000) +      Streamer.add_socket(        "user",        %{transport_pid: task.pid, assigns: %{user: user2}} @@ -428,14 +413,6 @@ defmodule Pleroma.Web.StreamerTest do    describe "direct streams" do      setup do -      GenServer.start(Streamer, %{}, name: Streamer) - -      on_exit(fn -> -        if pid = Process.whereis(Streamer) do -          Process.exit(pid, :kill) -        end -      end) -        :ok      end @@ -480,6 +457,8 @@ defmodule Pleroma.Web.StreamerTest do            refute_receive {:text, _}, 4_000          end) +      Process.sleep(1000) +        Streamer.add_socket(          "direct",          %{transport_pid: task.pid, assigns: %{user: user}} @@ -521,6 +500,8 @@ defmodule Pleroma.Web.StreamerTest do            assert last_status["id"] == to_string(create_activity.id)          end) +      Process.sleep(1000) +        Streamer.add_socket(          "direct",          %{transport_pid: task.pid, assigns: %{user: user}} | 
