From: Haelwenn (lanodan) Monnier <contact@hacktivis.me>
Date: Thu, 10 Jan 2019 15:07:32 +0000 (+0100)
Subject: Web.ActivityPub.ActivityPub: Simplify multi-hashtag, add tests
X-Git-Url: https://git.squeep.com/?a=commitdiff_plain;h=4ad0ad14ed2d8a10bbf642fd989b3f7f55f9017d;p=akkoma

Web.ActivityPub.ActivityPub: Simplify multi-hashtag, add tests
---

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