diff options
| author | lain <lain@soykaf.club> | 2020-05-30 12:31:12 +0200 | 
|---|---|---|
| committer | lain <lain@soykaf.club> | 2020-05-30 12:31:12 +0200 | 
| commit | 6ff079ca9f1869ecc0789f8d684e8ea2959ccf1e (patch) | |
| tree | 512ef8d0f3d1707d5078a04a229ede65175ab879 /test/web/mastodon_api | |
| parent | 8bdf18d7c10f0e740b2f5e0fa5063c522b8b3872 (diff) | |
| parent | b004c427a073f0f5f187f5978de416c0fae96ab8 (diff) | |
| download | pleroma-6ff079ca9f1869ecc0789f8d684e8ea2959ccf1e.tar.gz pleroma-6ff079ca9f1869ecc0789f8d684e8ea2959ccf1e.zip | |
Merge branch 'develop' of git.pleroma.social:pleroma/pleroma into remake-remodel-dms
Diffstat (limited to 'test/web/mastodon_api')
| -rw-r--r-- | test/web/mastodon_api/controllers/conversation_controller_test.exs | 183 | 
1 files changed, 92 insertions, 91 deletions
| 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 | 
