Merge branch 'develop' into oembed_provider
[akkoma] / test / tasks / relay_test.exs
1 defmodule Mix.Tasks.Pleroma.RelayTest do
2 alias Pleroma.Activity
3 alias Pleroma.Web.ActivityPub.{ActivityPub, Relay, Utils}
4 alias Pleroma.User
5 use Pleroma.DataCase
6
7 setup_all do
8 Tesla.Mock.mock_global(fn env -> apply(HttpRequestMock, :request, [env]) end)
9
10 Mix.shell(Mix.Shell.Process)
11
12 on_exit(fn ->
13 Mix.shell(Mix.Shell.IO)
14 end)
15
16 :ok
17 end
18
19 describe "running follow" do
20 test "relay is followed" do
21 target_instance = "http://mastodon.example.org/users/admin"
22
23 Mix.Tasks.Pleroma.Relay.run(["follow", target_instance])
24
25 local_user = Relay.get_actor()
26 assert local_user.ap_id =~ "/relay"
27
28 target_user = User.get_by_ap_id(target_instance)
29 refute target_user.local
30
31 activity = Utils.fetch_latest_follow(local_user, target_user)
32 assert activity.data["type"] == "Follow"
33 assert activity.data["actor"] == local_user.ap_id
34 assert activity.data["object"] == target_user.ap_id
35 end
36 end
37
38 describe "running unfollow" do
39 test "relay is unfollowed" do
40 target_instance = "http://mastodon.example.org/users/admin"
41
42 Mix.Tasks.Pleroma.Relay.run(["follow", target_instance])
43
44 %User{ap_id: follower_id} = local_user = Relay.get_actor()
45 target_user = User.get_by_ap_id(target_instance)
46 follow_activity = Utils.fetch_latest_follow(local_user, target_user)
47
48 Mix.Tasks.Pleroma.Relay.run(["unfollow", target_instance])
49
50 cancelled_activity = Activity.get_by_ap_id(follow_activity.data["id"])
51 assert cancelled_activity.data["state"] == "cancelled"
52
53 [undo_activity] =
54 ActivityPub.fetch_activities([], %{
55 "type" => "Undo",
56 "actor_id" => follower_id,
57 "limit" => 1
58 })
59
60 assert undo_activity.data["type"] == "Undo"
61 assert undo_activity.data["actor"] == local_user.ap_id
62 assert undo_activity.data["object"] == cancelled_activity.data
63 end
64 end
65 end