diff --git a/lib/pleroma/web/activity_pub/activity_pub.ex b/lib/pleroma/web/activity_pub/activity_pub.ex index d414ecc46..62f4a33c8 100644 --- a/lib/pleroma/web/activity_pub/activity_pub.ex +++ b/lib/pleroma/web/activity_pub/activity_pub.ex @@ -430,30 +430,15 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do when is_list(tag) and tag_reject != [] do from( activity in query, - where: - fragment( - "? && ARRAY(SELECT jsonb_array_elements_text((? #> '{\"object\",\"tag\"}')))", - ^tag, - activity.data - ), - where: - fragment( - "(not ? && ARRAY(SELECT jsonb_array_elements_text((? #> '{\"object\",\"tag\"}'))))", - ^tag_reject, - activity.data - ) + where: fragment("(? #> '{\"object\",\"tag\"}') \\?| ?", activity.data, ^tag), + where: fragment("(not (? #> '{\"object\",\"tag\"}') \\?| ?)", activity.data, ^tag_reject) ) end defp restrict_tag(query, %{"tag" => tag}) when is_list(tag) do from( activity in query, - where: - fragment( - "? && ARRAY(SELECT jsonb_array_elements_text((? #> '{\"object\",\"tag\"}')))", - ^tag, - activity.data - ) + where: fragment("(? #> '{\"object\",\"tag\"}') \\?| ?", activity.data, ^tag) ) end diff --git a/test/web/activity_pub/activity_pub_test.exs b/test/web/activity_pub/activity_pub_test.exs index d2e54d804..acece36f0 100644 --- a/test/web/activity_pub/activity_pub_test.exs +++ b/test/web/activity_pub/activity_pub_test.exs @@ -64,6 +64,27 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubTest do assert user.info.ap_enabled assert user.follower_address == "http://mastodon.example.org/users/admin/followers" end + + test "it fetches the appropriate tag-restricted posts" do + user = insert(:user) + + {:ok, status_one} = CommonAPI.post(user, %{"status" => ". #test"}) + {:ok, status_two} = CommonAPI.post(user, %{"status" => ". #essais"}) + {:ok, status_three} = CommonAPI.post(user, %{"status" => ". #test #reject"}) + + fetch_one = ActivityPub.fetch_activities([], %{"tag" => "test"}) + fetch_two = ActivityPub.fetch_activities([], %{"tag" => ["test", "essais"]}) + + fetch_three = + ActivityPub.fetch_activities([], %{ + "tag" => ["test", "essais"], + "tag_reject" => ["reject"] + }) + + assert fetch_one == [status_one, status_three] + assert fetch_two == [status_one, status_two, status_three] + assert fetch_three == [status_one, status_two] + end end describe "insertion" do