forked from AkkomaGang/akkoma
Hook up unfollow and (un)block to MastoAPI + tests
This commit is contained in:
parent
46427cb90f
commit
b2c6ae7d82
2 changed files with 39 additions and 11 deletions
|
@ -457,24 +457,18 @@ def follow(%{assigns: %{user: follower}} = conn, %{"uri" => uri}) do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
# TODO: Clean up and unify
|
|
||||||
def unfollow(%{assigns: %{user: follower}} = conn, %{"id" => id}) do
|
def unfollow(%{assigns: %{user: follower}} = conn, %{"id" => id}) do
|
||||||
with %User{} = followed <- Repo.get(User, id),
|
with %User{} = followed <- Repo.get(User, id),
|
||||||
{:ok, follower, follow_activity} <- User.unfollow(follower, followed),
|
{:ok, _activity} <- ActivityPub.unfollow(follower, followed),
|
||||||
{:ok, _activity} <-
|
{:ok, follower, _} <- User.unfollow(follower, followed) do
|
||||||
ActivityPub.insert(%{
|
|
||||||
"type" => "Undo",
|
|
||||||
"actor" => follower.ap_id,
|
|
||||||
# get latest Follow for these users
|
|
||||||
"object" => follow_activity.data["id"]
|
|
||||||
}) do
|
|
||||||
render(conn, AccountView, "relationship.json", %{user: follower, target: followed})
|
render(conn, AccountView, "relationship.json", %{user: follower, target: followed})
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def block(%{assigns: %{user: blocker}} = conn, %{"id" => id}) do
|
def block(%{assigns: %{user: blocker}} = conn, %{"id" => id}) do
|
||||||
with %User{} = blocked <- Repo.get(User, id),
|
with %User{} = blocked <- Repo.get(User, id),
|
||||||
{:ok, blocker} <- User.block(blocker, blocked) do
|
{:ok, blocker} <- User.block(blocker, blocked),
|
||||||
|
{:ok, _activity} <- ActivityPub.block(blocker, blocked) do
|
||||||
render(conn, AccountView, "relationship.json", %{user: blocker, target: blocked})
|
render(conn, AccountView, "relationship.json", %{user: blocker, target: blocked})
|
||||||
else
|
else
|
||||||
{:error, message} ->
|
{:error, message} ->
|
||||||
|
@ -486,7 +480,8 @@ def block(%{assigns: %{user: blocker}} = conn, %{"id" => id}) do
|
||||||
|
|
||||||
def unblock(%{assigns: %{user: blocker}} = conn, %{"id" => id}) do
|
def unblock(%{assigns: %{user: blocker}} = conn, %{"id" => id}) do
|
||||||
with %User{} = blocked <- Repo.get(User, id),
|
with %User{} = blocked <- Repo.get(User, id),
|
||||||
{:ok, blocker} <- User.unblock(blocker, blocked) do
|
{:ok, blocker} <- User.unblock(blocker, blocked),
|
||||||
|
{:ok, _activity} <- ActivityPub.unblock(blocker, blocked) do
|
||||||
render(conn, AccountView, "relationship.json", %{user: blocker, target: blocked})
|
render(conn, AccountView, "relationship.json", %{user: blocker, target: blocked})
|
||||||
else
|
else
|
||||||
{:error, message} ->
|
{:error, message} ->
|
||||||
|
|
|
@ -425,10 +425,43 @@ test "creates an undo activity for the last follow" do
|
||||||
|
|
||||||
assert activity.data["type"] == "Undo"
|
assert activity.data["type"] == "Undo"
|
||||||
assert activity.data["actor"] == follower.ap_id
|
assert activity.data["actor"] == follower.ap_id
|
||||||
|
|
||||||
|
assert is_map(activity.data["object"])
|
||||||
|
assert activity.data["object"]["type"] == "Follow"
|
||||||
|
assert activity.data["object"]["object"] == followed.ap_id
|
||||||
assert activity.data["object"]["id"] == follow_activity.data["id"]
|
assert activity.data["object"]["id"] == follow_activity.data["id"]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe "blocking / unblocking" do
|
||||||
|
test "creates a block activity" do
|
||||||
|
blocker = insert(:user)
|
||||||
|
blocked = insert(:user)
|
||||||
|
|
||||||
|
{: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
|
||||||
|
end
|
||||||
|
|
||||||
|
test "creates an undo activity for the last block" do
|
||||||
|
blocker = insert(:user)
|
||||||
|
blocked = insert(:user)
|
||||||
|
|
||||||
|
{:ok, block_activity} = ActivityPub.block(blocker, blocked)
|
||||||
|
{:ok, activity} = ActivityPub.unblock(blocker, blocked)
|
||||||
|
|
||||||
|
assert activity.data["type"] == "Undo"
|
||||||
|
assert activity.data["actor"] == blocker.ap_id
|
||||||
|
|
||||||
|
assert is_map(activity.data["object"])
|
||||||
|
assert activity.data["object"]["type"] == "Block"
|
||||||
|
assert activity.data["object"]["object"] == blocked.ap_id
|
||||||
|
assert activity.data["object"]["id"] == block_activity.data["id"]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
describe "deletion" do
|
describe "deletion" do
|
||||||
test "it creates a delete activity and deletes the original object" do
|
test "it creates a delete activity and deletes the original object" do
|
||||||
note = insert(:note_activity)
|
note = insert(:note_activity)
|
||||||
|
|
Loading…
Reference in a new issue