Merge branch 'feature/add-background-image-to-mastoapi' into 'develop'
AccountView: Add user background. See merge request pleroma/pleroma!1280
This commit is contained in:
commit
62ffc00a5d
|
@ -41,6 +41,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
|
||||||
- Admin API: Endpoints for deleting and changing the scope of individual reported statuses
|
- Admin API: Endpoints for deleting and changing the scope of individual reported statuses
|
||||||
- Admin API: Endpoints to view and change config settings.
|
- Admin API: Endpoints to view and change config settings.
|
||||||
- AdminFE: initial release with basic user management accessible at /pleroma/admin/
|
- AdminFE: initial release with basic user management accessible at /pleroma/admin/
|
||||||
|
- Mastodon API: Add background image setting to update_credentials
|
||||||
- Mastodon API: [Scheduled statuses](https://docs.joinmastodon.org/api/rest/scheduled-statuses/)
|
- Mastodon API: [Scheduled statuses](https://docs.joinmastodon.org/api/rest/scheduled-statuses/)
|
||||||
- Mastodon API: `/api/v1/notifications/destroy_multiple` (glitch-soc extension)
|
- Mastodon API: `/api/v1/notifications/destroy_multiple` (glitch-soc extension)
|
||||||
- Mastodon API: `/api/v1/pleroma/accounts/:id/favourites` (API extension)
|
- Mastodon API: `/api/v1/pleroma/accounts/:id/favourites` (API extension)
|
||||||
|
|
|
@ -84,6 +84,7 @@ Additional parameters can be added to the JSON body/Form data:
|
||||||
- `default_scope` - the scope returned under `privacy` key in Source subentity
|
- `default_scope` - the scope returned under `privacy` key in Source subentity
|
||||||
- `pleroma_settings_store` - Opaque user settings to be saved on the backend.
|
- `pleroma_settings_store` - Opaque user settings to be saved on the backend.
|
||||||
- `skip_thread_containment` - if true, skip filtering out broken threads
|
- `skip_thread_containment` - if true, skip filtering out broken threads
|
||||||
|
- `pleroma_background_image` - sets the background image of the user.
|
||||||
|
|
||||||
### Pleroma Settings Store
|
### Pleroma Settings Store
|
||||||
Pleroma has mechanism that allows frontends to save blobs of json for each user on the backend. This can be used to save frontend-specific settings for a user that the backend does not need to know about.
|
Pleroma has mechanism that allows frontends to save blobs of json for each user on the backend. This can be used to save frontend-specific settings for a user that the backend does not need to know about.
|
||||||
|
|
|
@ -136,6 +136,14 @@ def update_credentials(%{assigns: %{user: user}} = conn, params) do
|
||||||
_ -> :error
|
_ -> :error
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
|
|> add_if_present(params, "pleroma_background_image", :background, fn value ->
|
||||||
|
with %Plug.Upload{} <- value,
|
||||||
|
{:ok, object} <- ActivityPub.upload(value, type: :background) do
|
||||||
|
{:ok, object.data}
|
||||||
|
else
|
||||||
|
_ -> :error
|
||||||
|
end
|
||||||
|
end)
|
||||||
|> Map.put(:emoji, user_info_emojis)
|
|> Map.put(:emoji, user_info_emojis)
|
||||||
|
|
||||||
info_cng = User.Info.profile_update(user.info, info_params)
|
info_cng = User.Info.profile_update(user.info, info_params)
|
||||||
|
|
|
@ -125,7 +125,8 @@ defp do_render("account.json", %{user: user} = opts) do
|
||||||
hide_follows: user.info.hide_follows,
|
hide_follows: user.info.hide_follows,
|
||||||
hide_favorites: user.info.hide_favorites,
|
hide_favorites: user.info.hide_favorites,
|
||||||
relationship: relationship,
|
relationship: relationship,
|
||||||
skip_thread_containment: user.info.skip_thread_containment
|
skip_thread_containment: user.info.skip_thread_containment,
|
||||||
|
background_image: image_url(user.info.background) |> MediaProxy.url()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|> maybe_put_role(user, opts[:for])
|
|> maybe_put_role(user, opts[:for])
|
||||||
|
@ -182,4 +183,7 @@ defp maybe_put_notification_settings(data, %User{id: user_id} = user, %User{id:
|
||||||
end
|
end
|
||||||
|
|
||||||
defp maybe_put_notification_settings(data, _, _), do: data
|
defp maybe_put_notification_settings(data, _, _), do: data
|
||||||
|
|
||||||
|
defp image_url(%{"url" => [%{"href" => href} | _]}), do: href
|
||||||
|
defp image_url(_), do: nil
|
||||||
end
|
end
|
||||||
|
|
|
@ -19,9 +19,18 @@ test "Represent a user account" do
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
background_image = %{
|
||||||
|
"url" => [%{"href" => "https://example.com/images/asuka_hospital.png"}]
|
||||||
|
}
|
||||||
|
|
||||||
user =
|
user =
|
||||||
insert(:user, %{
|
insert(:user, %{
|
||||||
info: %{note_count: 5, follower_count: 3, source_data: source_data},
|
info: %{
|
||||||
|
note_count: 5,
|
||||||
|
follower_count: 3,
|
||||||
|
source_data: source_data,
|
||||||
|
background: background_image
|
||||||
|
},
|
||||||
nickname: "shp@shitposter.club",
|
nickname: "shp@shitposter.club",
|
||||||
name: ":karjalanpiirakka: shp",
|
name: ":karjalanpiirakka: shp",
|
||||||
bio: "<script src=\"invalid-html\"></script><span>valid html</span>",
|
bio: "<script src=\"invalid-html\"></script><span>valid html</span>",
|
||||||
|
@ -60,6 +69,7 @@ test "Represent a user account" do
|
||||||
pleroma: %{}
|
pleroma: %{}
|
||||||
},
|
},
|
||||||
pleroma: %{
|
pleroma: %{
|
||||||
|
background_image: "https://example.com/images/asuka_hospital.png",
|
||||||
confirmation_pending: false,
|
confirmation_pending: false,
|
||||||
tags: [],
|
tags: [],
|
||||||
is_admin: false,
|
is_admin: false,
|
||||||
|
@ -126,6 +136,7 @@ test "Represent a Service(bot) account" do
|
||||||
pleroma: %{}
|
pleroma: %{}
|
||||||
},
|
},
|
||||||
pleroma: %{
|
pleroma: %{
|
||||||
|
background_image: nil,
|
||||||
confirmation_pending: false,
|
confirmation_pending: false,
|
||||||
tags: [],
|
tags: [],
|
||||||
is_admin: false,
|
is_admin: false,
|
||||||
|
@ -216,6 +227,7 @@ test "represent an embedded relationship" do
|
||||||
pleroma: %{}
|
pleroma: %{}
|
||||||
},
|
},
|
||||||
pleroma: %{
|
pleroma: %{
|
||||||
|
background_image: nil,
|
||||||
confirmation_pending: false,
|
confirmation_pending: false,
|
||||||
tags: [],
|
tags: [],
|
||||||
is_admin: false,
|
is_admin: false,
|
||||||
|
|
|
@ -0,0 +1,304 @@
|
||||||
|
# Pleroma: A lightweight social networking server
|
||||||
|
# Copyright © 2017-2019 Pleroma Authors <https://pleroma.social/>
|
||||||
|
# SPDX-License-Identifier: AGPL-3.0-only
|
||||||
|
|
||||||
|
defmodule Pleroma.Web.MastodonAPI.MastodonAPIController.UpdateCredentialsTest do
|
||||||
|
alias Pleroma.Repo
|
||||||
|
alias Pleroma.User
|
||||||
|
|
||||||
|
use Pleroma.Web.ConnCase
|
||||||
|
|
||||||
|
import Pleroma.Factory
|
||||||
|
|
||||||
|
describe "updating credentials" do
|
||||||
|
test "sets user settings in a generic way", %{conn: conn} do
|
||||||
|
user = insert(:user)
|
||||||
|
|
||||||
|
res_conn =
|
||||||
|
conn
|
||||||
|
|> assign(:user, user)
|
||||||
|
|> patch("/api/v1/accounts/update_credentials", %{
|
||||||
|
"pleroma_settings_store" => %{
|
||||||
|
pleroma_fe: %{
|
||||||
|
theme: "bla"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
assert user = json_response(res_conn, 200)
|
||||||
|
assert user["pleroma"]["settings_store"] == %{"pleroma_fe" => %{"theme" => "bla"}}
|
||||||
|
|
||||||
|
user = Repo.get(User, user["id"])
|
||||||
|
|
||||||
|
res_conn =
|
||||||
|
conn
|
||||||
|
|> assign(:user, user)
|
||||||
|
|> patch("/api/v1/accounts/update_credentials", %{
|
||||||
|
"pleroma_settings_store" => %{
|
||||||
|
masto_fe: %{
|
||||||
|
theme: "bla"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
assert user = json_response(res_conn, 200)
|
||||||
|
|
||||||
|
assert user["pleroma"]["settings_store"] ==
|
||||||
|
%{
|
||||||
|
"pleroma_fe" => %{"theme" => "bla"},
|
||||||
|
"masto_fe" => %{"theme" => "bla"}
|
||||||
|
}
|
||||||
|
|
||||||
|
user = Repo.get(User, user["id"])
|
||||||
|
|
||||||
|
res_conn =
|
||||||
|
conn
|
||||||
|
|> assign(:user, user)
|
||||||
|
|> patch("/api/v1/accounts/update_credentials", %{
|
||||||
|
"pleroma_settings_store" => %{
|
||||||
|
masto_fe: %{
|
||||||
|
theme: "blub"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
assert user = json_response(res_conn, 200)
|
||||||
|
|
||||||
|
assert user["pleroma"]["settings_store"] ==
|
||||||
|
%{
|
||||||
|
"pleroma_fe" => %{"theme" => "bla"},
|
||||||
|
"masto_fe" => %{"theme" => "blub"}
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
test "updates the user's bio", %{conn: conn} do
|
||||||
|
user = insert(:user)
|
||||||
|
user2 = insert(:user)
|
||||||
|
|
||||||
|
conn =
|
||||||
|
conn
|
||||||
|
|> assign(:user, user)
|
||||||
|
|> patch("/api/v1/accounts/update_credentials", %{
|
||||||
|
"note" => "I drink #cofe with @#{user2.nickname}"
|
||||||
|
})
|
||||||
|
|
||||||
|
assert user = json_response(conn, 200)
|
||||||
|
|
||||||
|
assert user["note"] ==
|
||||||
|
~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=") <>
|
||||||
|
user2.id <>
|
||||||
|
~s(" class="u-url mention" href=") <>
|
||||||
|
user2.ap_id <> ~s(">@<span>) <> user2.nickname <> ~s(</span></a></span>)
|
||||||
|
end
|
||||||
|
|
||||||
|
test "updates the user's locking status", %{conn: conn} do
|
||||||
|
user = insert(:user)
|
||||||
|
|
||||||
|
conn =
|
||||||
|
conn
|
||||||
|
|> assign(:user, user)
|
||||||
|
|> patch("/api/v1/accounts/update_credentials", %{locked: "true"})
|
||||||
|
|
||||||
|
assert user = json_response(conn, 200)
|
||||||
|
assert user["locked"] == true
|
||||||
|
end
|
||||||
|
|
||||||
|
test "updates the user's default scope", %{conn: conn} do
|
||||||
|
user = insert(:user)
|
||||||
|
|
||||||
|
conn =
|
||||||
|
conn
|
||||||
|
|> assign(:user, user)
|
||||||
|
|> patch("/api/v1/accounts/update_credentials", %{default_scope: "cofe"})
|
||||||
|
|
||||||
|
assert user = json_response(conn, 200)
|
||||||
|
assert user["source"]["privacy"] == "cofe"
|
||||||
|
end
|
||||||
|
|
||||||
|
test "updates the user's hide_followers status", %{conn: conn} do
|
||||||
|
user = insert(:user)
|
||||||
|
|
||||||
|
conn =
|
||||||
|
conn
|
||||||
|
|> assign(:user, user)
|
||||||
|
|> patch("/api/v1/accounts/update_credentials", %{hide_followers: "true"})
|
||||||
|
|
||||||
|
assert user = json_response(conn, 200)
|
||||||
|
assert user["pleroma"]["hide_followers"] == true
|
||||||
|
end
|
||||||
|
|
||||||
|
test "updates the user's skip_thread_containment option", %{conn: conn} do
|
||||||
|
user = insert(:user)
|
||||||
|
|
||||||
|
response =
|
||||||
|
conn
|
||||||
|
|> assign(:user, user)
|
||||||
|
|> patch("/api/v1/accounts/update_credentials", %{skip_thread_containment: "true"})
|
||||||
|
|> json_response(200)
|
||||||
|
|
||||||
|
assert response["pleroma"]["skip_thread_containment"] == true
|
||||||
|
assert refresh_record(user).info.skip_thread_containment
|
||||||
|
end
|
||||||
|
|
||||||
|
test "updates the user's hide_follows status", %{conn: conn} do
|
||||||
|
user = insert(:user)
|
||||||
|
|
||||||
|
conn =
|
||||||
|
conn
|
||||||
|
|> assign(:user, user)
|
||||||
|
|> patch("/api/v1/accounts/update_credentials", %{hide_follows: "true"})
|
||||||
|
|
||||||
|
assert user = json_response(conn, 200)
|
||||||
|
assert user["pleroma"]["hide_follows"] == true
|
||||||
|
end
|
||||||
|
|
||||||
|
test "updates the user's hide_favorites status", %{conn: conn} do
|
||||||
|
user = insert(:user)
|
||||||
|
|
||||||
|
conn =
|
||||||
|
conn
|
||||||
|
|> assign(:user, user)
|
||||||
|
|> patch("/api/v1/accounts/update_credentials", %{hide_favorites: "true"})
|
||||||
|
|
||||||
|
assert user = json_response(conn, 200)
|
||||||
|
assert user["pleroma"]["hide_favorites"] == true
|
||||||
|
end
|
||||||
|
|
||||||
|
test "updates the user's show_role status", %{conn: conn} do
|
||||||
|
user = insert(:user)
|
||||||
|
|
||||||
|
conn =
|
||||||
|
conn
|
||||||
|
|> assign(:user, user)
|
||||||
|
|> patch("/api/v1/accounts/update_credentials", %{show_role: "false"})
|
||||||
|
|
||||||
|
assert user = json_response(conn, 200)
|
||||||
|
assert user["source"]["pleroma"]["show_role"] == false
|
||||||
|
end
|
||||||
|
|
||||||
|
test "updates the user's no_rich_text status", %{conn: conn} do
|
||||||
|
user = insert(:user)
|
||||||
|
|
||||||
|
conn =
|
||||||
|
conn
|
||||||
|
|> assign(:user, user)
|
||||||
|
|> patch("/api/v1/accounts/update_credentials", %{no_rich_text: "true"})
|
||||||
|
|
||||||
|
assert user = json_response(conn, 200)
|
||||||
|
assert user["source"]["pleroma"]["no_rich_text"] == true
|
||||||
|
end
|
||||||
|
|
||||||
|
test "updates the user's name", %{conn: conn} do
|
||||||
|
user = insert(:user)
|
||||||
|
|
||||||
|
conn =
|
||||||
|
conn
|
||||||
|
|> assign(:user, user)
|
||||||
|
|> patch("/api/v1/accounts/update_credentials", %{"display_name" => "markorepairs"})
|
||||||
|
|
||||||
|
assert user = json_response(conn, 200)
|
||||||
|
assert user["display_name"] == "markorepairs"
|
||||||
|
end
|
||||||
|
|
||||||
|
test "updates the user's avatar", %{conn: conn} do
|
||||||
|
user = insert(:user)
|
||||||
|
|
||||||
|
new_avatar = %Plug.Upload{
|
||||||
|
content_type: "image/jpg",
|
||||||
|
path: Path.absname("test/fixtures/image.jpg"),
|
||||||
|
filename: "an_image.jpg"
|
||||||
|
}
|
||||||
|
|
||||||
|
conn =
|
||||||
|
conn
|
||||||
|
|> assign(:user, user)
|
||||||
|
|> patch("/api/v1/accounts/update_credentials", %{"avatar" => new_avatar})
|
||||||
|
|
||||||
|
assert user_response = json_response(conn, 200)
|
||||||
|
assert user_response["avatar"] != User.avatar_url(user)
|
||||||
|
end
|
||||||
|
|
||||||
|
test "updates the user's banner", %{conn: conn} do
|
||||||
|
user = insert(:user)
|
||||||
|
|
||||||
|
new_header = %Plug.Upload{
|
||||||
|
content_type: "image/jpg",
|
||||||
|
path: Path.absname("test/fixtures/image.jpg"),
|
||||||
|
filename: "an_image.jpg"
|
||||||
|
}
|
||||||
|
|
||||||
|
conn =
|
||||||
|
conn
|
||||||
|
|> assign(:user, user)
|
||||||
|
|> patch("/api/v1/accounts/update_credentials", %{"header" => new_header})
|
||||||
|
|
||||||
|
assert user_response = json_response(conn, 200)
|
||||||
|
assert user_response["header"] != User.banner_url(user)
|
||||||
|
end
|
||||||
|
|
||||||
|
test "updates the user's background", %{conn: conn} do
|
||||||
|
user = insert(:user)
|
||||||
|
|
||||||
|
new_header = %Plug.Upload{
|
||||||
|
content_type: "image/jpg",
|
||||||
|
path: Path.absname("test/fixtures/image.jpg"),
|
||||||
|
filename: "an_image.jpg"
|
||||||
|
}
|
||||||
|
|
||||||
|
conn =
|
||||||
|
conn
|
||||||
|
|> assign(:user, user)
|
||||||
|
|> patch("/api/v1/accounts/update_credentials", %{
|
||||||
|
"pleroma_background_image" => new_header
|
||||||
|
})
|
||||||
|
|
||||||
|
assert user_response = json_response(conn, 200)
|
||||||
|
assert user_response["pleroma"]["background_image"]
|
||||||
|
end
|
||||||
|
|
||||||
|
test "requires 'write' permission", %{conn: conn} do
|
||||||
|
token1 = insert(:oauth_token, scopes: ["read"])
|
||||||
|
token2 = insert(:oauth_token, scopes: ["write", "follow"])
|
||||||
|
|
||||||
|
for token <- [token1, token2] do
|
||||||
|
conn =
|
||||||
|
conn
|
||||||
|
|> put_req_header("authorization", "Bearer #{token.token}")
|
||||||
|
|> patch("/api/v1/accounts/update_credentials", %{})
|
||||||
|
|
||||||
|
if token == token1 do
|
||||||
|
assert %{"error" => "Insufficient permissions: write."} == json_response(conn, 403)
|
||||||
|
else
|
||||||
|
assert json_response(conn, 200)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
test "updates profile emojos", %{conn: conn} do
|
||||||
|
user = insert(:user)
|
||||||
|
|
||||||
|
note = "*sips :blank:*"
|
||||||
|
name = "I am :firefox:"
|
||||||
|
|
||||||
|
conn =
|
||||||
|
conn
|
||||||
|
|> assign(:user, user)
|
||||||
|
|> patch("/api/v1/accounts/update_credentials", %{
|
||||||
|
"note" => note,
|
||||||
|
"display_name" => name
|
||||||
|
})
|
||||||
|
|
||||||
|
assert json_response(conn, 200)
|
||||||
|
|
||||||
|
conn =
|
||||||
|
conn
|
||||||
|
|> get("/api/v1/accounts/#{user.id}")
|
||||||
|
|
||||||
|
assert user = json_response(conn, 200)
|
||||||
|
|
||||||
|
assert user["note"] == note
|
||||||
|
assert user["display_name"] == name
|
||||||
|
assert [%{"shortcode" => "blank"}, %{"shortcode" => "firefox"}] = user["emojis"]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -2374,278 +2374,6 @@ test "hides favorites for new users by default", %{conn: conn, current_user: cur
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "updating credentials" do
|
|
||||||
test "sets user settings in a generic way", %{conn: conn} do
|
|
||||||
user = insert(:user)
|
|
||||||
|
|
||||||
res_conn =
|
|
||||||
conn
|
|
||||||
|> assign(:user, user)
|
|
||||||
|> patch("/api/v1/accounts/update_credentials", %{
|
|
||||||
"pleroma_settings_store" => %{
|
|
||||||
pleroma_fe: %{
|
|
||||||
theme: "bla"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
assert user = json_response(res_conn, 200)
|
|
||||||
assert user["pleroma"]["settings_store"] == %{"pleroma_fe" => %{"theme" => "bla"}}
|
|
||||||
|
|
||||||
user = Repo.get(User, user["id"])
|
|
||||||
|
|
||||||
res_conn =
|
|
||||||
conn
|
|
||||||
|> assign(:user, user)
|
|
||||||
|> patch("/api/v1/accounts/update_credentials", %{
|
|
||||||
"pleroma_settings_store" => %{
|
|
||||||
masto_fe: %{
|
|
||||||
theme: "bla"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
assert user = json_response(res_conn, 200)
|
|
||||||
|
|
||||||
assert user["pleroma"]["settings_store"] ==
|
|
||||||
%{
|
|
||||||
"pleroma_fe" => %{"theme" => "bla"},
|
|
||||||
"masto_fe" => %{"theme" => "bla"}
|
|
||||||
}
|
|
||||||
|
|
||||||
user = Repo.get(User, user["id"])
|
|
||||||
|
|
||||||
res_conn =
|
|
||||||
conn
|
|
||||||
|> assign(:user, user)
|
|
||||||
|> patch("/api/v1/accounts/update_credentials", %{
|
|
||||||
"pleroma_settings_store" => %{
|
|
||||||
masto_fe: %{
|
|
||||||
theme: "blub"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
assert user = json_response(res_conn, 200)
|
|
||||||
|
|
||||||
assert user["pleroma"]["settings_store"] ==
|
|
||||||
%{
|
|
||||||
"pleroma_fe" => %{"theme" => "bla"},
|
|
||||||
"masto_fe" => %{"theme" => "blub"}
|
|
||||||
}
|
|
||||||
end
|
|
||||||
|
|
||||||
test "updates the user's bio", %{conn: conn} do
|
|
||||||
user = insert(:user)
|
|
||||||
user2 = insert(:user)
|
|
||||||
|
|
||||||
conn =
|
|
||||||
conn
|
|
||||||
|> assign(:user, user)
|
|
||||||
|> patch("/api/v1/accounts/update_credentials", %{
|
|
||||||
"note" => "I drink #cofe with @#{user2.nickname}"
|
|
||||||
})
|
|
||||||
|
|
||||||
assert user = json_response(conn, 200)
|
|
||||||
|
|
||||||
assert user["note"] ==
|
|
||||||
~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=") <>
|
|
||||||
user2.id <>
|
|
||||||
~s(" class="u-url mention" href=") <>
|
|
||||||
user2.ap_id <> ~s(">@<span>) <> user2.nickname <> ~s(</span></a></span>)
|
|
||||||
end
|
|
||||||
|
|
||||||
test "updates the user's locking status", %{conn: conn} do
|
|
||||||
user = insert(:user)
|
|
||||||
|
|
||||||
conn =
|
|
||||||
conn
|
|
||||||
|> assign(:user, user)
|
|
||||||
|> patch("/api/v1/accounts/update_credentials", %{locked: "true"})
|
|
||||||
|
|
||||||
assert user = json_response(conn, 200)
|
|
||||||
assert user["locked"] == true
|
|
||||||
end
|
|
||||||
|
|
||||||
test "updates the user's default scope", %{conn: conn} do
|
|
||||||
user = insert(:user)
|
|
||||||
|
|
||||||
conn =
|
|
||||||
conn
|
|
||||||
|> assign(:user, user)
|
|
||||||
|> patch("/api/v1/accounts/update_credentials", %{default_scope: "cofe"})
|
|
||||||
|
|
||||||
assert user = json_response(conn, 200)
|
|
||||||
assert user["source"]["privacy"] == "cofe"
|
|
||||||
end
|
|
||||||
|
|
||||||
test "updates the user's hide_followers status", %{conn: conn} do
|
|
||||||
user = insert(:user)
|
|
||||||
|
|
||||||
conn =
|
|
||||||
conn
|
|
||||||
|> assign(:user, user)
|
|
||||||
|> patch("/api/v1/accounts/update_credentials", %{hide_followers: "true"})
|
|
||||||
|
|
||||||
assert user = json_response(conn, 200)
|
|
||||||
assert user["pleroma"]["hide_followers"] == true
|
|
||||||
end
|
|
||||||
|
|
||||||
test "updates the user's skip_thread_containment option", %{conn: conn} do
|
|
||||||
user = insert(:user)
|
|
||||||
|
|
||||||
response =
|
|
||||||
conn
|
|
||||||
|> assign(:user, user)
|
|
||||||
|> patch("/api/v1/accounts/update_credentials", %{skip_thread_containment: "true"})
|
|
||||||
|> json_response(200)
|
|
||||||
|
|
||||||
assert response["pleroma"]["skip_thread_containment"] == true
|
|
||||||
assert refresh_record(user).info.skip_thread_containment
|
|
||||||
end
|
|
||||||
|
|
||||||
test "updates the user's hide_follows status", %{conn: conn} do
|
|
||||||
user = insert(:user)
|
|
||||||
|
|
||||||
conn =
|
|
||||||
conn
|
|
||||||
|> assign(:user, user)
|
|
||||||
|> patch("/api/v1/accounts/update_credentials", %{hide_follows: "true"})
|
|
||||||
|
|
||||||
assert user = json_response(conn, 200)
|
|
||||||
assert user["pleroma"]["hide_follows"] == true
|
|
||||||
end
|
|
||||||
|
|
||||||
test "updates the user's hide_favorites status", %{conn: conn} do
|
|
||||||
user = insert(:user)
|
|
||||||
|
|
||||||
conn =
|
|
||||||
conn
|
|
||||||
|> assign(:user, user)
|
|
||||||
|> patch("/api/v1/accounts/update_credentials", %{hide_favorites: "true"})
|
|
||||||
|
|
||||||
assert user = json_response(conn, 200)
|
|
||||||
assert user["pleroma"]["hide_favorites"] == true
|
|
||||||
end
|
|
||||||
|
|
||||||
test "updates the user's show_role status", %{conn: conn} do
|
|
||||||
user = insert(:user)
|
|
||||||
|
|
||||||
conn =
|
|
||||||
conn
|
|
||||||
|> assign(:user, user)
|
|
||||||
|> patch("/api/v1/accounts/update_credentials", %{show_role: "false"})
|
|
||||||
|
|
||||||
assert user = json_response(conn, 200)
|
|
||||||
assert user["source"]["pleroma"]["show_role"] == false
|
|
||||||
end
|
|
||||||
|
|
||||||
test "updates the user's no_rich_text status", %{conn: conn} do
|
|
||||||
user = insert(:user)
|
|
||||||
|
|
||||||
conn =
|
|
||||||
conn
|
|
||||||
|> assign(:user, user)
|
|
||||||
|> patch("/api/v1/accounts/update_credentials", %{no_rich_text: "true"})
|
|
||||||
|
|
||||||
assert user = json_response(conn, 200)
|
|
||||||
assert user["source"]["pleroma"]["no_rich_text"] == true
|
|
||||||
end
|
|
||||||
|
|
||||||
test "updates the user's name", %{conn: conn} do
|
|
||||||
user = insert(:user)
|
|
||||||
|
|
||||||
conn =
|
|
||||||
conn
|
|
||||||
|> assign(:user, user)
|
|
||||||
|> patch("/api/v1/accounts/update_credentials", %{"display_name" => "markorepairs"})
|
|
||||||
|
|
||||||
assert user = json_response(conn, 200)
|
|
||||||
assert user["display_name"] == "markorepairs"
|
|
||||||
end
|
|
||||||
|
|
||||||
test "updates the user's avatar", %{conn: conn} do
|
|
||||||
user = insert(:user)
|
|
||||||
|
|
||||||
new_avatar = %Plug.Upload{
|
|
||||||
content_type: "image/jpg",
|
|
||||||
path: Path.absname("test/fixtures/image.jpg"),
|
|
||||||
filename: "an_image.jpg"
|
|
||||||
}
|
|
||||||
|
|
||||||
conn =
|
|
||||||
conn
|
|
||||||
|> assign(:user, user)
|
|
||||||
|> patch("/api/v1/accounts/update_credentials", %{"avatar" => new_avatar})
|
|
||||||
|
|
||||||
assert user_response = json_response(conn, 200)
|
|
||||||
assert user_response["avatar"] != User.avatar_url(user)
|
|
||||||
end
|
|
||||||
|
|
||||||
test "updates the user's banner", %{conn: conn} do
|
|
||||||
user = insert(:user)
|
|
||||||
|
|
||||||
new_header = %Plug.Upload{
|
|
||||||
content_type: "image/jpg",
|
|
||||||
path: Path.absname("test/fixtures/image.jpg"),
|
|
||||||
filename: "an_image.jpg"
|
|
||||||
}
|
|
||||||
|
|
||||||
conn =
|
|
||||||
conn
|
|
||||||
|> assign(:user, user)
|
|
||||||
|> patch("/api/v1/accounts/update_credentials", %{"header" => new_header})
|
|
||||||
|
|
||||||
assert user_response = json_response(conn, 200)
|
|
||||||
assert user_response["header"] != User.banner_url(user)
|
|
||||||
end
|
|
||||||
|
|
||||||
test "requires 'write' permission", %{conn: conn} do
|
|
||||||
token1 = insert(:oauth_token, scopes: ["read"])
|
|
||||||
token2 = insert(:oauth_token, scopes: ["write", "follow"])
|
|
||||||
|
|
||||||
for token <- [token1, token2] do
|
|
||||||
conn =
|
|
||||||
conn
|
|
||||||
|> put_req_header("authorization", "Bearer #{token.token}")
|
|
||||||
|> patch("/api/v1/accounts/update_credentials", %{})
|
|
||||||
|
|
||||||
if token == token1 do
|
|
||||||
assert %{"error" => "Insufficient permissions: write."} == json_response(conn, 403)
|
|
||||||
else
|
|
||||||
assert json_response(conn, 200)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
test "updates profile emojos", %{conn: conn} do
|
|
||||||
user = insert(:user)
|
|
||||||
|
|
||||||
note = "*sips :blank:*"
|
|
||||||
name = "I am :firefox:"
|
|
||||||
|
|
||||||
conn =
|
|
||||||
conn
|
|
||||||
|> assign(:user, user)
|
|
||||||
|> patch("/api/v1/accounts/update_credentials", %{
|
|
||||||
"note" => note,
|
|
||||||
"display_name" => name
|
|
||||||
})
|
|
||||||
|
|
||||||
assert json_response(conn, 200)
|
|
||||||
|
|
||||||
conn =
|
|
||||||
conn
|
|
||||||
|> get("/api/v1/accounts/#{user.id}")
|
|
||||||
|
|
||||||
assert user = json_response(conn, 200)
|
|
||||||
|
|
||||||
assert user["note"] == note
|
|
||||||
assert user["display_name"] == name
|
|
||||||
assert [%{"shortcode" => "blank"}, %{"shortcode" => "firefox"}] = user["emojis"]
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
test "get instance information", %{conn: conn} do
|
test "get instance information", %{conn: conn} do
|
||||||
conn = get(conn, "/api/v1/instance")
|
conn = get(conn, "/api/v1/instance")
|
||||||
assert result = json_response(conn, 200)
|
assert result = json_response(conn, 200)
|
||||||
|
|
Loading…
Reference in a new issue