1 defmodule Pleroma.Web.ActivityPub.ActivityPubControllerTest do
2 use Pleroma.Web.ConnCase
4 alias Pleroma.Web.ActivityPub.{UserView, ObjectView}
5 alias Pleroma.{Repo, User}
9 test "with the relay active, it returns the relay user", %{conn: conn} do
12 |> get(activity_pub_path(conn, :relay))
15 assert res["id"] =~ "/relay"
18 test "with the relay disabled, it returns 404", %{conn: conn} do
19 Pleroma.Config.put([:instance, :allow_relay], false)
23 |> get(activity_pub_path(conn, :relay))
26 Pleroma.Config.put([:instance, :allow_relay], true)
30 describe "/users/:nickname" do
31 test "it returns a json representation of the user", %{conn: conn} do
36 |> put_req_header("accept", "application/activity+json")
37 |> get("/users/#{user.nickname}")
39 user = Repo.get(User, user.id)
41 assert json_response(conn, 200) == UserView.render("user.json", %{user: user})
45 describe "/object/:uuid" do
46 test "it returns a json representation of the object", %{conn: conn} do
48 uuid = String.split(note.data["id"], "/") |> List.last()
52 |> put_req_header("accept", "application/activity+json")
53 |> get("/objects/#{uuid}")
55 assert json_response(conn, 200) == ObjectView.render("object.json", %{object: note})
58 test "it returns 404 for non-public messages", %{conn: conn} do
59 note = insert(:direct_note)
60 uuid = String.split(note.data["id"], "/") |> List.last()
64 |> put_req_header("accept", "application/activity+json")
65 |> get("/objects/#{uuid}")
67 assert json_response(conn, 404)
72 test "it inserts an incoming activity into the database", %{conn: conn} do
73 data = File.read!("test/fixtures/mastodon-post-activity.json") |> Poison.decode!()
77 |> assign(:valid_signature, true)
78 |> put_req_header("content-type", "application/activity+json")
79 |> post("/inbox", data)
81 assert "ok" == json_response(conn, 200)
83 assert Activity.get_by_ap_id(data["id"])
87 describe "/users/:nickname/inbox" do
88 test "it inserts an incoming activity into the database", %{conn: conn} do
92 File.read!("test/fixtures/mastodon-post-activity.json")
94 |> Map.put("bcc", [user.ap_id])
98 |> assign(:valid_signature, true)
99 |> put_req_header("content-type", "application/activity+json")
100 |> post("/users/#{user.nickname}/inbox", data)
102 assert "ok" == json_response(conn, 200)
104 assert Activity.get_by_ap_id(data["id"])
108 describe "/users/:nickname/outbox" do
109 test "it returns a note activity in a collection", %{conn: conn} do
110 note_activity = insert(:note_activity)
111 user = User.get_cached_by_ap_id(note_activity.data["actor"])
115 |> put_req_header("accept", "application/activity+json")
116 |> get("/users/#{user.nickname}/outbox")
118 assert response(conn, 200) =~ note_activity.data["object"]["content"]
121 test "it returns an announce activity in a collection", %{conn: conn} do
122 announce_activity = insert(:announce_activity)
123 user = User.get_cached_by_ap_id(announce_activity.data["actor"])
127 |> put_req_header("accept", "application/activity+json")
128 |> get("/users/#{user.nickname}/outbox")
130 assert response(conn, 200) =~ announce_activity.data["object"]
134 describe "/users/:nickname/followers" do
135 test "it returns the followers in a collection", %{conn: conn} do
137 user_two = insert(:user)
138 User.follow(user, user_two)
142 |> get("/users/#{user_two.nickname}/followers")
143 |> json_response(200)
145 assert result["first"]["orderedItems"] == [user.ap_id]
148 test "it works for more than 10 users", %{conn: conn} do
151 Enum.each(1..15, fn _ ->
152 other_user = insert(:user)
153 User.follow(other_user, user)
158 |> get("/users/#{user.nickname}/followers")
159 |> json_response(200)
161 assert length(result["first"]["orderedItems"]) == 10
162 assert result["first"]["totalItems"] == 15
163 assert result["totalItems"] == 15
167 |> get("/users/#{user.nickname}/followers?page=2")
168 |> json_response(200)
170 assert length(result["orderedItems"]) == 5
171 assert result["totalItems"] == 15
175 describe "/users/:nickname/following" do
176 test "it returns the following in a collection", %{conn: conn} do
178 user_two = insert(:user)
179 User.follow(user, user_two)
183 |> get("/users/#{user.nickname}/following")
184 |> json_response(200)
186 assert result["first"]["orderedItems"] == [user_two.ap_id]
189 test "it works for more than 10 users", %{conn: conn} do
192 Enum.each(1..15, fn _ ->
193 user = Repo.get(User, user.id)
194 other_user = insert(:user)
195 User.follow(user, other_user)
200 |> get("/users/#{user.nickname}/following")
201 |> json_response(200)
203 assert length(result["first"]["orderedItems"]) == 10
204 assert result["first"]["totalItems"] == 15
205 assert result["totalItems"] == 15
209 |> get("/users/#{user.nickname}/following?page=2")
210 |> json_response(200)
212 assert length(result["orderedItems"]) == 5
213 assert result["totalItems"] == 15