diff options
Diffstat (limited to 'test')
| -rw-r--r-- | test/conversation/participation_test.exs | 132 | ||||
| -rw-r--r-- | test/web/activity_pub/transmogrifier_test.exs | 2 | 
2 files changed, 132 insertions, 2 deletions
| diff --git a/test/conversation/participation_test.exs b/test/conversation/participation_test.exs index 91867bf70..863270022 100644 --- a/test/conversation/participation_test.exs +++ b/test/conversation/participation_test.exs @@ -140,7 +140,7 @@ defmodule Pleroma.Conversation.ParticipationTest do      participation2 = insert(:participation, %{read: false, user: user})      participation3 = insert(:participation, %{read: false, user: other_user}) -    {:ok, [%{read: true}, %{read: true}]} = Participation.mark_all_as_read(user) +    {:ok, _, [%{read: true}, %{read: true}]} = Participation.mark_all_as_read(user)      assert Participation.get(participation1.id).read == true      assert Participation.get(participation2.id).read == true @@ -216,4 +216,134 @@ defmodule Pleroma.Conversation.ParticipationTest do      assert user in participation.recipients      assert other_user in participation.recipients    end + +  describe "blocking" do +    test "when the user blocks a recipient, the existing conversations with them are marked as read" do +      blocker = insert(:user) +      blocked = insert(:user) +      third_user = insert(:user) + +      {:ok, _direct1} = +        CommonAPI.post(third_user, %{ +          "status" => "Hi @#{blocker.nickname}", +          "visibility" => "direct" +        }) + +      {:ok, _direct2} = +        CommonAPI.post(third_user, %{ +          "status" => "Hi @#{blocker.nickname}, @#{blocked.nickname}", +          "visibility" => "direct" +        }) + +      {:ok, _direct3} = +        CommonAPI.post(blocked, %{ +          "status" => "Hi @#{blocker.nickname}", +          "visibility" => "direct" +        }) + +      {:ok, _direct4} = +        CommonAPI.post(blocked, %{ +          "status" => "Hi @#{blocker.nickname}, @#{third_user.nickname}", +          "visibility" => "direct" +        }) + +      assert [%{read: false}, %{read: false}, %{read: false}, %{read: false}] = +               Participation.for_user(blocker) + +      assert User.get_cached_by_id(blocker.id).unread_conversation_count == 4 + +      {:ok, blocker} = User.block(blocker, blocked) + +      # The conversations with the blocked user are marked as read +      assert [%{read: true}, %{read: true}, %{read: true}, %{read: false}] = +               Participation.for_user(blocker) + +      assert User.get_cached_by_id(blocker.id).unread_conversation_count == 1 + +      # The conversation is not marked as read for the blocked user +      assert [_, _, %{read: false}] = Participation.for_user(blocked) +      assert User.get_cached_by_id(blocked.id).unread_conversation_count == 1 + +      # The conversation is not marked as read for the third user +      assert [%{read: false}, _, _] = Participation.for_user(third_user) +      assert User.get_cached_by_id(third_user.id).unread_conversation_count == 1 +    end + +    test "the new conversation with the blocked user is not marked as unread " do +      blocker = insert(:user) +      blocked = insert(:user) +      third_user = insert(:user) + +      {:ok, blocker} = User.block(blocker, blocked) + +      # When the blocked user is the author +      {:ok, _direct1} = +        CommonAPI.post(blocked, %{ +          "status" => "Hi @#{blocker.nickname}", +          "visibility" => "direct" +        }) + +      assert [%{read: true}] = Participation.for_user(blocker) +      assert User.get_cached_by_id(blocker.id).unread_conversation_count == 0 + +      # When the blocked user is a recipient +      {:ok, _direct2} = +        CommonAPI.post(third_user, %{ +          "status" => "Hi @#{blocker.nickname}, @#{blocked.nickname}", +          "visibility" => "direct" +        }) + +      assert [%{read: true}, %{read: true}] = Participation.for_user(blocker) +      assert User.get_cached_by_id(blocker.id).unread_conversation_count == 0 + +      assert [%{read: false}, _] = Participation.for_user(blocked) +      assert User.get_cached_by_id(blocked.id).unread_conversation_count == 1 +    end + +    test "the conversation with the blocked user is not marked as unread on a reply" do +      blocker = insert(:user) +      blocked = insert(:user) +      third_user = insert(:user) + +      {:ok, _direct1} = +        CommonAPI.post(blocker, %{ +          "status" => "Hi @#{third_user.nickname}, @#{blocked.nickname}", +          "visibility" => "direct" +        }) + +      {:ok, blocker} = User.block(blocker, blocked) +      assert [%{read: true}] = Participation.for_user(blocker) +      assert User.get_cached_by_id(blocker.id).unread_conversation_count == 0 + +      assert [blocked_participation] = Participation.for_user(blocked) + +      # When it's a reply from the blocked user +      {:ok, _direct2} = +        CommonAPI.post(blocked, %{ +          "status" => "reply", +          "visibility" => "direct", +          "in_reply_to_conversation_id" => blocked_participation.id +        }) + +      assert [%{read: true}] = Participation.for_user(blocker) +      assert User.get_cached_by_id(blocker.id).unread_conversation_count == 0 + +      assert [third_user_participation] = Participation.for_user(third_user) + +      # When it's a reply from the third user +      {:ok, _direct3} = +        CommonAPI.post(third_user, %{ +          "status" => "reply", +          "visibility" => "direct", +          "in_reply_to_conversation_id" => third_user_participation.id +        }) + +      assert [%{read: true}] = Participation.for_user(blocker) +      assert User.get_cached_by_id(blocker.id).unread_conversation_count == 0 + +      # Marked as unread for the blocked user +      assert [%{read: false}] = Participation.for_user(blocked) +      assert User.get_cached_by_id(blocked.id).unread_conversation_count == 1 +    end +  end  end diff --git a/test/web/activity_pub/transmogrifier_test.exs b/test/web/activity_pub/transmogrifier_test.exs index ae56f8494..6f7e1da1f 100644 --- a/test/web/activity_pub/transmogrifier_test.exs +++ b/test/web/activity_pub/transmogrifier_test.exs @@ -720,7 +720,7 @@ defmodule Pleroma.Web.ActivityPub.TransmogrifierTest do        assert capture_log(fn ->                 :error = Transmogrifier.handle_incoming(data)               end) =~ -               "[error] Could not decode user at fetch http://mastodon.example.org/users/gargron, {:error, {:error, :nxdomain}}" +               "[error] Could not decode user at fetch http://mastodon.example.org/users/gargron, {:error, :nxdomain}"        assert Activity.get_by_id(activity.id)      end | 
