diff options
author | rinpatch <rinpatch@sdf.org> | 2020-05-16 11:17:14 +0000 |
---|---|---|
committer | rinpatch <rinpatch@sdf.org> | 2020-05-16 11:17:14 +0000 |
commit | 3bc1138dd9beec03d2336fa1ad45dd23816f5285 (patch) | |
tree | f985dc2079de0a88e090101117909550dd17b34c | |
parent | aeacfb24790326cd930e1c4ffea7505964dd5c69 (diff) | |
parent | 2dcb26a6e52b18c62aaa1ef464d94685732496ab (diff) | |
download | pleroma-3bc1138dd9beec03d2336fa1ad45dd23816f5285.tar.gz pleroma-3bc1138dd9beec03d2336fa1ad45dd23816f5285.zip |
Merge branch '1757-fix-unblocks-too' into 'develop'
CommonAPI: Unblock a user even if we don't have an activity.
Closes #1757
See merge request pleroma/pleroma!2538
-rw-r--r-- | lib/pleroma/web/common_api/common_api.ex | 13 | ||||
-rw-r--r-- | test/web/common_api/common_api_test.exs | 12 |
2 files changed, 24 insertions, 1 deletions
diff --git a/lib/pleroma/web/common_api/common_api.ex b/lib/pleroma/web/common_api/common_api.ex index 601caeb46..7c94f16b6 100644 --- a/lib/pleroma/web/common_api/common_api.ex +++ b/lib/pleroma/web/common_api/common_api.ex @@ -25,10 +25,21 @@ defmodule Pleroma.Web.CommonAPI do require Logger def unblock(blocker, blocked) do - with %Activity{} = block <- Utils.fetch_latest_block(blocker, blocked), + with {_, %Activity{} = block} <- {:fetch_block, Utils.fetch_latest_block(blocker, blocked)}, {:ok, unblock_data, _} <- Builder.undo(blocker, block), {:ok, unblock, _} <- Pipeline.common_pipeline(unblock_data, local: true) do {:ok, unblock} + else + {:fetch_block, nil} -> + if User.blocks?(blocker, blocked) do + User.unblock(blocker, blocked) + {:ok, :no_activity} + else + {:error, :not_blocking} + end + + e -> + e end end diff --git a/test/web/common_api/common_api_test.exs b/test/web/common_api/common_api_test.exs index 26e41c313..fd8299013 100644 --- a/test/web/common_api/common_api_test.exs +++ b/test/web/common_api/common_api_test.exs @@ -23,6 +23,18 @@ defmodule Pleroma.Web.CommonAPITest do setup do: clear_config([:instance, :limit]) setup do: clear_config([:instance, :max_pinned_statuses]) + describe "unblocking" do + test "it works even without an existing block activity" do + blocked = insert(:user) + blocker = insert(:user) + User.block(blocker, blocked) + + assert User.blocks?(blocker, blocked) + assert {:ok, :no_activity} == CommonAPI.unblock(blocker, blocked) + refute User.blocks?(blocker, blocked) + end + end + describe "deletion" do test "it works with pruned objects" do user = insert(:user) |