First
[anni] / test / pleroma / web / activity_pub / transmogrifier / reject_handling_test.exs
1 # Pleroma: A lightweight social networking server
2 # Copyright © 2017-2022 Pleroma Authors <https://pleroma.social/>
3 # SPDX-License-Identifier: AGPL-3.0-only
4
5 defmodule Pleroma.Web.ActivityPub.Transmogrifier.RejectHandlingTest do
6   use Pleroma.DataCase, async: true
7
8   alias Pleroma.Activity
9   alias Pleroma.User
10   alias Pleroma.Web.ActivityPub.Transmogrifier
11   alias Pleroma.Web.CommonAPI
12
13   import Pleroma.Factory
14
15   test "it fails for incoming rejects which cannot be correlated" do
16     follower = insert(:user)
17     followed = insert(:user, is_locked: true)
18
19     accept_data =
20       File.read!("test/fixtures/mastodon-reject-activity.json")
21       |> Jason.decode!()
22       |> Map.put("actor", followed.ap_id)
23
24     accept_data =
25       Map.put(accept_data, "object", Map.put(accept_data["object"], "actor", follower.ap_id))
26
27     {:error, _} = Transmogrifier.handle_incoming(accept_data)
28
29     follower = User.get_cached_by_id(follower.id)
30
31     refute User.following?(follower, followed) == true
32   end
33
34   test "it works for incoming rejects which are referenced by IRI only" do
35     follower = insert(:user)
36     followed = insert(:user, is_locked: true)
37
38     {:ok, follower, followed} = User.follow(follower, followed)
39     {:ok, _, _, follow_activity} = CommonAPI.follow(follower, followed)
40
41     assert User.following?(follower, followed) == true
42
43     reject_data =
44       File.read!("test/fixtures/mastodon-reject-activity.json")
45       |> Jason.decode!()
46       |> Map.put("actor", followed.ap_id)
47       |> Map.put("object", follow_activity.data["id"])
48
49     {:ok, %Activity{data: _}} = Transmogrifier.handle_incoming(reject_data)
50
51     follower = User.get_cached_by_id(follower.id)
52
53     assert User.following?(follower, followed) == false
54   end
55
56   test "it rejects activities without a valid ID" do
57     user = insert(:user)
58
59     data =
60       File.read!("test/fixtures/mastodon-follow-activity.json")
61       |> Jason.decode!()
62       |> Map.put("object", user.ap_id)
63       |> Map.put("id", "")
64
65     :error = Transmogrifier.handle_incoming(data)
66   end
67 end