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
20 Application.get_env(:pleroma, :instance)
21 |> Keyword.put(:allow_relay, false)
23 Application.put_env(:pleroma, :instance, instance)
27 |> get(activity_pub_path(conn, :relay))
31 Application.get_env(:pleroma, :instance)
32 |> Keyword.put(:allow_relay, true)
34 Application.put_env(:pleroma, :instance, instance)
38 describe "/users/:nickname" do
39 test "it returns a json representation of the user", %{conn: conn} do
44 |> put_req_header("accept", "application/activity+json")
45 |> get("/users/#{user.nickname}")
47 user = Repo.get(User, user.id)
49 assert json_response(conn, 200) == UserView.render("user.json", %{user: user})
53 describe "/object/:uuid" do
54 test "it returns a json representation of the object", %{conn: conn} do
56 uuid = String.split(note.data["id"], "/") |> List.last()
60 |> put_req_header("accept", "application/activity+json")
61 |> get("/objects/#{uuid}")
63 assert json_response(conn, 200) == ObjectView.render("object.json", %{object: note})
66 test "it returns 404 for non-public messages", %{conn: conn} do
67 note = insert(:direct_note)
68 uuid = String.split(note.data["id"], "/") |> List.last()
72 |> put_req_header("accept", "application/activity+json")
73 |> get("/objects/#{uuid}")
75 assert json_response(conn, 404)
80 test "it inserts an incoming activity into the database", %{conn: conn} do
81 data = File.read!("test/fixtures/mastodon-post-activity.json") |> Poison.decode!()
85 |> assign(:valid_signature, true)
86 |> put_req_header("content-type", "application/activity+json")
87 |> post("/inbox", data)
89 assert "ok" == json_response(conn, 200)
91 assert Activity.get_by_ap_id(data["id"])
95 describe "/users/:nickname/inbox" do
96 test "it inserts an incoming activity into the database", %{conn: conn} do
100 File.read!("test/fixtures/mastodon-post-activity.json")
102 |> Map.put("bcc", [user.ap_id])
106 |> assign(:valid_signature, true)
107 |> put_req_header("content-type", "application/activity+json")
108 |> post("/users/#{user.nickname}/inbox", data)
110 assert "ok" == json_response(conn, 200)
112 assert Activity.get_by_ap_id(data["id"])
116 describe "/users/:nickname/outbox" do
117 test "it returns a note activity in a collection", %{conn: conn} do
118 note_activity = insert(:note_activity)
119 user = User.get_cached_by_ap_id(note_activity.data["actor"])
123 |> put_req_header("accept", "application/activity+json")
124 |> get("/users/#{user.nickname}/outbox")
126 assert response(conn, 200) =~ note_activity.data["object"]["content"]
129 test "it returns an announce activity in a collection", %{conn: conn} do
130 announce_activity = insert(:announce_activity)
131 user = User.get_cached_by_ap_id(announce_activity.data["actor"])
135 |> put_req_header("accept", "application/activity+json")
136 |> get("/users/#{user.nickname}/outbox")
138 assert response(conn, 200) =~ announce_activity.data["object"]
142 describe "/users/:nickname/followers" do
143 test "it returns the followers in a collection", %{conn: conn} do
145 user_two = insert(:user)
146 User.follow(user, user_two)
150 |> get("/users/#{user_two.nickname}/followers")
151 |> json_response(200)
153 assert result["first"]["orderedItems"] == [user.ap_id]
156 test "it works for more than 10 users", %{conn: conn} do
159 Enum.each(1..15, fn _ ->
160 other_user = insert(:user)
161 User.follow(other_user, user)
166 |> get("/users/#{user.nickname}/followers")
167 |> json_response(200)
169 assert length(result["first"]["orderedItems"]) == 10
170 assert result["first"]["totalItems"] == 15
171 assert result["totalItems"] == 15
175 |> get("/users/#{user.nickname}/followers?page=2")
176 |> json_response(200)
178 assert length(result["orderedItems"]) == 5
179 assert result["totalItems"] == 15
183 describe "/users/:nickname/following" do
184 test "it returns the following in a collection", %{conn: conn} do
186 user_two = insert(:user)
187 User.follow(user, user_two)
191 |> get("/users/#{user.nickname}/following")
192 |> json_response(200)
194 assert result["first"]["orderedItems"] == [user_two.ap_id]
197 test "it works for more than 10 users", %{conn: conn} do
200 Enum.each(1..15, fn _ ->
201 user = Repo.get(User, user.id)
202 other_user = insert(:user)
203 User.follow(user, other_user)
208 |> get("/users/#{user.nickname}/following")
209 |> json_response(200)
211 assert length(result["first"]["orderedItems"]) == 10
212 assert result["first"]["totalItems"] == 15
213 assert result["totalItems"] == 15
217 |> get("/users/#{user.nickname}/following?page=2")
218 |> json_response(200)
220 assert length(result["orderedItems"]) == 5
221 assert result["totalItems"] == 15