diff options
| -rw-r--r-- | lib/pleroma/activity/ir/topics.ex | 17 | ||||
| -rw-r--r-- | test/pleroma/activity/ir/topics_test.exs | 53 | 
2 files changed, 69 insertions, 1 deletions
diff --git a/lib/pleroma/activity/ir/topics.ex b/lib/pleroma/activity/ir/topics.ex index f058cc0c9..fa4350797 100644 --- a/lib/pleroma/activity/ir/topics.ex +++ b/lib/pleroma/activity/ir/topics.ex @@ -39,6 +39,10 @@ defmodule Pleroma.Activity.Ir.Topics do          end          |> item_creation_tags(object, activity) +      "local" -> +        ["public:local"] +        |> item_creation_tags(object, activity) +        "direct" ->          ["direct"] @@ -71,7 +75,18 @@ defmodule Pleroma.Activity.Ir.Topics do    defp attachment_topics(%{data: %{"attachment" => []}}, _act), do: [] -  defp attachment_topics(_object, %{local: true}), do: ["public:media", "public:local:media"] +  defp attachment_topics(_object, %{local: true} = activity) do +    case Visibility.get_visibility(activity) do +      "public" -> +        ["public:media", "public:local:media"] + +      "local" -> +        ["public:local:media"] + +      _ -> +        [] +    end +  end    defp attachment_topics(_object, %{actor: actor}) when is_binary(actor),      do: ["public:media", "public:remote:media:" <> URI.parse(actor).host] diff --git a/test/pleroma/activity/ir/topics_test.exs b/test/pleroma/activity/ir/topics_test.exs index 0abda60b0..8317868a5 100644 --- a/test/pleroma/activity/ir/topics_test.exs +++ b/test/pleroma/activity/ir/topics_test.exs @@ -137,6 +137,36 @@ defmodule Pleroma.Activity.Ir.TopicsTest do      end    end +  describe "local-public visibility create events" do +    setup do +      activity = %Activity{ +        object: %Object{data: %{"attachment" => []}}, +        data: %{"type" => "Create", "to" => [Pleroma.Web.ActivityPub.Utils.as_local_public()]} +      } + +      {:ok, activity: activity} +    end + +    test "doesn't produce public topics", %{activity: activity} do +      topics = Topics.get_activity_topics(activity) + +      refute Enum.member?(topics, "public") +    end + +    test "produces public:local topics", %{activity: activity} do +      topics = Topics.get_activity_topics(activity) + +      assert Enum.member?(topics, "public:local") +    end + +    test "with no attachments doesn't produce public:media topics", %{activity: activity} do +      topics = Topics.get_activity_topics(activity) + +      refute Enum.member?(topics, "public:media") +      refute Enum.member?(topics, "public:local:media") +    end +  end +    describe "public visibility create events with attachments" do      setup do        activity = %Activity{ @@ -175,6 +205,29 @@ defmodule Pleroma.Activity.Ir.TopicsTest do      end    end +  describe "local-public visibility create events with attachments" do +    setup do +      activity = %Activity{ +        object: %Object{data: %{"attachment" => ["foo"]}}, +        data: %{"type" => "Create", "to" => [Pleroma.Web.ActivityPub.Utils.as_local_public()]} +      } + +      {:ok, activity: activity} +    end + +    test "do not produce public:media topics", %{activity: activity} do +      topics = Topics.get_activity_topics(activity) + +      refute Enum.member?(topics, "public:media") +    end + +    test "produces public:local:media topics", %{activity: activity} do +      topics = Topics.get_activity_topics(activity) + +      assert Enum.member?(topics, "public:local:media") +    end +  end +    describe "non-public visibility" do      test "produces direct topic" do        activity = %Activity{object: %Object{data: %{"type" => "Note"}}, data: %{"to" => []}}  | 
