ed7c4172c65b8fbeb3eceea58d2bce5319bfd3fd
[akkoma] / test / pleroma / web / admin_api / controllers / o_auth_app_controller_test.exs
1 # Pleroma: A lightweight social networking server
2 # Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>
3 # SPDX-License-Identifier: AGPL-3.0-only
4
5 defmodule Pleroma.Web.AdminAPI.OAuthAppControllerTest do
6 use Pleroma.Web.ConnCase, async: true
7 use Oban.Testing, repo: Pleroma.Repo
8
9 import Pleroma.Factory
10
11 alias Pleroma.Config
12 alias Pleroma.Web
13
14 setup do
15 admin = insert(:user, is_admin: true)
16 token = insert(:oauth_admin_token, user: admin)
17
18 conn =
19 build_conn()
20 |> assign(:user, admin)
21 |> assign(:token, token)
22
23 {:ok, %{admin: admin, token: token, conn: conn}}
24 end
25
26 describe "POST /api/pleroma/admin/oauth_app" do
27 test "errors", %{conn: conn} do
28 response =
29 conn
30 |> put_req_header("content-type", "application/json")
31 |> post("/api/pleroma/admin/oauth_app", %{})
32 |> json_response_and_validate_schema(400)
33
34 assert %{
35 "error" => "Missing field: name. Missing field: redirect_uris."
36 } = response
37 end
38
39 test "success", %{conn: conn} do
40 base_url = Web.base_url()
41 app_name = "Trusted app"
42
43 response =
44 conn
45 |> put_req_header("content-type", "application/json")
46 |> post("/api/pleroma/admin/oauth_app", %{
47 name: app_name,
48 redirect_uris: base_url
49 })
50 |> json_response_and_validate_schema(200)
51
52 assert %{
53 "client_id" => _,
54 "client_secret" => _,
55 "name" => ^app_name,
56 "redirect_uri" => ^base_url,
57 "trusted" => false
58 } = response
59 end
60
61 test "with trusted", %{conn: conn} do
62 base_url = Web.base_url()
63 app_name = "Trusted app"
64
65 response =
66 conn
67 |> put_req_header("content-type", "application/json")
68 |> post("/api/pleroma/admin/oauth_app", %{
69 name: app_name,
70 redirect_uris: base_url,
71 trusted: true
72 })
73 |> json_response_and_validate_schema(200)
74
75 assert %{
76 "client_id" => _,
77 "client_secret" => _,
78 "name" => ^app_name,
79 "redirect_uri" => ^base_url,
80 "trusted" => true
81 } = response
82 end
83 end
84
85 describe "GET /api/pleroma/admin/oauth_app" do
86 setup do
87 app = insert(:oauth_app)
88 {:ok, app: app}
89 end
90
91 test "list", %{conn: conn} do
92 response =
93 conn
94 |> get("/api/pleroma/admin/oauth_app")
95 |> json_response_and_validate_schema(200)
96
97 assert %{"apps" => apps, "count" => count, "page_size" => _} = response
98
99 assert length(apps) == count
100 end
101
102 test "with page size", %{conn: conn} do
103 insert(:oauth_app)
104 page_size = 1
105
106 response =
107 conn
108 |> get("/api/pleroma/admin/oauth_app?page_size=#{page_size}")
109 |> json_response_and_validate_schema(200)
110
111 assert %{"apps" => apps, "count" => _, "page_size" => ^page_size} = response
112
113 assert length(apps) == page_size
114 end
115
116 test "search by client name", %{conn: conn, app: app} do
117 response =
118 conn
119 |> get("/api/pleroma/admin/oauth_app?name=#{app.client_name}")
120 |> json_response_and_validate_schema(200)
121
122 assert %{"apps" => [returned], "count" => _, "page_size" => _} = response
123
124 assert returned["client_id"] == app.client_id
125 assert returned["name"] == app.client_name
126 end
127
128 test "search by client id", %{conn: conn, app: app} do
129 response =
130 conn
131 |> get("/api/pleroma/admin/oauth_app?client_id=#{app.client_id}")
132 |> json_response_and_validate_schema(200)
133
134 assert %{"apps" => [returned], "count" => _, "page_size" => _} = response
135
136 assert returned["client_id"] == app.client_id
137 assert returned["name"] == app.client_name
138 end
139
140 test "only trusted", %{conn: conn} do
141 app = insert(:oauth_app, trusted: true)
142
143 response =
144 conn
145 |> get("/api/pleroma/admin/oauth_app?trusted=true")
146 |> json_response_and_validate_schema(200)
147
148 assert %{"apps" => [returned], "count" => _, "page_size" => _} = response
149
150 assert returned["client_id"] == app.client_id
151 assert returned["name"] == app.client_name
152 end
153 end
154
155 describe "DELETE /api/pleroma/admin/oauth_app/:id" do
156 test "with id", %{conn: conn} do
157 app = insert(:oauth_app)
158
159 response =
160 conn
161 |> delete("/api/pleroma/admin/oauth_app/" <> to_string(app.id))
162 |> json_response_and_validate_schema(:no_content)
163
164 assert response == ""
165 end
166
167 test "with non existance id", %{conn: conn} do
168 response =
169 conn
170 |> delete("/api/pleroma/admin/oauth_app/0")
171 |> json_response_and_validate_schema(:bad_request)
172
173 assert response == ""
174 end
175 end
176
177 describe "PATCH /api/pleroma/admin/oauth_app/:id" do
178 test "with id", %{conn: conn} do
179 app = insert(:oauth_app)
180
181 name = "another name"
182 url = "https://example.com"
183 scopes = ["admin"]
184 id = app.id
185 website = "http://website.com"
186
187 response =
188 conn
189 |> put_req_header("content-type", "application/json")
190 |> patch("/api/pleroma/admin/oauth_app/#{id}", %{
191 name: name,
192 trusted: true,
193 redirect_uris: url,
194 scopes: scopes,
195 website: website
196 })
197 |> json_response_and_validate_schema(200)
198
199 assert %{
200 "client_id" => _,
201 "client_secret" => _,
202 "id" => ^id,
203 "name" => ^name,
204 "redirect_uri" => ^url,
205 "trusted" => true,
206 "website" => ^website
207 } = response
208 end
209
210 test "without id", %{conn: conn} do
211 response =
212 conn
213 |> put_req_header("content-type", "application/json")
214 |> patch("/api/pleroma/admin/oauth_app/0")
215 |> json_response_and_validate_schema(:bad_request)
216
217 assert response == ""
218 end
219 end
220 end