1 # Pleroma: A lightweight social networking server
2 # Copyright © 2017-2018 Pleroma Authors <https://pleroma.social/>
3 # SPDX-License-Identifier: AGPL-3.0-only
5 defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do
6 use Pleroma.Web.ConnCase
8 alias Pleroma.{Repo, User}
11 describe "/api/pleroma/admin/user" do
13 admin = insert(:user, info: %{is_admin: true})
18 |> assign(:user, admin)
19 |> put_req_header("accept", "application/json")
20 |> delete("/api/pleroma/admin/user?nickname=#{user.nickname}")
22 assert json_response(conn, 200) == user.nickname
26 admin = insert(:user, info: %{is_admin: true})
30 |> assign(:user, admin)
31 |> put_req_header("accept", "application/json")
32 |> post("/api/pleroma/admin/user", %{
34 "email" => "lain@example.org",
38 assert json_response(conn, 200) == "lain"
42 describe "PUT /api/pleroma/admin/users/tag" do
44 admin = insert(:user, info: %{is_admin: true})
45 user1 = insert(:user, %{tags: ["x"]})
46 user2 = insert(:user, %{tags: ["y"]})
47 user3 = insert(:user, %{tags: ["unchanged"]})
51 |> assign(:user, admin)
52 |> put_req_header("accept", "application/json")
54 "/api/pleroma/admin/users/tag?nicknames[]=#{user1.nickname}&nicknames[]=#{
56 }&tags[]=foo&tags[]=bar"
59 %{conn: conn, user1: user1, user2: user2, user3: user3}
62 test "it appends specified tags to users with specified nicknames", %{
67 assert json_response(conn, :no_content)
68 assert Repo.get(User, user1.id).tags == ["x", "foo", "bar"]
69 assert Repo.get(User, user2.id).tags == ["y", "foo", "bar"]
72 test "it does not modify tags of not specified users", %{conn: conn, user3: user3} do
73 assert json_response(conn, :no_content)
74 assert Repo.get(User, user3.id).tags == ["unchanged"]
78 describe "DELETE /api/pleroma/admin/users/tag" do
80 admin = insert(:user, info: %{is_admin: true})
81 user1 = insert(:user, %{tags: ["x"]})
82 user2 = insert(:user, %{tags: ["y", "z"]})
83 user3 = insert(:user, %{tags: ["unchanged"]})
87 |> assign(:user, admin)
88 |> put_req_header("accept", "application/json")
90 "/api/pleroma/admin/users/tag?nicknames[]=#{user1.nickname}&nicknames[]=#{
95 %{conn: conn, user1: user1, user2: user2, user3: user3}
98 test "it removes specified tags from users with specified nicknames", %{
103 assert json_response(conn, :no_content)
104 assert Repo.get(User, user1.id).tags == []
105 assert Repo.get(User, user2.id).tags == ["y"]
108 test "it does not modify tags of not specified users", %{conn: conn, user3: user3} do
109 assert json_response(conn, :no_content)
110 assert Repo.get(User, user3.id).tags == ["unchanged"]
114 describe "/api/pleroma/admin/permission_group" do
115 test "GET is giving user_info" do
116 admin = insert(:user, info: %{is_admin: true})
120 |> assign(:user, admin)
121 |> put_req_header("accept", "application/json")
122 |> get("/api/pleroma/admin/permission_group/#{admin.nickname}")
124 assert json_response(conn, 200) == %{
126 "is_moderator" => false
130 test "/:right POST, can add to a permission group" do
131 admin = insert(:user, info: %{is_admin: true})
136 |> assign(:user, admin)
137 |> put_req_header("accept", "application/json")
138 |> post("/api/pleroma/admin/permission_group/#{user.nickname}/admin")
140 assert json_response(conn, 200) == %{
145 test "/:right DELETE, can remove from a permission group" do
146 admin = insert(:user, info: %{is_admin: true})
147 user = insert(:user, info: %{is_admin: true})
151 |> assign(:user, admin)
152 |> put_req_header("accept", "application/json")
153 |> delete("/api/pleroma/admin/permission_group/#{user.nickname}/admin")
155 assert json_response(conn, 200) == %{
161 describe "POST /api/pleroma/admin/email_invite, with valid config" do
163 registrations_open = Pleroma.Config.get([:instance, :registrations_open])
164 invites_enabled = Pleroma.Config.get([:instance, :invites_enabled])
165 Pleroma.Config.put([:instance, :registrations_open], false)
166 Pleroma.Config.put([:instance, :invites_enabled], true)
169 Pleroma.Config.put([:instance, :registrations_open], registrations_open)
170 Pleroma.Config.put([:instance, :invites_enabled], invites_enabled)
174 [user: insert(:user, info: %{is_admin: true})]
177 test "sends invitation and returns 204", %{conn: conn, user: user} do
178 recipient_email = "foo@bar.com"
179 recipient_name = "J. D."
183 |> assign(:user, user)
184 |> post("/api/pleroma/admin/email_invite?email=#{recipient_email}&name=#{recipient_name}")
186 assert json_response(conn, :no_content)
188 token_record = List.last(Pleroma.Repo.all(Pleroma.UserInviteToken))
190 refute token_record.used
192 Swoosh.TestAssertions.assert_email_sent(
193 Pleroma.UserEmail.user_invitation_email(
202 test "it returns 403 if requested by a non-admin", %{conn: conn} do
203 non_admin_user = insert(:user)
207 |> assign(:user, non_admin_user)
208 |> post("/api/pleroma/admin/email_invite?email=foo@bar.com&name=JD")
210 assert json_response(conn, :forbidden)
214 describe "POST /api/pleroma/admin/email_invite, with invalid config" do
216 [user: insert(:user, info: %{is_admin: true})]
219 test "it returns 500 if `invites_enabled` is not enabled", %{conn: conn, user: user} do
220 registrations_open = Pleroma.Config.get([:instance, :registrations_open])
221 invites_enabled = Pleroma.Config.get([:instance, :invites_enabled])
222 Pleroma.Config.put([:instance, :registrations_open], false)
223 Pleroma.Config.put([:instance, :invites_enabled], false)
226 Pleroma.Config.put([:instance, :registrations_open], registrations_open)
227 Pleroma.Config.put([:instance, :invites_enabled], invites_enabled)
233 |> assign(:user, user)
234 |> post("/api/pleroma/admin/email_invite?email=foo@bar.com&name=JD")
236 assert json_response(conn, :internal_server_error)
239 test "it returns 500 if `registrations_open` is enabled", %{conn: conn, user: user} do
240 registrations_open = Pleroma.Config.get([:instance, :registrations_open])
241 invites_enabled = Pleroma.Config.get([:instance, :invites_enabled])
242 Pleroma.Config.put([:instance, :registrations_open], true)
243 Pleroma.Config.put([:instance, :invites_enabled], true)
246 Pleroma.Config.put([:instance, :registrations_open], registrations_open)
247 Pleroma.Config.put([:instance, :invites_enabled], invites_enabled)
253 |> assign(:user, user)
254 |> post("/api/pleroma/admin/email_invite?email=foo@bar.com&name=JD")
256 assert json_response(conn, :internal_server_error)
260 test "/api/pleroma/admin/invite_token" do
261 admin = insert(:user, info: %{is_admin: true})
265 |> assign(:user, admin)
266 |> put_req_header("accept", "application/json")
267 |> get("/api/pleroma/admin/invite_token")
269 assert conn.status == 200
272 test "/api/pleroma/admin/password_reset" do
273 admin = insert(:user, info: %{is_admin: true})
278 |> assign(:user, admin)
279 |> put_req_header("accept", "application/json")
280 |> get("/api/pleroma/admin/password_reset?nickname=#{user.nickname}")
282 assert conn.status == 200