aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIvan Tashkinov <ivantashkinov@gmail.com>2020-12-28 00:08:09 +0300
committerIvan Tashkinov <ivantashkinov@gmail.com>2020-12-28 00:08:09 +0300
commit14fae94c0e4b04123c7af148260d0a4a51042570 (patch)
tree84e4a58577a2887f127778084e9eb2b351193fdb
parent4134abef63e1165f5701741c1012e64cb908654c (diff)
downloadpleroma-14fae94c0e4b04123c7af148260d0a4a51042570.tar.gz
[#3213] Made Object.hashtags/1 work with :hashtags assoc. Adjusted tests.
-rw-r--r--lib/pleroma/config.ex2
-rw-r--r--lib/pleroma/object.ex14
-rw-r--r--lib/pleroma/web/activity_pub/activity_pub.ex12
-rw-r--r--test/pleroma/activity/ir/topics_test.exs15
4 files changed, 29 insertions, 14 deletions
diff --git a/lib/pleroma/config.ex b/lib/pleroma/config.ex
index 86d4f6b72..ee0167f4e 100644
--- a/lib/pleroma/config.ex
+++ b/lib/pleroma/config.ex
@@ -96,6 +96,8 @@ defmodule Pleroma.Config do
end
end
+ def object_embedded_hashtags?, do: !get([:instance, :improved_hashtag_timeline])
+
def oauth_consumer_strategies, do: get([:auth, :oauth_consumer_strategies], [])
def oauth_consumer_enabled?, do: oauth_consumer_strategies() != []
diff --git a/lib/pleroma/object.ex b/lib/pleroma/object.ex
index 1d756bcd1..08114d4f2 100644
--- a/lib/pleroma/object.ex
+++ b/lib/pleroma/object.ex
@@ -384,7 +384,19 @@ defmodule Pleroma.Object do
def tags(_), do: []
- def hashtags(object), do: embedded_hashtags(object)
+ def hashtags(%Object{} = object) do
+ cond do
+ Config.object_embedded_hashtags?() ->
+ embedded_hashtags(object)
+
+ object.id == "pleroma:fake_object_id" ->
+ []
+
+ true ->
+ hashtag_records = Repo.preload(object, :hashtags).hashtags
+ Enum.map(hashtag_records, & &1.name)
+ end
+ end
defp embedded_hashtags(%Object{data: data}) do
object_data_hashtags(data)
diff --git a/lib/pleroma/web/activity_pub/activity_pub.ex b/lib/pleroma/web/activity_pub/activity_pub.ex
index 54d1a2350..626cad336 100644
--- a/lib/pleroma/web/activity_pub/activity_pub.ex
+++ b/lib/pleroma/web/activity_pub/activity_pub.ex
@@ -1199,16 +1199,16 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do
|> exclude_invisible_actors(opts)
|> exclude_visibility(opts)
- if Config.get([:instance, :improved_hashtag_timeline]) do
- query
- |> restrict_hashtag_any(opts)
- |> restrict_hashtag_all(opts)
- |> restrict_hashtag_reject_any(opts)
- else
+ if Config.object_embedded_hashtags?() do
query
|> restrict_tag(opts)
|> restrict_tag_reject(opts)
|> restrict_tag_all(opts)
+ else
+ query
+ |> restrict_hashtag_any(opts)
+ |> restrict_hashtag_all(opts)
+ |> restrict_hashtag_reject_any(opts)
end
end
diff --git a/test/pleroma/activity/ir/topics_test.exs b/test/pleroma/activity/ir/topics_test.exs
index b464822d9..984777bda 100644
--- a/test/pleroma/activity/ir/topics_test.exs
+++ b/test/pleroma/activity/ir/topics_test.exs
@@ -11,6 +11,8 @@ defmodule Pleroma.Activity.Ir.TopicsTest do
require Pleroma.Constants
+ import Mock
+
describe "poll answer" do
test "produce no topics" do
activity = %Activity{object: %Object{data: %{"type" => "Answer"}}}
@@ -77,14 +79,13 @@ defmodule Pleroma.Activity.Ir.TopicsTest do
refute Enum.member?(topics, "public:local:media")
end
- test "converts tags to hash tags", %{activity: %{object: %{data: data} = object} = activity} do
- tagged_data = Map.put(data, "tag", ["foo", "bar"])
- activity = %{activity | object: %{object | data: tagged_data}}
-
- topics = Topics.get_activity_topics(activity)
+ test "converts tags to hash tags", %{activity: activity} do
+ with_mock(Object, [:passthrough], hashtags: fn _ -> ["foo", "bar"] end) do
+ topics = Topics.get_activity_topics(activity)
- assert Enum.member?(topics, "hashtag:foo")
- assert Enum.member?(topics, "hashtag:bar")
+ assert Enum.member?(topics, "hashtag:foo")
+ assert Enum.member?(topics, "hashtag:bar")
+ end
end
test "only converts strings to hash tags", %{