diff options
| author | Haelwenn <contact+git.pleroma.social@hacktivis.me> | 2020-06-26 17:41:00 +0000 | 
|---|---|---|
| committer | Haelwenn <contact+git.pleroma.social@hacktivis.me> | 2020-06-26 17:41:00 +0000 | 
| commit | bf1c5e255ae0ab297aac3094d6a899c24c29fd2f (patch) | |
| tree | b61c301b4daa6bcb9633dedf09f687d69cf6edf1 /test | |
| parent | 09478c9cf713eefdfdf585f0196efdf00b9c0baf (diff) | |
| parent | 15a8b703185c685fc3d25a381fcb9dee522c78bf (diff) | |
| download | pleroma-bf1c5e255ae0ab297aac3094d6a899c24c29fd2f.tar.gz pleroma-bf1c5e255ae0ab297aac3094d6a899c24c29fd2f.zip | |
Merge branch 'block-handling' into 'develop'
Handle blocks with the pipeline
See merge request pleroma/pleroma!2685
Diffstat (limited to 'test')
| -rw-r--r-- | test/web/activity_pub/activity_pub_test.exs | 48 | ||||
| -rw-r--r-- | test/web/activity_pub/object_validator_test.exs | 27 | ||||
| -rw-r--r-- | test/web/activity_pub/side_effects_test.exs | 44 | ||||
| -rw-r--r-- | test/web/activity_pub/transmogrifier/block_handling_test.exs | 63 | ||||
| -rw-r--r-- | test/web/activity_pub/transmogrifier_test.exs | 50 | ||||
| -rw-r--r-- | test/web/activity_pub/utils_test.exs | 16 | ||||
| -rw-r--r-- | test/web/common_api/common_api_test.exs | 46 | 
7 files changed, 181 insertions, 113 deletions
| diff --git a/test/web/activity_pub/activity_pub_test.exs b/test/web/activity_pub/activity_pub_test.exs index be7ab2ae4..575e0c5db 100644 --- a/test/web/activity_pub/activity_pub_test.exs +++ b/test/web/activity_pub/activity_pub_test.exs @@ -992,54 +992,6 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubTest do      end    end -  describe "blocking" do -    test "reverts block activity on error" do -      [blocker, blocked] = insert_list(2, :user) - -      with_mock(Utils, [:passthrough], maybe_federate: fn _ -> {:error, :reverted} end) do -        assert {:error, :reverted} = ActivityPub.block(blocker, blocked) -      end - -      assert Repo.aggregate(Activity, :count, :id) == 0 -      assert Repo.aggregate(Object, :count, :id) == 0 -    end - -    test "creates a block activity" do -      clear_config([:instance, :federating], true) -      blocker = insert(:user) -      blocked = insert(:user) - -      with_mock Pleroma.Web.Federator, -        publish: fn _ -> nil end do -        {:ok, activity} = ActivityPub.block(blocker, blocked) - -        assert activity.data["type"] == "Block" -        assert activity.data["actor"] == blocker.ap_id -        assert activity.data["object"] == blocked.ap_id - -        assert called(Pleroma.Web.Federator.publish(activity)) -      end -    end - -    test "works with outgoing blocks disabled, but doesn't federate" do -      clear_config([:instance, :federating], true) -      clear_config([:activitypub, :outgoing_blocks], false) -      blocker = insert(:user) -      blocked = insert(:user) - -      with_mock Pleroma.Web.Federator, -        publish: fn _ -> nil end do -        {:ok, activity} = ActivityPub.block(blocker, blocked) - -        assert activity.data["type"] == "Block" -        assert activity.data["actor"] == blocker.ap_id -        assert activity.data["object"] == blocked.ap_id - -        refute called(Pleroma.Web.Federator.publish(:_)) -      end -    end -  end -    describe "timeline post-processing" do      test "it filters broken threads" do        user1 = insert(:user) diff --git a/test/web/activity_pub/object_validator_test.exs b/test/web/activity_pub/object_validator_test.exs index 770a8dcf8..f38bf7e08 100644 --- a/test/web/activity_pub/object_validator_test.exs +++ b/test/web/activity_pub/object_validator_test.exs @@ -654,4 +654,31 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidatorTest do        assert {:error, _cng} = ObjectValidator.validate(update, [])      end    end + +  describe "blocks" do +    setup do +      user = insert(:user, local: false) +      blocked = insert(:user) + +      {:ok, valid_block, []} = Builder.block(user, blocked) + +      %{user: user, valid_block: valid_block} +    end + +    test "validates a basic object", %{ +      valid_block: valid_block +    } do +      assert {:ok, _block, []} = ObjectValidator.validate(valid_block, []) +    end + +    test "returns an error if we don't know the blocked user", %{ +      valid_block: valid_block +    } do +      block = +        valid_block +        |> Map.put("object", "https://gensokyo.2hu/users/raymoo") + +      assert {:error, _cng} = ObjectValidator.validate(block, []) +    end +  end  end diff --git a/test/web/activity_pub/side_effects_test.exs b/test/web/activity_pub/side_effects_test.exs index 12c9ef1da..af27c34b4 100644 --- a/test/web/activity_pub/side_effects_test.exs +++ b/test/web/activity_pub/side_effects_test.exs @@ -64,6 +64,47 @@ defmodule Pleroma.Web.ActivityPub.SideEffectsTest do      end    end +  describe "blocking users" do +    setup do +      user = insert(:user) +      blocked = insert(:user) +      User.follow(blocked, user) +      User.follow(user, blocked) + +      {:ok, block_data, []} = Builder.block(user, blocked) +      {:ok, block, _meta} = ActivityPub.persist(block_data, local: true) + +      %{user: user, blocked: blocked, block: block} +    end + +    test "it unfollows and blocks", %{user: user, blocked: blocked, block: block} do +      assert User.following?(user, blocked) +      assert User.following?(blocked, user) + +      {:ok, _, _} = SideEffects.handle(block) + +      refute User.following?(user, blocked) +      refute User.following?(blocked, user) +      assert User.blocks?(user, blocked) +    end + +    test "it blocks but does not unfollow if the relevant setting is set", %{ +      user: user, +      blocked: blocked, +      block: block +    } do +      clear_config([:activitypub, :unfollow_blocked], false) +      assert User.following?(user, blocked) +      assert User.following?(blocked, user) + +      {:ok, _, _} = SideEffects.handle(block) + +      refute User.following?(user, blocked) +      assert User.following?(blocked, user) +      assert User.blocks?(user, blocked) +    end +  end +    describe "update users" do      setup do        user = insert(:user) @@ -242,8 +283,7 @@ defmodule Pleroma.Web.ActivityPub.SideEffectsTest do        {:ok, like} = CommonAPI.favorite(user, post.id)        {:ok, reaction} = CommonAPI.react_with_emoji(post.id, user, "👍")        {:ok, announce} = CommonAPI.repeat(post.id, user) -      {:ok, block} = ActivityPub.block(user, poster) -      User.block(user, poster) +      {:ok, block} = CommonAPI.block(user, poster)        {:ok, undo_data, _meta} = Builder.undo(user, like)        {:ok, like_undo, _meta} = ActivityPub.persist(undo_data, local: true) diff --git a/test/web/activity_pub/transmogrifier/block_handling_test.exs b/test/web/activity_pub/transmogrifier/block_handling_test.exs new file mode 100644 index 000000000..71f1a0ed5 --- /dev/null +++ b/test/web/activity_pub/transmogrifier/block_handling_test.exs @@ -0,0 +1,63 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/> +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.ActivityPub.Transmogrifier.BlockHandlingTest do +  use Pleroma.DataCase + +  alias Pleroma.Activity +  alias Pleroma.User +  alias Pleroma.Web.ActivityPub.Transmogrifier + +  import Pleroma.Factory + +  test "it works for incoming blocks" do +    user = insert(:user) + +    data = +      File.read!("test/fixtures/mastodon-block-activity.json") +      |> Poison.decode!() +      |> Map.put("object", user.ap_id) + +    blocker = insert(:user, ap_id: data["actor"]) + +    {:ok, %Activity{data: data, local: false}} = Transmogrifier.handle_incoming(data) + +    assert data["type"] == "Block" +    assert data["object"] == user.ap_id +    assert data["actor"] == "http://mastodon.example.org/users/admin" + +    assert User.blocks?(blocker, user) +  end + +  test "incoming blocks successfully tear down any follow relationship" do +    blocker = insert(:user) +    blocked = insert(:user) + +    data = +      File.read!("test/fixtures/mastodon-block-activity.json") +      |> Poison.decode!() +      |> Map.put("object", blocked.ap_id) +      |> Map.put("actor", blocker.ap_id) + +    {:ok, blocker} = User.follow(blocker, blocked) +    {:ok, blocked} = User.follow(blocked, blocker) + +    assert User.following?(blocker, blocked) +    assert User.following?(blocked, blocker) + +    {:ok, %Activity{data: data, local: false}} = Transmogrifier.handle_incoming(data) + +    assert data["type"] == "Block" +    assert data["object"] == blocked.ap_id +    assert data["actor"] == blocker.ap_id + +    blocker = User.get_cached_by_ap_id(data["actor"]) +    blocked = User.get_cached_by_ap_id(data["object"]) + +    assert User.blocks?(blocker, blocked) + +    refute User.following?(blocker, blocked) +    refute User.following?(blocked, blocker) +  end +end diff --git a/test/web/activity_pub/transmogrifier_test.exs b/test/web/activity_pub/transmogrifier_test.exs index 100821056..6a53fd3f0 100644 --- a/test/web/activity_pub/transmogrifier_test.exs +++ b/test/web/activity_pub/transmogrifier_test.exs @@ -445,56 +445,6 @@ defmodule Pleroma.Web.ActivityPub.TransmogrifierTest do        assert [^pending_follower] = User.get_follow_requests(user)      end -    test "it works for incoming blocks" do -      user = insert(:user) - -      data = -        File.read!("test/fixtures/mastodon-block-activity.json") -        |> Poison.decode!() -        |> Map.put("object", user.ap_id) - -      {:ok, %Activity{data: data, local: false}} = Transmogrifier.handle_incoming(data) - -      assert data["type"] == "Block" -      assert data["object"] == user.ap_id -      assert data["actor"] == "http://mastodon.example.org/users/admin" - -      blocker = User.get_cached_by_ap_id(data["actor"]) - -      assert User.blocks?(blocker, user) -    end - -    test "incoming blocks successfully tear down any follow relationship" do -      blocker = insert(:user) -      blocked = insert(:user) - -      data = -        File.read!("test/fixtures/mastodon-block-activity.json") -        |> Poison.decode!() -        |> Map.put("object", blocked.ap_id) -        |> Map.put("actor", blocker.ap_id) - -      {:ok, blocker} = User.follow(blocker, blocked) -      {:ok, blocked} = User.follow(blocked, blocker) - -      assert User.following?(blocker, blocked) -      assert User.following?(blocked, blocker) - -      {:ok, %Activity{data: data, local: false}} = Transmogrifier.handle_incoming(data) - -      assert data["type"] == "Block" -      assert data["object"] == blocked.ap_id -      assert data["actor"] == blocker.ap_id - -      blocker = User.get_cached_by_ap_id(data["actor"]) -      blocked = User.get_cached_by_ap_id(data["object"]) - -      assert User.blocks?(blocker, blocked) - -      refute User.following?(blocker, blocked) -      refute User.following?(blocked, blocker) -    end -      test "it works for incoming accepts which were pre-accepted" do        follower = insert(:user)        followed = insert(:user) diff --git a/test/web/activity_pub/utils_test.exs b/test/web/activity_pub/utils_test.exs index 15f03f193..2f9ecb5a3 100644 --- a/test/web/activity_pub/utils_test.exs +++ b/test/web/activity_pub/utils_test.exs @@ -27,16 +27,6 @@ defmodule Pleroma.Web.ActivityPub.UtilsTest do      end    end -  describe "fetch the latest Block" do -    test "fetches the latest Block activity" do -      blocker = insert(:user) -      blocked = insert(:user) -      {:ok, activity} = ActivityPub.block(blocker, blocked) - -      assert activity == Utils.fetch_latest_block(blocker, blocked) -    end -  end -    describe "determine_explicit_mentions()" do      test "works with an object that has mentions" do        object = %{ @@ -344,9 +334,9 @@ defmodule Pleroma.Web.ActivityPub.UtilsTest do        user1 = insert(:user)        user2 = insert(:user) -      assert {:ok, %Activity{} = _} = ActivityPub.block(user1, user2) -      assert {:ok, %Activity{} = _} = ActivityPub.block(user1, user2) -      assert {:ok, %Activity{} = activity} = ActivityPub.block(user1, user2) +      assert {:ok, %Activity{} = _} = CommonAPI.block(user1, user2) +      assert {:ok, %Activity{} = _} = CommonAPI.block(user1, user2) +      assert {:ok, %Activity{} = activity} = CommonAPI.block(user1, user2)        assert Utils.fetch_latest_block(user1, user2) == activity      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]) | 
