1 # Pleroma: A lightweight social networking server
2 # Copyright © 2017-2019 Pleroma Authors <https://pleroma.social/>
3 # SPDX-License-Identifier: AGPL-3.0-only
5 defmodule Pleroma.Web.MastodonAPI.MastodonAPIController.UpdateCredentialsTest do
9 use Pleroma.Web.ConnCase
11 import Pleroma.Factory
13 describe "updating credentials" do
14 test "sets user settings in a generic way", %{conn: conn} do
19 |> assign(:user, user)
20 |> patch("/api/v1/accounts/update_credentials", %{
21 "pleroma_settings_store" => %{
28 assert user = json_response(res_conn, 200)
29 assert user["pleroma"]["settings_store"] == %{"pleroma_fe" => %{"theme" => "bla"}}
31 user = Repo.get(User, user["id"])
35 |> assign(:user, user)
36 |> patch("/api/v1/accounts/update_credentials", %{
37 "pleroma_settings_store" => %{
44 assert user = json_response(res_conn, 200)
46 assert user["pleroma"]["settings_store"] ==
48 "pleroma_fe" => %{"theme" => "bla"},
49 "masto_fe" => %{"theme" => "bla"}
52 user = Repo.get(User, user["id"])
56 |> assign(:user, user)
57 |> patch("/api/v1/accounts/update_credentials", %{
58 "pleroma_settings_store" => %{
65 assert user = json_response(res_conn, 200)
67 assert user["pleroma"]["settings_store"] ==
69 "pleroma_fe" => %{"theme" => "bla"},
70 "masto_fe" => %{"theme" => "blub"}
74 test "updates the user's bio", %{conn: conn} do
80 |> assign(:user, user)
81 |> patch("/api/v1/accounts/update_credentials", %{
82 "note" => "I drink #cofe with @#{user2.nickname}"
85 assert user = json_response(conn, 200)
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=") <>
90 ~s(" class="u-url mention" href=") <>
91 user2.ap_id <> ~s(">@<span>) <> user2.nickname <> ~s(</span></a></span>)
94 test "updates the user's locking status", %{conn: conn} do
99 |> assign(:user, user)
100 |> patch("/api/v1/accounts/update_credentials", %{locked: "true"})
102 assert user = json_response(conn, 200)
103 assert user["locked"] == true
106 test "updates the user's default scope", %{conn: conn} do
111 |> assign(:user, user)
112 |> patch("/api/v1/accounts/update_credentials", %{default_scope: "cofe"})
114 assert user = json_response(conn, 200)
115 assert user["source"]["privacy"] == "cofe"
118 test "updates the user's hide_followers status", %{conn: conn} do
123 |> assign(:user, user)
124 |> patch("/api/v1/accounts/update_credentials", %{hide_followers: "true"})
126 assert user = json_response(conn, 200)
127 assert user["pleroma"]["hide_followers"] == true
130 test "updates the user's skip_thread_containment option", %{conn: conn} do
135 |> assign(:user, user)
136 |> patch("/api/v1/accounts/update_credentials", %{skip_thread_containment: "true"})
137 |> json_response(200)
139 assert response["pleroma"]["skip_thread_containment"] == true
140 assert refresh_record(user).info.skip_thread_containment
143 test "updates the user's hide_follows status", %{conn: conn} do
148 |> assign(:user, user)
149 |> patch("/api/v1/accounts/update_credentials", %{hide_follows: "true"})
151 assert user = json_response(conn, 200)
152 assert user["pleroma"]["hide_follows"] == true
155 test "updates the user's hide_favorites status", %{conn: conn} do
160 |> assign(:user, user)
161 |> patch("/api/v1/accounts/update_credentials", %{hide_favorites: "true"})
163 assert user = json_response(conn, 200)
164 assert user["pleroma"]["hide_favorites"] == true
167 test "updates the user's show_role status", %{conn: conn} do
172 |> assign(:user, user)
173 |> patch("/api/v1/accounts/update_credentials", %{show_role: "false"})
175 assert user = json_response(conn, 200)
176 assert user["source"]["pleroma"]["show_role"] == false
179 test "updates the user's no_rich_text status", %{conn: conn} do
184 |> assign(:user, user)
185 |> patch("/api/v1/accounts/update_credentials", %{no_rich_text: "true"})
187 assert user = json_response(conn, 200)
188 assert user["source"]["pleroma"]["no_rich_text"] == true
191 test "updates the user's name", %{conn: conn} do
196 |> assign(:user, user)
197 |> patch("/api/v1/accounts/update_credentials", %{"display_name" => "markorepairs"})
199 assert user = json_response(conn, 200)
200 assert user["display_name"] == "markorepairs"
203 test "updates the user's avatar", %{conn: conn} do
206 new_avatar = %Plug.Upload{
207 content_type: "image/jpg",
208 path: Path.absname("test/fixtures/image.jpg"),
209 filename: "an_image.jpg"
214 |> assign(:user, user)
215 |> patch("/api/v1/accounts/update_credentials", %{"avatar" => new_avatar})
217 assert user_response = json_response(conn, 200)
218 assert user_response["avatar"] != User.avatar_url(user)
221 test "updates the user's banner", %{conn: conn} do
224 new_header = %Plug.Upload{
225 content_type: "image/jpg",
226 path: Path.absname("test/fixtures/image.jpg"),
227 filename: "an_image.jpg"
232 |> assign(:user, user)
233 |> patch("/api/v1/accounts/update_credentials", %{"header" => new_header})
235 assert user_response = json_response(conn, 200)
236 assert user_response["header"] != User.banner_url(user)
239 test "updates the user's background", %{conn: conn} do
242 new_header = %Plug.Upload{
243 content_type: "image/jpg",
244 path: Path.absname("test/fixtures/image.jpg"),
245 filename: "an_image.jpg"
250 |> assign(:user, user)
251 |> patch("/api/v1/accounts/update_credentials", %{
252 "pleroma_background_image" => new_header
255 assert user_response = json_response(conn, 200)
256 assert user_response["pleroma"]["background_image"]
259 test "requires 'write' permission", %{conn: conn} do
260 token1 = insert(:oauth_token, scopes: ["read"])
261 token2 = insert(:oauth_token, scopes: ["write", "follow"])
263 for token <- [token1, token2] do
266 |> put_req_header("authorization", "Bearer #{token.token}")
267 |> patch("/api/v1/accounts/update_credentials", %{})
269 if token == token1 do
270 assert %{"error" => "Insufficient permissions: write."} == json_response(conn, 403)
272 assert json_response(conn, 200)
277 test "updates profile emojos", %{conn: conn} do
280 note = "*sips :blank:*"
281 name = "I am :firefox:"
285 |> assign(:user, user)
286 |> patch("/api/v1/accounts/update_credentials", %{
288 "display_name" => name
291 assert json_response(conn, 200)
295 |> get("/api/v1/accounts/#{user.id}")
297 assert user = json_response(conn, 200)
299 assert user["note"] == note
300 assert user["display_name"] == name
301 assert [%{"shortcode" => "blank"}, %{"shortcode" => "firefox"}] = user["emojis"]