Merge branch 'fix/theora-detection-read-bytes' into 'develop'
[akkoma] / test / web / admin_api / admin_api_controller_test.exs
1 defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do
2 use Pleroma.Web.ConnCase
3
4 alias Pleroma.{Repo, User}
5
6 import Pleroma.Factory
7 import ExUnit.CaptureLog
8
9 describe "/api/pleroma/admin/user" do
10 test "Delete" do
11 admin = insert(:user, info: %{is_admin: true})
12 user = insert(:user)
13
14 conn =
15 build_conn()
16 |> assign(:user, admin)
17 |> put_req_header("accept", "application/json")
18 |> delete("/api/pleroma/admin/user?nickname=#{user.nickname}")
19
20 assert json_response(conn, 200) == user.nickname
21 end
22
23 test "Create" do
24 admin = insert(:user, info: %{is_admin: true})
25
26 conn =
27 build_conn()
28 |> assign(:user, admin)
29 |> put_req_header("accept", "application/json")
30 |> post("/api/pleroma/admin/user", %{
31 "nickname" => "lain",
32 "email" => "lain@example.org",
33 "password" => "test"
34 })
35
36 assert json_response(conn, 200) == "lain"
37 end
38 end
39
40 describe "PUT /api/pleroma/admin/users/tag" do
41 setup do
42 admin = insert(:user, info: %{is_admin: true})
43 user1 = insert(:user, %{tags: ["x"]})
44 user2 = insert(:user, %{tags: ["y"]})
45 user3 = insert(:user, %{tags: ["unchanged"]})
46
47 conn =
48 build_conn()
49 |> assign(:user, admin)
50 |> put_req_header("accept", "application/json")
51 |> put(
52 "/api/pleroma/admin/users/tag?nicknames[]=#{user1.nickname}&nicknames[]=#{
53 user2.nickname
54 }&tags[]=foo&tags[]=bar"
55 )
56
57 %{conn: conn, user1: user1, user2: user2, user3: user3}
58 end
59
60 test "it appends specified tags to users with specified nicknames", %{
61 conn: conn,
62 user1: user1,
63 user2: user2
64 } do
65 assert json_response(conn, :no_content)
66 assert Repo.get(User, user1.id).tags == ["x", "foo", "bar"]
67 assert Repo.get(User, user2.id).tags == ["y", "foo", "bar"]
68 end
69
70 test "it does not modify tags of not specified users", %{conn: conn, user3: user3} do
71 assert json_response(conn, :no_content)
72 assert Repo.get(User, user3.id).tags == ["unchanged"]
73 end
74 end
75
76 describe "DELETE /api/pleroma/admin/users/tag" do
77 setup do
78 admin = insert(:user, info: %{is_admin: true})
79 user1 = insert(:user, %{tags: ["x"]})
80 user2 = insert(:user, %{tags: ["y", "z"]})
81 user3 = insert(:user, %{tags: ["unchanged"]})
82
83 conn =
84 build_conn()
85 |> assign(:user, admin)
86 |> put_req_header("accept", "application/json")
87 |> delete(
88 "/api/pleroma/admin/users/tag?nicknames[]=#{user1.nickname}&nicknames[]=#{
89 user2.nickname
90 }&tags[]=x&tags[]=z"
91 )
92
93 %{conn: conn, user1: user1, user2: user2, user3: user3}
94 end
95
96 test "it removes specified tags from users with specified nicknames", %{
97 conn: conn,
98 user1: user1,
99 user2: user2
100 } do
101 assert json_response(conn, :no_content)
102 assert Repo.get(User, user1.id).tags == []
103 assert Repo.get(User, user2.id).tags == ["y"]
104 end
105
106 test "it does not modify tags of not specified users", %{conn: conn, user3: user3} do
107 assert json_response(conn, :no_content)
108 assert Repo.get(User, user3.id).tags == ["unchanged"]
109 end
110 end
111
112 describe "/api/pleroma/admin/permission_group" do
113 test "GET is giving user_info" do
114 admin = insert(:user, info: %{is_admin: true})
115
116 conn =
117 build_conn()
118 |> assign(:user, admin)
119 |> put_req_header("accept", "application/json")
120 |> get("/api/pleroma/admin/permission_group/#{admin.nickname}")
121
122 assert json_response(conn, 200) == %{
123 "is_admin" => true,
124 "is_moderator" => false
125 }
126 end
127
128 test "/:right POST, can add to a permission group" do
129 admin = insert(:user, info: %{is_admin: true})
130 user = insert(:user)
131
132 conn =
133 build_conn()
134 |> assign(:user, admin)
135 |> put_req_header("accept", "application/json")
136 |> post("/api/pleroma/admin/permission_group/#{user.nickname}/admin")
137
138 assert json_response(conn, 200) == %{
139 "is_admin" => true
140 }
141 end
142
143 test "/:right DELETE, can remove from a permission group" do
144 admin = insert(:user, info: %{is_admin: true})
145 user = insert(:user, info: %{is_admin: true})
146
147 conn =
148 build_conn()
149 |> assign(:user, admin)
150 |> put_req_header("accept", "application/json")
151 |> delete("/api/pleroma/admin/permission_group/#{user.nickname}/admin")
152
153 assert json_response(conn, 200) == %{
154 "is_admin" => false
155 }
156 end
157 end
158
159 test "/api/pleroma/admin/invite_token" do
160 admin = insert(:user, info: %{is_admin: true})
161
162 conn =
163 build_conn()
164 |> assign(:user, admin)
165 |> put_req_header("accept", "application/json")
166 |> get("/api/pleroma/admin/invite_token")
167
168 assert conn.status == 200
169 end
170
171 test "/api/pleroma/admin/password_reset" do
172 admin = insert(:user, info: %{is_admin: true})
173 user = insert(:user)
174
175 conn =
176 build_conn()
177 |> assign(:user, admin)
178 |> put_req_header("accept", "application/json")
179 |> get("/api/pleroma/admin/password_reset?nickname=#{user.nickname}")
180
181 assert conn.status == 200
182 end
183 end