diff options
| -rw-r--r-- | lib/pleroma/web/activity_pub/object_validator.ex | 9 | ||||
| -rw-r--r-- | test/web/common_api/common_api_test.exs | 46 | 
2 files changed, 55 insertions, 0 deletions
| diff --git a/lib/pleroma/web/activity_pub/object_validator.ex b/lib/pleroma/web/activity_pub/object_validator.ex index 737c0fd64..bb6324460 100644 --- a/lib/pleroma/web/activity_pub/object_validator.ex +++ b/lib/pleroma/web/activity_pub/object_validator.ex @@ -31,6 +31,15 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidator do             |> BlockValidator.cast_and_validate()             |> Ecto.Changeset.apply_action(:insert) do        block_activity = stringify_keys(block_activity) +      outgoing_blocks = Pleroma.Config.get([:activitypub, :outgoing_blocks]) + +      meta = +        if !outgoing_blocks do +          Keyword.put(meta, :do_not_federate, true) +        else +          meta +        end +        {:ok, block_activity, meta}      end    end diff --git a/test/web/common_api/common_api_test.exs b/test/web/common_api/common_api_test.exs index 6bd26050e..fc3bb845d 100644 --- a/test/web/common_api/common_api_test.exs +++ b/test/web/common_api/common_api_test.exs @@ -25,6 +25,52 @@ defmodule Pleroma.Web.CommonAPITest do    setup do: clear_config([:instance, :limit])    setup do: clear_config([:instance, :max_pinned_statuses]) +  describe "blocking" do +    setup do +      blocker = insert(:user) +      blocked = insert(:user) +      User.follow(blocker, blocked) +      User.follow(blocked, blocker) +      %{blocker: blocker, blocked: blocked} +    end + +    test "it blocks and federates", %{blocker: blocker, blocked: blocked} do +      clear_config([:instance, :federating], true) + +      with_mock Pleroma.Web.Federator, +        publish: fn _ -> nil end do +        assert {:ok, block} = CommonAPI.block(blocker, blocked) + +        assert block.local +        assert User.blocks?(blocker, blocked) +        refute User.following?(blocker, blocked) +        refute User.following?(blocked, blocker) + +        assert called(Pleroma.Web.Federator.publish(block)) +      end +    end + +    test "it blocks and does not federate if outgoing blocks are disabled", %{ +      blocker: blocker, +      blocked: blocked +    } do +      clear_config([:instance, :federating], true) +      clear_config([:activitypub, :outgoing_blocks], false) + +      with_mock Pleroma.Web.Federator, +        publish: fn _ -> nil end do +        assert {:ok, block} = CommonAPI.block(blocker, blocked) + +        assert block.local +        assert User.blocks?(blocker, blocked) +        refute User.following?(blocker, blocked) +        refute User.following?(blocked, blocker) + +        refute called(Pleroma.Web.Federator.publish(block)) +      end +    end +  end +    describe "posting chat messages" do      setup do: clear_config([:instance, :chat_limit]) | 
