diff options
| author | kaniini <ariadne@dereferenced.org> | 2019-10-05 19:28:07 +0000 | 
|---|---|---|
| committer | kaniini <ariadne@dereferenced.org> | 2019-10-05 19:28:07 +0000 | 
| commit | 17ff4b43cb75334e6a6845a7d7ec9c88285a339d (patch) | |
| tree | 44c9f86abc9d5eda51ccbe001c6f48779cf41cad /test/web/mastodon_api | |
| parent | 0ee6100c8d7d21eb0c7cdd1c098a5071c0b9682f (diff) | |
| parent | 8249924485965148f3a690c5d76e5f8b3bd78940 (diff) | |
| download | pleroma-17ff4b43cb75334e6a6845a7d7ec9c88285a339d.tar.gz pleroma-17ff4b43cb75334e6a6845a7d7ec9c88285a339d.zip  | |
Merge branch 'unread-conversation-count' into 'develop'
Add `pleroma.unread_conversation_count` to the Account entity
See merge request pleroma/pleroma!1796
Diffstat (limited to 'test/web/mastodon_api')
| -rw-r--r-- | test/web/mastodon_api/controllers/conversation_controller_test.exs | 101 | ||||
| -rw-r--r-- | test/web/mastodon_api/views/account_view_test.exs | 21 | 
2 files changed, 112 insertions, 10 deletions
diff --git a/test/web/mastodon_api/controllers/conversation_controller_test.exs b/test/web/mastodon_api/controllers/conversation_controller_test.exs index 7117fc76a..a308a7620 100644 --- a/test/web/mastodon_api/controllers/conversation_controller_test.exs +++ b/test/web/mastodon_api/controllers/conversation_controller_test.exs @@ -10,19 +10,23 @@ defmodule Pleroma.Web.MastodonAPI.ConversationControllerTest do    import Pleroma.Factory -  test "Conversations", %{conn: conn} do +  test "returns a list of conversations", %{conn: conn} do      user_one = insert(:user)      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).info.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).info.unread_conversation_count == 1 +      {:ok, _follower_only} =        CommonAPI.post(user_one, %{          "status" => "Hi @#{user_two.nickname}!", @@ -52,23 +56,100 @@ defmodule Pleroma.Web.MastodonAPI.ConversationControllerTest do      assert is_binary(res_id)      assert unread == true      assert res_last_status["id"] == direct.id +    assert User.get_cached_by_id(user_one.id).info.unread_conversation_count == 1 +  end -    # Apparently undocumented API endpoint -    res_conn = +  test "updates the last_status on reply", %{conn: conn} do +    user_one = insert(:user) +    user_two = insert(:user) + +    {:ok, direct} = +      CommonAPI.post(user_one, %{ +        "status" => "Hi @#{user_two.nickname}", +        "visibility" => "direct" +      }) + +    {:ok, direct_reply} = +      CommonAPI.post(user_two, %{ +        "status" => "reply", +        "visibility" => "direct", +        "in_reply_to_status_id" => direct.id +      }) + +    [%{"last_status" => res_last_status}] =        conn        |> assign(:user, user_one) -      |> post("/api/v1/conversations/#{res_id}/read") +      |> get("/api/v1/conversations") +      |> json_response(200) -    assert response = json_response(res_conn, 200) -    assert length(response["accounts"]) == 2 -    assert response["last_status"]["id"] == direct.id -    assert response["unread"] == false +    assert res_last_status["id"] == direct_reply.id +  end + +  test "the user marks a conversation as read", %{conn: conn} do +    user_one = insert(:user) +    user_two = insert(:user) + +    {:ok, direct} = +      CommonAPI.post(user_one, %{ +        "status" => "Hi @#{user_two.nickname}", +        "visibility" => "direct" +      }) + +    [%{"id" => direct_conversation_id, "unread" => true}] = +      conn +      |> assign(:user, user_one) +      |> get("/api/v1/conversations") +      |> json_response(200) + +    %{"unread" => false} = +      conn +      |> assign(:user, user_one) +      |> post("/api/v1/conversations/#{direct_conversation_id}/read") +      |> json_response(200) + +    assert User.get_cached_by_id(user_one.id).info.unread_conversation_count == 0 + +    # The conversation is marked as unread on reply +    {:ok, _} = +      CommonAPI.post(user_two, %{ +        "status" => "reply", +        "visibility" => "direct", +        "in_reply_to_status_id" => direct.id +      }) + +    [%{"unread" => true}] = +      conn +      |> assign(:user, user_one) +      |> get("/api/v1/conversations") +      |> json_response(200) + +    assert User.get_cached_by_id(user_one.id).info.unread_conversation_count == 1 + +    # A reply doesn't increment the user's unread_conversation_count if the conversation is unread +    {:ok, _} = +      CommonAPI.post(user_two, %{ +        "status" => "reply", +        "visibility" => "direct", +        "in_reply_to_status_id" => direct.id +      }) + +    assert User.get_cached_by_id(user_one.id).info.unread_conversation_count == 1 +  end + +  test "(vanilla) Mastodon frontend behaviour", %{conn: conn} do +    user_one = insert(:user) +    user_two = insert(:user) + +    {:ok, direct} = +      CommonAPI.post(user_one, %{ +        "status" => "Hi @#{user_two.nickname}!", +        "visibility" => "direct" +      }) -    # (vanilla) Mastodon frontend behaviour      res_conn =        conn        |> assign(:user, user_one) -      |> get("/api/v1/statuses/#{res_last_status["id"]}/context") +      |> get("/api/v1/statuses/#{direct.id}/context")      assert %{"ancestors" => [], "descendants" => []} == json_response(res_conn, 200)    end diff --git a/test/web/mastodon_api/views/account_view_test.exs b/test/web/mastodon_api/views/account_view_test.exs index 62b2ab7e3..b7a4938a6 100644 --- a/test/web/mastodon_api/views/account_view_test.exs +++ b/test/web/mastodon_api/views/account_view_test.exs @@ -418,6 +418,27 @@ defmodule Pleroma.Web.MastodonAPI.AccountViewTest do                 following_count: 1               } = AccountView.render("show.json", %{user: user, for: user})      end + +    test "shows unread_conversation_count only to the account owner" do +      user = insert(:user) +      other_user = insert(:user) + +      {:ok, _activity} = +        CommonAPI.post(user, %{ +          "status" => "Hey @#{other_user.nickname}.", +          "visibility" => "direct" +        }) + +      user = User.get_cached_by_ap_id(user.ap_id) + +      assert AccountView.render("show.json", %{user: user, for: other_user})[:pleroma][ +               :unread_conversation_count +             ] == nil + +      assert AccountView.render("show.json", %{user: user, for: user})[:pleroma][ +               :unread_conversation_count +             ] == 1 +    end    end    describe "follow requests counter" do  | 
