Merge branch 'bugfix/980-polls-double-vote' into 'develop'
[akkoma] / test / web / mastodon_api / mastodon_api_controller / update_credentials_test.exs
1 # Pleroma: A lightweight social networking server
2 # Copyright © 2017-2019 Pleroma Authors <https://pleroma.social/>
3 # SPDX-License-Identifier: AGPL-3.0-only
4
5 defmodule Pleroma.Web.MastodonAPI.MastodonAPIController.UpdateCredentialsTest do
6 alias Pleroma.Repo
7 alias Pleroma.User
8
9 use Pleroma.Web.ConnCase
10
11 import Pleroma.Factory
12
13 describe "updating credentials" do
14 test "sets user settings in a generic way", %{conn: conn} do
15 user = insert(:user)
16
17 res_conn =
18 conn
19 |> assign(:user, user)
20 |> patch("/api/v1/accounts/update_credentials", %{
21 "pleroma_settings_store" => %{
22 pleroma_fe: %{
23 theme: "bla"
24 }
25 }
26 })
27
28 assert user = json_response(res_conn, 200)
29 assert user["pleroma"]["settings_store"] == %{"pleroma_fe" => %{"theme" => "bla"}}
30
31 user = Repo.get(User, user["id"])
32
33 res_conn =
34 conn
35 |> assign(:user, user)
36 |> patch("/api/v1/accounts/update_credentials", %{
37 "pleroma_settings_store" => %{
38 masto_fe: %{
39 theme: "bla"
40 }
41 }
42 })
43
44 assert user = json_response(res_conn, 200)
45
46 assert user["pleroma"]["settings_store"] ==
47 %{
48 "pleroma_fe" => %{"theme" => "bla"},
49 "masto_fe" => %{"theme" => "bla"}
50 }
51
52 user = Repo.get(User, user["id"])
53
54 res_conn =
55 conn
56 |> assign(:user, user)
57 |> patch("/api/v1/accounts/update_credentials", %{
58 "pleroma_settings_store" => %{
59 masto_fe: %{
60 theme: "blub"
61 }
62 }
63 })
64
65 assert user = json_response(res_conn, 200)
66
67 assert user["pleroma"]["settings_store"] ==
68 %{
69 "pleroma_fe" => %{"theme" => "bla"},
70 "masto_fe" => %{"theme" => "blub"}
71 }
72 end
73
74 test "updates the user's bio", %{conn: conn} do
75 user = insert(:user)
76 user2 = insert(:user)
77
78 conn =
79 conn
80 |> assign(:user, user)
81 |> patch("/api/v1/accounts/update_credentials", %{
82 "note" => "I drink #cofe with @#{user2.nickname}"
83 })
84
85 assert user = json_response(conn, 200)
86
87 assert user["note"] ==
88 ~s(I drink <a class="hashtag" data-tag="cofe" href="http://localhost:4001/tag/cofe" rel="tag">#cofe</a> with <span class="h-card"><a data-user=") <>
89 user2.id <>
90 ~s(" class="u-url mention" href=") <>
91 user2.ap_id <> ~s(">@<span>) <> user2.nickname <> ~s(</span></a></span>)
92 end
93
94 test "updates the user's locking status", %{conn: conn} do
95 user = insert(:user)
96
97 conn =
98 conn
99 |> assign(:user, user)
100 |> patch("/api/v1/accounts/update_credentials", %{locked: "true"})
101
102 assert user = json_response(conn, 200)
103 assert user["locked"] == true
104 end
105
106 test "updates the user's default scope", %{conn: conn} do
107 user = insert(:user)
108
109 conn =
110 conn
111 |> assign(:user, user)
112 |> patch("/api/v1/accounts/update_credentials", %{default_scope: "cofe"})
113
114 assert user = json_response(conn, 200)
115 assert user["source"]["privacy"] == "cofe"
116 end
117
118 test "updates the user's hide_followers status", %{conn: conn} do
119 user = insert(:user)
120
121 conn =
122 conn
123 |> assign(:user, user)
124 |> patch("/api/v1/accounts/update_credentials", %{hide_followers: "true"})
125
126 assert user = json_response(conn, 200)
127 assert user["pleroma"]["hide_followers"] == true
128 end
129
130 test "updates the user's skip_thread_containment option", %{conn: conn} do
131 user = insert(:user)
132
133 response =
134 conn
135 |> assign(:user, user)
136 |> patch("/api/v1/accounts/update_credentials", %{skip_thread_containment: "true"})
137 |> json_response(200)
138
139 assert response["pleroma"]["skip_thread_containment"] == true
140 assert refresh_record(user).info.skip_thread_containment
141 end
142
143 test "updates the user's hide_follows status", %{conn: conn} do
144 user = insert(:user)
145
146 conn =
147 conn
148 |> assign(:user, user)
149 |> patch("/api/v1/accounts/update_credentials", %{hide_follows: "true"})
150
151 assert user = json_response(conn, 200)
152 assert user["pleroma"]["hide_follows"] == true
153 end
154
155 test "updates the user's hide_favorites status", %{conn: conn} do
156 user = insert(:user)
157
158 conn =
159 conn
160 |> assign(:user, user)
161 |> patch("/api/v1/accounts/update_credentials", %{hide_favorites: "true"})
162
163 assert user = json_response(conn, 200)
164 assert user["pleroma"]["hide_favorites"] == true
165 end
166
167 test "updates the user's show_role status", %{conn: conn} do
168 user = insert(:user)
169
170 conn =
171 conn
172 |> assign(:user, user)
173 |> patch("/api/v1/accounts/update_credentials", %{show_role: "false"})
174
175 assert user = json_response(conn, 200)
176 assert user["source"]["pleroma"]["show_role"] == false
177 end
178
179 test "updates the user's no_rich_text status", %{conn: conn} do
180 user = insert(:user)
181
182 conn =
183 conn
184 |> assign(:user, user)
185 |> patch("/api/v1/accounts/update_credentials", %{no_rich_text: "true"})
186
187 assert user = json_response(conn, 200)
188 assert user["source"]["pleroma"]["no_rich_text"] == true
189 end
190
191 test "updates the user's name", %{conn: conn} do
192 user = insert(:user)
193
194 conn =
195 conn
196 |> assign(:user, user)
197 |> patch("/api/v1/accounts/update_credentials", %{"display_name" => "markorepairs"})
198
199 assert user = json_response(conn, 200)
200 assert user["display_name"] == "markorepairs"
201 end
202
203 test "updates the user's avatar", %{conn: conn} do
204 user = insert(:user)
205
206 new_avatar = %Plug.Upload{
207 content_type: "image/jpg",
208 path: Path.absname("test/fixtures/image.jpg"),
209 filename: "an_image.jpg"
210 }
211
212 conn =
213 conn
214 |> assign(:user, user)
215 |> patch("/api/v1/accounts/update_credentials", %{"avatar" => new_avatar})
216
217 assert user_response = json_response(conn, 200)
218 assert user_response["avatar"] != User.avatar_url(user)
219 end
220
221 test "updates the user's banner", %{conn: conn} do
222 user = insert(:user)
223
224 new_header = %Plug.Upload{
225 content_type: "image/jpg",
226 path: Path.absname("test/fixtures/image.jpg"),
227 filename: "an_image.jpg"
228 }
229
230 conn =
231 conn
232 |> assign(:user, user)
233 |> patch("/api/v1/accounts/update_credentials", %{"header" => new_header})
234
235 assert user_response = json_response(conn, 200)
236 assert user_response["header"] != User.banner_url(user)
237 end
238
239 test "updates the user's background", %{conn: conn} do
240 user = insert(:user)
241
242 new_header = %Plug.Upload{
243 content_type: "image/jpg",
244 path: Path.absname("test/fixtures/image.jpg"),
245 filename: "an_image.jpg"
246 }
247
248 conn =
249 conn
250 |> assign(:user, user)
251 |> patch("/api/v1/accounts/update_credentials", %{
252 "pleroma_background_image" => new_header
253 })
254
255 assert user_response = json_response(conn, 200)
256 assert user_response["pleroma"]["background_image"]
257 end
258
259 test "requires 'write' permission", %{conn: conn} do
260 token1 = insert(:oauth_token, scopes: ["read"])
261 token2 = insert(:oauth_token, scopes: ["write", "follow"])
262
263 for token <- [token1, token2] do
264 conn =
265 conn
266 |> put_req_header("authorization", "Bearer #{token.token}")
267 |> patch("/api/v1/accounts/update_credentials", %{})
268
269 if token == token1 do
270 assert %{"error" => "Insufficient permissions: write."} == json_response(conn, 403)
271 else
272 assert json_response(conn, 200)
273 end
274 end
275 end
276
277 test "updates profile emojos", %{conn: conn} do
278 user = insert(:user)
279
280 note = "*sips :blank:*"
281 name = "I am :firefox:"
282
283 conn =
284 conn
285 |> assign(:user, user)
286 |> patch("/api/v1/accounts/update_credentials", %{
287 "note" => note,
288 "display_name" => name
289 })
290
291 assert json_response(conn, 200)
292
293 conn =
294 conn
295 |> get("/api/v1/accounts/#{user.id}")
296
297 assert user = json_response(conn, 200)
298
299 assert user["note"] == note
300 assert user["display_name"] == name
301 assert [%{"shortcode" => "blank"}, %{"shortcode" => "firefox"}] = user["emojis"]
302 end
303 end
304 end