make_moderator.ex: set cache on update
[akkoma] / test / web / activity_pub / activity_pub_controller_test.exs
1 defmodule Pleroma.Web.ActivityPub.ActivityPubControllerTest do
2 use Pleroma.Web.ConnCase
3 import Pleroma.Factory
4 alias Pleroma.Web.ActivityPub.{UserView, ObjectView}
5 alias Pleroma.{Repo, User}
6 alias Pleroma.Activity
7 alias Pleroma.Web.CommonAPI
8
9 describe "/users/:nickname" do
10 test "it returns a json representation of the user", %{conn: conn} do
11 user = insert(:user)
12
13 conn =
14 conn
15 |> put_req_header("accept", "application/activity+json")
16 |> get("/users/#{user.nickname}")
17
18 user = Repo.get(User, user.id)
19
20 assert json_response(conn, 200) == UserView.render("user.json", %{user: user})
21 end
22 end
23
24 describe "/object/:uuid" do
25 test "it returns a json representation of the object", %{conn: conn} do
26 note = insert(:note)
27 uuid = String.split(note.data["id"], "/") |> List.last()
28
29 conn =
30 conn
31 |> put_req_header("accept", "application/activity+json")
32 |> get("/objects/#{uuid}")
33
34 assert json_response(conn, 200) == ObjectView.render("object.json", %{object: note})
35 end
36
37 test "it returns 404 for non-public messages", %{conn: conn} do
38 note = insert(:direct_note)
39 uuid = String.split(note.data["id"], "/") |> List.last()
40
41 conn =
42 conn
43 |> put_req_header("accept", "application/activity+json")
44 |> get("/objects/#{uuid}")
45
46 assert json_response(conn, 404)
47 end
48 end
49
50 describe "/users/:nickname/inbox" do
51 test "it inserts an incoming activity into the database", %{conn: conn} do
52 data = File.read!("test/fixtures/mastodon-post-activity.json") |> Poison.decode!()
53
54 conn =
55 conn
56 |> assign(:valid_signature, true)
57 |> put_req_header("content-type", "application/activity+json")
58 |> post("/inbox", data)
59
60 assert "ok" == json_response(conn, 200)
61 :timer.sleep(500)
62 assert Activity.get_by_ap_id(data["id"])
63 end
64 end
65
66 describe "/users/:nickname/followers" do
67 test "it returns the followers in a collection", %{conn: conn} do
68 user = insert(:user)
69 user_two = insert(:user)
70 User.follow(user, user_two)
71
72 result =
73 conn
74 |> get("/users/#{user_two.nickname}/followers")
75 |> json_response(200)
76
77 assert result["first"]["orderedItems"] == [user.ap_id]
78 end
79
80 test "it works for more than 10 users", %{conn: conn} do
81 user = insert(:user)
82
83 Enum.each(1..15, fn _ ->
84 other_user = insert(:user)
85 User.follow(other_user, user)
86 end)
87
88 result =
89 conn
90 |> get("/users/#{user.nickname}/followers")
91 |> json_response(200)
92
93 assert length(result["first"]["orderedItems"]) == 10
94 assert result["first"]["totalItems"] == 15
95 assert result["totalItems"] == 15
96
97 result =
98 conn
99 |> get("/users/#{user.nickname}/followers?page=2")
100 |> json_response(200)
101
102 assert length(result["orderedItems"]) == 5
103 assert result["totalItems"] == 15
104 end
105 end
106
107 describe "/users/:nickname/following" do
108 test "it returns the following in a collection", %{conn: conn} do
109 user = insert(:user)
110 user_two = insert(:user)
111 User.follow(user, user_two)
112
113 result =
114 conn
115 |> get("/users/#{user.nickname}/following")
116 |> json_response(200)
117
118 assert result["first"]["orderedItems"] == [user_two.ap_id]
119 end
120
121 test "it works for more than 10 users", %{conn: conn} do
122 user = insert(:user)
123
124 Enum.each(1..15, fn _ ->
125 user = Repo.get(User, user.id)
126 other_user = insert(:user)
127 User.follow(user, other_user)
128 end)
129
130 result =
131 conn
132 |> get("/users/#{user.nickname}/following")
133 |> json_response(200)
134
135 assert length(result["first"]["orderedItems"]) == 10
136 assert result["first"]["totalItems"] == 15
137 assert result["totalItems"] == 15
138
139 result =
140 conn
141 |> get("/users/#{user.nickname}/following?page=2")
142 |> json_response(200)
143
144 assert length(result["orderedItems"]) == 5
145 assert result["totalItems"] == 15
146 end
147 end
148 end