[#3213] Made Object.hashtags/1 work with :hashtags assoc. Adjusted tests.

This commit is contained in:
Ivan Tashkinov 2020-12-28 00:08:09 +03:00
parent 4134abef63
commit 14fae94c0e
4 changed files with 29 additions and 14 deletions

View file

@ -96,6 +96,8 @@ def restrict_unauthenticated_access?(resource, kind) 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() != []

View file

@ -384,7 +384,19 @@ def tags(%Object{data: %{"tag" => tags}}) when is_list(tags), do: tags
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)

View file

@ -1199,16 +1199,16 @@ def fetch_activities_query(recipients, opts \\ %{}) 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

View file

@ -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 @@ test "with no attachments doesn't produce public:media topics", %{activity: acti
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}}
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)
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", %{