|
|
@@ -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 |