X-Git-Url: http://git.squeep.com/?a=blobdiff_plain;ds=inline;f=test%2Fpleroma%2Fweb%2Factivity_pub%2Ftransmogrifier%2Freject_handling_test.exs;h=52a61f3103ca3ceb0586ee17b2a49b768e5ba2b8;hb=522221f7fb76859b23840bb0c9de0018dae41cbf;hp=5c1451defa070129aa7a7f05f035455bbf606275;hpb=9ea31b373fdb75bb6aa04d006e5f493158897efa;p=akkoma
diff --git a/test/pleroma/web/activity_pub/transmogrifier/reject_handling_test.exs b/test/pleroma/web/activity_pub/transmogrifier/reject_handling_test.exs
index 5c1451def..52a61f310 100644
--- a/test/pleroma/web/activity_pub/transmogrifier/reject_handling_test.exs
+++ b/test/pleroma/web/activity_pub/transmogrifier/reject_handling_test.exs
@@ -1,13 +1,14 @@
# Pleroma: A lightweight social networking server
-# Copyright © 2017-2020 Pleroma Authors
+# Copyright © 2017-2021 Pleroma Authors
# SPDX-License-Identifier: AGPL-3.0-only
defmodule Pleroma.Web.ActivityPub.Transmogrifier.RejectHandlingTest do
- use Pleroma.DataCase
+ use Pleroma.DataCase, async: true
alias Pleroma.Activity
alias Pleroma.User
alias Pleroma.Web.ActivityPub.Transmogrifier
+ alias Pleroma.Web.ActivityPub.Utils
alias Pleroma.Web.CommonAPI
import Pleroma.Factory
@@ -18,7 +19,7 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier.RejectHandlingTest do
accept_data =
File.read!("test/fixtures/mastodon-reject-activity.json")
- |> Poison.decode!()
+ |> Jason.decode!()
|> Map.put("actor", followed.ap_id)
accept_data =
@@ -35,14 +36,14 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier.RejectHandlingTest do
follower = insert(:user)
followed = insert(:user, is_locked: true)
- {:ok, follower} = User.follow(follower, followed)
+ {:ok, follower, followed} = User.follow(follower, followed)
{:ok, _, _, follow_activity} = CommonAPI.follow(follower, followed)
assert User.following?(follower, followed) == true
reject_data =
File.read!("test/fixtures/mastodon-reject-activity.json")
- |> Poison.decode!()
+ |> Jason.decode!()
|> Map.put("actor", followed.ap_id)
|> Map.put("object", follow_activity.data["id"])
@@ -53,12 +54,87 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier.RejectHandlingTest do
assert User.following?(follower, followed) == false
end
+ describe "when accept/reject references a transient activity" do
+ test "it handles accept activities that do not contain an ID key" do
+ follower = insert(:user)
+ followed = insert(:user, is_locked: true)
+
+ pending_follow =
+ insert(:follow_activity, follower: follower, followed: followed, state: "pending")
+
+ refute User.following?(follower, followed)
+
+ without_id = Map.delete(pending_follow.data, "id")
+
+ reject_data =
+ File.read!("test/fixtures/mastodon-reject-activity.json")
+ |> Jason.decode!()
+ |> Map.put("actor", followed.ap_id)
+ |> Map.delete("id")
+ |> Map.put("object", without_id)
+
+ {:ok, %Activity{data: _}} = Transmogrifier.handle_incoming(reject_data)
+
+ follower = User.get_cached_by_id(follower.id)
+
+ refute User.following?(follower, followed)
+ assert Utils.fetch_latest_follow(follower, followed).data["state"] == "reject"
+ end
+
+ test "it handles reject activities that do not contain an ID key" do
+ follower = insert(:user)
+ followed = insert(:user)
+ {:ok, follower, followed} = User.follow(follower, followed)
+ {:ok, _, _, follow_activity} = CommonAPI.follow(follower, followed)
+ assert Utils.fetch_latest_follow(follower, followed).data["state"] == "accept"
+ assert User.following?(follower, followed)
+
+ without_id = Map.delete(follow_activity.data, "id")
+
+ reject_data =
+ File.read!("test/fixtures/mastodon-reject-activity.json")
+ |> Jason.decode!()
+ |> Map.put("actor", followed.ap_id)
+ |> Map.delete("id")
+ |> Map.put("object", without_id)
+
+ {:ok, %Activity{data: _}} = Transmogrifier.handle_incoming(reject_data)
+
+ follower = User.get_cached_by_id(follower.id)
+
+ refute User.following?(follower, followed)
+ assert Utils.fetch_latest_follow(follower, followed).data["state"] == "reject"
+ end
+
+ test "it does not accept follows that are not in pending or accepted" do
+ follower = insert(:user)
+ followed = insert(:user, is_locked: true)
+
+ rejected_follow =
+ insert(:follow_activity, follower: follower, followed: followed, state: "reject")
+
+ refute User.following?(follower, followed)
+
+ without_id = Map.delete(rejected_follow.data, "id")
+
+ accept_data =
+ File.read!("test/fixtures/mastodon-accept-activity.json")
+ |> Jason.decode!()
+ |> Map.put("actor", followed.ap_id)
+ |> Map.put("object", without_id)
+
+ {:error, _} = Transmogrifier.handle_incoming(accept_data)
+
+ refute User.following?(follower, followed)
+ end
+ end
+
test "it rejects activities without a valid ID" do
user = insert(:user)
data =
File.read!("test/fixtures/mastodon-follow-activity.json")
- |> Poison.decode!()
+ |> Jason.decode!()
|> Map.put("object", user.ap_id)
|> Map.put("id", "")