1 defmodule Pleroma.Web.ActivityPub.ActivityPubControllerTest do
2 use Pleroma.Web.ConnCase
4 alias Pleroma.Web.ActivityPub.{UserView, ObjectView}
5 alias Pleroma.{Repo, User}
10 test "with the relay active, it returns the relay user", %{conn: conn} do
11 Config.put([:instance, :allow_relay], true)
15 |> get(activity_pub_path(conn, :relay))
18 assert res["id"] =~ "/relay"
21 test "with the relay disabled, it returns 404", %{conn: conn} do
22 Config.put([:instance, :allow_relay], false)
26 |> get(activity_pub_path(conn, :relay))
31 describe "/users/:nickname" do
32 test "it returns a json representation of the user", %{conn: conn} do
37 |> put_req_header("accept", "application/activity+json")
38 |> get("/users/#{user.nickname}")
40 user = Repo.get(User, user.id)
42 assert json_response(conn, 200) == UserView.render("user.json", %{user: user})
46 describe "/object/:uuid" do
47 test "it returns a json representation of the object", %{conn: conn} do
49 uuid = String.split(note.data["id"], "/") |> List.last()
53 |> put_req_header("accept", "application/activity+json")
54 |> get("/objects/#{uuid}")
56 assert json_response(conn, 200) == ObjectView.render("object.json", %{object: note})
59 test "it returns 404 for non-public messages", %{conn: conn} do
60 note = insert(:direct_note)
61 uuid = String.split(note.data["id"], "/") |> List.last()
65 |> put_req_header("accept", "application/activity+json")
66 |> get("/objects/#{uuid}")
68 assert json_response(conn, 404)
73 test "it inserts an incoming activity into the database", %{conn: conn} do
74 data = File.read!("test/fixtures/mastodon-post-activity.json") |> Poison.decode!()
78 |> assign(:valid_signature, true)
79 |> put_req_header("content-type", "application/activity+json")
80 |> post("/inbox", data)
82 assert "ok" == json_response(conn, 200)
84 assert Activity.get_by_ap_id(data["id"])
88 describe "/users/:nickname/inbox" do
89 test "it inserts an incoming activity into the database", %{conn: conn} do
93 File.read!("test/fixtures/mastodon-post-activity.json")
95 |> Map.put("bcc", [user.ap_id])
99 |> assign(:valid_signature, true)
100 |> put_req_header("content-type", "application/activity+json")
101 |> post("/users/#{user.nickname}/inbox", data)
103 assert "ok" == json_response(conn, 200)
105 assert Activity.get_by_ap_id(data["id"])
109 describe "/users/:nickname/outbox" do
110 test "it returns a note activity in a collection", %{conn: conn} do
111 note_activity = insert(:note_activity)
112 user = User.get_cached_by_ap_id(note_activity.data["actor"])
116 |> put_req_header("accept", "application/activity+json")
117 |> get("/users/#{user.nickname}/outbox")
119 assert response(conn, 200) =~ note_activity.data["object"]["content"]
122 test "it returns an announce activity in a collection", %{conn: conn} do
123 announce_activity = insert(:announce_activity)
124 user = User.get_cached_by_ap_id(announce_activity.data["actor"])
128 |> put_req_header("accept", "application/activity+json")
129 |> get("/users/#{user.nickname}/outbox")
131 assert response(conn, 200) =~ announce_activity.data["object"]
135 describe "/users/:nickname/followers" do
136 test "it returns the followers in a collection", %{conn: conn} do
138 user_two = insert(:user)
139 User.follow(user, user_two)
143 |> get("/users/#{user_two.nickname}/followers")
144 |> json_response(200)
146 assert result["first"]["orderedItems"] == [user.ap_id]
149 test "it works for more than 10 users", %{conn: conn} do
152 Enum.each(1..15, fn _ ->
153 other_user = insert(:user)
154 User.follow(other_user, user)
159 |> get("/users/#{user.nickname}/followers")
160 |> json_response(200)
162 assert length(result["first"]["orderedItems"]) == 10
163 assert result["first"]["totalItems"] == 15
164 assert result["totalItems"] == 15
168 |> get("/users/#{user.nickname}/followers?page=2")
169 |> json_response(200)
171 assert length(result["orderedItems"]) == 5
172 assert result["totalItems"] == 15
176 describe "/users/:nickname/following" do
177 test "it returns the following in a collection", %{conn: conn} do
179 user_two = insert(:user)
180 User.follow(user, user_two)
184 |> get("/users/#{user.nickname}/following")
185 |> json_response(200)
187 assert result["first"]["orderedItems"] == [user_two.ap_id]
190 test "it works for more than 10 users", %{conn: conn} do
193 Enum.each(1..15, fn _ ->
194 user = Repo.get(User, user.id)
195 other_user = insert(:user)
196 User.follow(user, other_user)
201 |> get("/users/#{user.nickname}/following")
202 |> json_response(200)
204 assert length(result["first"]["orderedItems"]) == 10
205 assert result["first"]["totalItems"] == 15
206 assert result["totalItems"] == 15
210 |> get("/users/#{user.nickname}/following?page=2")
211 |> json_response(200)
213 assert length(result["orderedItems"]) == 5
214 assert result["totalItems"] == 15