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 | |
| 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')
4 files changed, 118 insertions, 10 deletions
diff --git a/test/conversation/participation_test.exs b/test/conversation/participation_test.exs index a27167d42..f430bdf75 100644 --- a/test/conversation/participation_test.exs +++ b/test/conversation/participation_test.exs @@ -6,6 +6,7 @@ defmodule Pleroma.Conversation.ParticipationTest do    use Pleroma.DataCase    import Pleroma.Factory    alias Pleroma.Conversation.Participation +  alias Pleroma.User    alias Pleroma.Web.CommonAPI    test "getting a participation will also preload things" do @@ -30,6 +31,8 @@ defmodule Pleroma.Conversation.ParticipationTest do      {:ok, activity} =        CommonAPI.post(user, %{"status" => "Hey @#{other_user.nickname}.", "visibility" => "direct"}) +    user = User.get_cached_by_id(user.id) +    other_user = User.get_cached_by_id(user.id)      [participation] = Participation.for_user(user)      participation = Pleroma.Repo.preload(participation, :recipients) @@ -155,6 +158,7 @@ defmodule Pleroma.Conversation.ParticipationTest do      [participation] = Participation.for_user_with_last_activity_id(user)      participation = Repo.preload(participation, :recipients) +    user = User.get_cached_by_id(user.id)      assert participation.recipients |> length() == 1      assert user in participation.recipients 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 diff --git a/test/web/pleroma_api/controllers/pleroma_api_controller_test.exs b/test/web/pleroma_api/controllers/pleroma_api_controller_test.exs index 7eaeda4a0..8a6528cbb 100644 --- a/test/web/pleroma_api/controllers/pleroma_api_controller_test.exs +++ b/test/web/pleroma_api/controllers/pleroma_api_controller_test.exs @@ -8,6 +8,7 @@ defmodule Pleroma.Web.PleromaAPI.PleromaAPIControllerTest do    alias Pleroma.Conversation.Participation    alias Pleroma.Notification    alias Pleroma.Repo +  alias Pleroma.User    alias Pleroma.Web.CommonAPI    import Pleroma.Factory @@ -73,6 +74,7 @@ defmodule Pleroma.Web.PleromaAPI.PleromaAPIControllerTest do      participation = Repo.preload(participation, :recipients) +    user = User.get_cached_by_id(user.id)      assert [user] == participation.recipients      assert other_user not in participation.recipients  | 
