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 Tesla.Mock.mock_global(fn env -> apply(HttpRequestMock, :request, [env]) end)
14 test "with the relay active, it returns the relay user", %{conn: conn} do
17 |> get(activity_pub_path(conn, :relay))
20 assert res["id"] =~ "/relay"
23 test "with the relay disabled, it returns 404", %{conn: conn} do
24 Pleroma.Config.put([:instance, :allow_relay], false)
28 |> get(activity_pub_path(conn, :relay))
31 Pleroma.Config.put([:instance, :allow_relay], true)
35 describe "/users/:nickname" do
36 test "it returns a json representation of the user", %{conn: conn} do
41 |> put_req_header("accept", "application/activity+json")
42 |> get("/users/#{user.nickname}")
44 user = Repo.get(User, user.id)
46 assert json_response(conn, 200) == UserView.render("user.json", %{user: user})
50 describe "/object/:uuid" do
51 test "it returns a json representation of the object", %{conn: conn} do
53 uuid = String.split(note.data["id"], "/") |> List.last()
57 |> put_req_header("accept", "application/activity+json")
58 |> get("/objects/#{uuid}")
60 assert json_response(conn, 200) == ObjectView.render("object.json", %{object: note})
63 test "it returns 404 for non-public messages", %{conn: conn} do
64 note = insert(:direct_note)
65 uuid = String.split(note.data["id"], "/") |> List.last()
69 |> put_req_header("accept", "application/activity+json")
70 |> get("/objects/#{uuid}")
72 assert json_response(conn, 404)
77 test "it inserts an incoming activity into the database", %{conn: conn} do
78 data = File.read!("test/fixtures/mastodon-post-activity.json") |> Poison.decode!()
82 |> assign(:valid_signature, true)
83 |> put_req_header("content-type", "application/activity+json")
84 |> post("/inbox", data)
86 assert "ok" == json_response(conn, 200)
88 assert Activity.get_by_ap_id(data["id"])
92 describe "/users/:nickname/inbox" do
93 test "it inserts an incoming activity into the database", %{conn: conn} do
97 File.read!("test/fixtures/mastodon-post-activity.json")
99 |> Map.put("bcc", [user.ap_id])
103 |> assign(:valid_signature, true)
104 |> put_req_header("content-type", "application/activity+json")
105 |> post("/users/#{user.nickname}/inbox", data)
107 assert "ok" == json_response(conn, 200)
109 assert Activity.get_by_ap_id(data["id"])
113 describe "/users/:nickname/outbox" do
114 test "it returns a note activity in a collection", %{conn: conn} do
115 note_activity = insert(:note_activity)
116 user = User.get_cached_by_ap_id(note_activity.data["actor"])
120 |> put_req_header("accept", "application/activity+json")
121 |> get("/users/#{user.nickname}/outbox")
123 assert response(conn, 200) =~ note_activity.data["object"]["content"]
126 test "it returns an announce activity in a collection", %{conn: conn} do
127 announce_activity = insert(:announce_activity)
128 user = User.get_cached_by_ap_id(announce_activity.data["actor"])
132 |> put_req_header("accept", "application/activity+json")
133 |> get("/users/#{user.nickname}/outbox")
135 assert response(conn, 200) =~ announce_activity.data["object"]
139 describe "/users/:nickname/followers" do
140 test "it returns the followers in a collection", %{conn: conn} do
142 user_two = insert(:user)
143 User.follow(user, user_two)
147 |> get("/users/#{user_two.nickname}/followers")
148 |> json_response(200)
150 assert result["first"]["orderedItems"] == [user.ap_id]
153 test "it works for more than 10 users", %{conn: conn} do
156 Enum.each(1..15, fn _ ->
157 other_user = insert(:user)
158 User.follow(other_user, user)
163 |> get("/users/#{user.nickname}/followers")
164 |> json_response(200)
166 assert length(result["first"]["orderedItems"]) == 10
167 assert result["first"]["totalItems"] == 15
168 assert result["totalItems"] == 15
172 |> get("/users/#{user.nickname}/followers?page=2")
173 |> json_response(200)
175 assert length(result["orderedItems"]) == 5
176 assert result["totalItems"] == 15
180 describe "/users/:nickname/following" do
181 test "it returns the following in a collection", %{conn: conn} do
183 user_two = insert(:user)
184 User.follow(user, user_two)
188 |> get("/users/#{user.nickname}/following")
189 |> json_response(200)
191 assert result["first"]["orderedItems"] == [user_two.ap_id]
194 test "it works for more than 10 users", %{conn: conn} do
197 Enum.each(1..15, fn _ ->
198 user = Repo.get(User, user.id)
199 other_user = insert(:user)
200 User.follow(user, other_user)
205 |> get("/users/#{user.nickname}/following")
206 |> json_response(200)
208 assert length(result["first"]["orderedItems"]) == 10
209 assert result["first"]["totalItems"] == 15
210 assert result["totalItems"] == 15
214 |> get("/users/#{user.nickname}/following?page=2")
215 |> json_response(200)
217 assert length(result["orderedItems"]) == 5
218 assert result["totalItems"] == 15