diff options
Diffstat (limited to 'test')
| -rw-r--r-- | test/web/activity_pub/relay_test.exs | 1 | ||||
| -rw-r--r-- | test/web/mastodon_api/controllers/conversation_controller_test.exs | 183 | ||||
| -rw-r--r-- | test/web/streamer/streamer_test.exs | 19 | 
3 files changed, 112 insertions, 91 deletions
| diff --git a/test/web/activity_pub/relay_test.exs b/test/web/activity_pub/relay_test.exs index dbee8a0f4..b3b573c9b 100644 --- a/test/web/activity_pub/relay_test.exs +++ b/test/web/activity_pub/relay_test.exs @@ -108,6 +108,7 @@ defmodule Pleroma.Web.ActivityPub.RelayTest do        assert {:ok, %Activity{} = activity} = Relay.publish(note)        assert activity.data["type"] == "Announce"        assert activity.data["actor"] == service_actor.ap_id +      assert activity.data["to"] == [service_actor.follower_address]        assert called(Pleroma.Web.Federator.publish(activity))      end diff --git a/test/web/mastodon_api/controllers/conversation_controller_test.exs b/test/web/mastodon_api/controllers/conversation_controller_test.exs index 693ba51e5..3e21e6bf1 100644 --- a/test/web/mastodon_api/controllers/conversation_controller_test.exs +++ b/test/web/mastodon_api/controllers/conversation_controller_test.exs @@ -12,84 +12,88 @@ defmodule Pleroma.Web.MastodonAPI.ConversationControllerTest do    setup do: oauth_access(["read:statuses"]) -  test "returns a list of conversations", %{user: user_one, conn: conn} do -    user_two = insert(:user) -    user_three = insert(:user) - -    {:ok, user_two} = User.follow(user_two, user_one) - -    assert User.get_cached_by_id(user_two.id).unread_conversation_count == 0 - -    {:ok, direct} = -      CommonAPI.post(user_one, %{ -        status: "Hi @#{user_two.nickname}, @#{user_three.nickname}!", -        visibility: "direct" -      }) - -    assert User.get_cached_by_id(user_two.id).unread_conversation_count == 1 - -    {:ok, _follower_only} = -      CommonAPI.post(user_one, %{ -        status: "Hi @#{user_two.nickname}!", -        visibility: "private" -      }) - -    res_conn = get(conn, "/api/v1/conversations") - -    assert response = json_response_and_validate_schema(res_conn, 200) - -    assert [ -             %{ -               "id" => res_id, -               "accounts" => res_accounts, -               "last_status" => res_last_status, -               "unread" => unread -             } -           ] = response - -    account_ids = Enum.map(res_accounts, & &1["id"]) -    assert length(res_accounts) == 2 -    assert user_two.id in account_ids -    assert user_three.id in account_ids -    assert is_binary(res_id) -    assert unread == false -    assert res_last_status["id"] == direct.id -    assert User.get_cached_by_id(user_one.id).unread_conversation_count == 0 +  describe "returns a list of conversations" do +    setup(%{user: user_one, conn: conn}) do +      user_two = insert(:user) +      user_three = insert(:user) + +      {:ok, user_two} = User.follow(user_two, user_one) + +      {:ok, %{user: user_one, user_two: user_two, user_three: user_three, conn: conn}} +    end + +    test "returns correct conversations", %{ +      user: user_one, +      user_two: user_two, +      user_three: user_three, +      conn: conn +    } do +      assert User.get_cached_by_id(user_two.id).unread_conversation_count == 0 +      {:ok, direct} = create_direct_message(user_one, [user_two, user_three]) + +      assert User.get_cached_by_id(user_two.id).unread_conversation_count == 1 + +      {:ok, _follower_only} = +        CommonAPI.post(user_one, %{ +          status: "Hi @#{user_two.nickname}!", +          visibility: "private" +        }) + +      res_conn = get(conn, "/api/v1/conversations") + +      assert response = json_response_and_validate_schema(res_conn, 200) + +      assert [ +               %{ +                 "id" => res_id, +                 "accounts" => res_accounts, +                 "last_status" => res_last_status, +                 "unread" => unread +               } +             ] = response + +      account_ids = Enum.map(res_accounts, & &1["id"]) +      assert length(res_accounts) == 2 +      assert user_two.id in account_ids +      assert user_three.id in account_ids +      assert is_binary(res_id) +      assert unread == false +      assert res_last_status["id"] == direct.id +      assert User.get_cached_by_id(user_one.id).unread_conversation_count == 0 +    end + +    test "observes limit params", %{ +      user: user_one, +      user_two: user_two, +      user_three: user_three, +      conn: conn +    } do +      {:ok, _} = create_direct_message(user_one, [user_two, user_three]) +      {:ok, _} = create_direct_message(user_two, [user_one, user_three]) +      {:ok, _} = create_direct_message(user_three, [user_two, user_one]) + +      res_conn = get(conn, "/api/v1/conversations?limit=1") + +      assert response = json_response_and_validate_schema(res_conn, 200) + +      assert Enum.count(response) == 1 + +      res_conn = get(conn, "/api/v1/conversations?limit=2") + +      assert response = json_response_and_validate_schema(res_conn, 200) + +      assert Enum.count(response) == 2 +    end    end    test "filters conversations by recipients", %{user: user_one, conn: conn} do      user_two = insert(:user)      user_three = insert(:user) - -    {:ok, direct1} = -      CommonAPI.post(user_one, %{ -        status: "Hi @#{user_two.nickname}!", -        visibility: "direct" -      }) - -    {:ok, _direct2} = -      CommonAPI.post(user_one, %{ -        status: "Hi @#{user_three.nickname}!", -        visibility: "direct" -      }) - -    {:ok, direct3} = -      CommonAPI.post(user_one, %{ -        status: "Hi @#{user_two.nickname}, @#{user_three.nickname}!", -        visibility: "direct" -      }) - -    {:ok, _direct4} = -      CommonAPI.post(user_two, %{ -        status: "Hi @#{user_three.nickname}!", -        visibility: "direct" -      }) - -    {:ok, direct5} = -      CommonAPI.post(user_two, %{ -        status: "Hi @#{user_one.nickname}!", -        visibility: "direct" -      }) +    {:ok, direct1} = create_direct_message(user_one, [user_two]) +    {:ok, _direct2} = create_direct_message(user_one, [user_three]) +    {:ok, direct3} = create_direct_message(user_one, [user_two, user_three]) +    {:ok, _direct4} = create_direct_message(user_two, [user_three]) +    {:ok, direct5} = create_direct_message(user_two, [user_one])      assert [conversation1, conversation2] =               conn @@ -109,12 +113,7 @@ defmodule Pleroma.Web.MastodonAPI.ConversationControllerTest do    test "updates the last_status on reply", %{user: user_one, conn: conn} do      user_two = insert(:user) - -    {:ok, direct} = -      CommonAPI.post(user_one, %{ -        status: "Hi @#{user_two.nickname}", -        visibility: "direct" -      }) +    {:ok, direct} = create_direct_message(user_one, [user_two])      {:ok, direct_reply} =        CommonAPI.post(user_two, %{ @@ -133,12 +132,7 @@ defmodule Pleroma.Web.MastodonAPI.ConversationControllerTest do    test "the user marks a conversation as read", %{user: user_one, conn: conn} do      user_two = insert(:user) - -    {:ok, direct} = -      CommonAPI.post(user_one, %{ -        status: "Hi @#{user_two.nickname}", -        visibility: "direct" -      }) +    {:ok, direct} = create_direct_message(user_one, [user_two])      assert User.get_cached_by_id(user_one.id).unread_conversation_count == 0      assert User.get_cached_by_id(user_two.id).unread_conversation_count == 1 @@ -194,15 +188,22 @@ defmodule Pleroma.Web.MastodonAPI.ConversationControllerTest do    test "(vanilla) Mastodon frontend behaviour", %{user: user_one, conn: conn} do      user_two = insert(:user) - -    {:ok, direct} = -      CommonAPI.post(user_one, %{ -        status: "Hi @#{user_two.nickname}!", -        visibility: "direct" -      }) +    {:ok, direct} = create_direct_message(user_one, [user_two])      res_conn = get(conn, "/api/v1/statuses/#{direct.id}/context")      assert %{"ancestors" => [], "descendants" => []} == json_response(res_conn, 200)    end + +  defp create_direct_message(sender, recips) do +    hellos = +      recips +      |> Enum.map(fn s -> "@#{s.nickname}" end) +      |> Enum.join(", ") + +    CommonAPI.post(sender, %{ +      status: "Hi #{hellos}!", +      visibility: "direct" +    }) +  end  end diff --git a/test/web/streamer/streamer_test.exs b/test/web/streamer/streamer_test.exs index ffbff35ca..bcb05a02d 100644 --- a/test/web/streamer/streamer_test.exs +++ b/test/web/streamer/streamer_test.exs @@ -114,6 +114,25 @@ defmodule Pleroma.Web.StreamerTest do        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) +    end +      test "it sends notify to in the 'user' stream", %{user: user, notify: notify} do        Streamer.get_topic_and_add_socket("user", user)        Streamer.stream("user", notify) | 
