diff options
| -rw-r--r-- | lib/pleroma/web/activity_pub/activity_pub.ex | 2 | ||||
| -rw-r--r-- | test/web/activity_pub/activity_pub_test.exs | 23 | 
2 files changed, 24 insertions, 1 deletions
diff --git a/lib/pleroma/web/activity_pub/activity_pub.ex b/lib/pleroma/web/activity_pub/activity_pub.ex index 54dd4097c..68317ee6a 100644 --- a/lib/pleroma/web/activity_pub/activity_pub.ex +++ b/lib/pleroma/web/activity_pub/activity_pub.ex @@ -712,7 +712,7 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do      from(        activity in query,        where: fragment("not (? = ANY(?))", activity.actor, ^blocks), -      where: fragment("not (?->'to' \\?| ?)", activity.data, ^blocks), +      where: fragment("not (? && ?)", activity.recipients, ^blocks),        where: fragment("not (split_part(?, '/', 3) = ANY(?))", activity.actor, ^domain_blocks)      )    end diff --git a/test/web/activity_pub/activity_pub_test.exs b/test/web/activity_pub/activity_pub_test.exs index 17fec05b1..5454bffde 100644 --- a/test/web/activity_pub/activity_pub_test.exs +++ b/test/web/activity_pub/activity_pub_test.exs @@ -341,6 +341,29 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubTest do      assert Enum.member?(activities, activity_one)    end +  test "doesn't return transitive interactions concerning blocked users" do +    blocker = insert(:user) +    blockee = insert(:user) +    friend = insert(:user) + +    {:ok, blocker} = User.block(blocker, blockee) + +    {:ok, activity_one} = CommonAPI.post(friend, %{"status" => "hey!"}) + +    {:ok, activity_two} = CommonAPI.post(friend, %{"status" => "hey! @#{blockee.nickname}"}) + +    {:ok, activity_three} = CommonAPI.post(blockee, %{"status" => "hey! @#{friend.nickname}"}) + +    {:ok, activity_four} = CommonAPI.post(blockee, %{"status" => "hey! @#{blocker.nickname}"}) + +    activities = ActivityPub.fetch_activities([], %{"blocking_user" => blocker}) + +    assert Enum.member?(activities, activity_one) +    refute Enum.member?(activities, activity_two) +    refute Enum.member?(activities, activity_three) +    refute Enum.member?(activities, activity_four) +  end +    test "doesn't return muted activities" do      activity_one = insert(:note_activity)      activity_two = insert(:note_activity)  | 
