pagination for remote emoji packs
This commit is contained in:
parent
9b6d89ff8c
commit
dbbc801667
4 changed files with 25 additions and 10 deletions
|
@ -198,13 +198,13 @@ def import_from_filesystem do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@spec list_remote(String.t()) :: {:ok, map()} | {:error, atom()}
|
@spec list_remote(keyword()) :: {:ok, map()} | {:error, atom()}
|
||||||
def list_remote(url) do
|
def list_remote(opts) do
|
||||||
uri = url |> String.trim() |> URI.parse()
|
uri = opts[:url] |> String.trim() |> URI.parse()
|
||||||
|
|
||||||
with :ok <- validate_shareable_packs_available(uri) do
|
with :ok <- validate_shareable_packs_available(uri) do
|
||||||
uri
|
uri
|
||||||
|> URI.merge("/api/pleroma/emoji/packs")
|
|> URI.merge("/api/pleroma/emoji/packs?page=#{opts[:page]}&page_size=#{opts[:page_size]}")
|
||||||
|> http_get()
|
|> http_get()
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -19,7 +19,21 @@ def remote_operation do
|
||||||
tags: ["Emoji Packs"],
|
tags: ["Emoji Packs"],
|
||||||
summary: "Make request to another instance for emoji packs list",
|
summary: "Make request to another instance for emoji packs list",
|
||||||
security: [%{"oAuth" => ["write"]}],
|
security: [%{"oAuth" => ["write"]}],
|
||||||
parameters: [url_param()],
|
parameters: [
|
||||||
|
url_param(),
|
||||||
|
Operation.parameter(
|
||||||
|
:page,
|
||||||
|
:query,
|
||||||
|
%Schema{type: :integer, default: 1},
|
||||||
|
"Page"
|
||||||
|
),
|
||||||
|
Operation.parameter(
|
||||||
|
:page_size,
|
||||||
|
:query,
|
||||||
|
%Schema{type: :integer, default: 30},
|
||||||
|
"Number of emoji to return"
|
||||||
|
)
|
||||||
|
],
|
||||||
operationId: "PleromaAPI.EmojiPackController.remote",
|
operationId: "PleromaAPI.EmojiPackController.remote",
|
||||||
responses: %{
|
responses: %{
|
||||||
200 => emoji_packs_response(),
|
200 => emoji_packs_response(),
|
||||||
|
|
|
@ -23,8 +23,9 @@ defmodule Pleroma.Web.PleromaAPI.EmojiPackController do
|
||||||
|
|
||||||
defdelegate open_api_operation(action), to: Pleroma.Web.ApiSpec.PleromaEmojiPackOperation
|
defdelegate open_api_operation(action), to: Pleroma.Web.ApiSpec.PleromaEmojiPackOperation
|
||||||
|
|
||||||
def remote(conn, %{url: url}) do
|
def remote(conn, params) do
|
||||||
with {:ok, packs} <- Pack.list_remote(url) do
|
with {:ok, packs} <-
|
||||||
|
Pack.list_remote(url: params.url, page_size: params.page_size, page: params.page) do
|
||||||
json(conn, packs)
|
json(conn, packs)
|
||||||
else
|
else
|
||||||
{:error, :not_shareable} ->
|
{:error, :not_shareable} ->
|
||||||
|
|
|
@ -102,7 +102,7 @@ test "GET /api/pleroma/emoji/packs", %{conn: conn} do
|
||||||
test "shareable instance", %{admin_conn: admin_conn, conn: conn} do
|
test "shareable instance", %{admin_conn: admin_conn, conn: conn} do
|
||||||
resp =
|
resp =
|
||||||
conn
|
conn
|
||||||
|> get("/api/pleroma/emoji/packs")
|
|> get("/api/pleroma/emoji/packs?page=2&page_size=1")
|
||||||
|> json_response_and_validate_schema(200)
|
|> json_response_and_validate_schema(200)
|
||||||
|
|
||||||
mock(fn
|
mock(fn
|
||||||
|
@ -112,12 +112,12 @@ test "shareable instance", %{admin_conn: admin_conn, conn: conn} do
|
||||||
%{method: :get, url: "https://example.com/nodeinfo/2.1.json"} ->
|
%{method: :get, url: "https://example.com/nodeinfo/2.1.json"} ->
|
||||||
json(%{metadata: %{features: ["shareable_emoji_packs"]}})
|
json(%{metadata: %{features: ["shareable_emoji_packs"]}})
|
||||||
|
|
||||||
%{method: :get, url: "https://example.com/api/pleroma/emoji/packs"} ->
|
%{method: :get, url: "https://example.com/api/pleroma/emoji/packs?page=2&page_size=1"} ->
|
||||||
json(resp)
|
json(resp)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
assert admin_conn
|
assert admin_conn
|
||||||
|> get("/api/pleroma/emoji/packs/remote?url=https://example.com")
|
|> get("/api/pleroma/emoji/packs/remote?url=https://example.com&page=2&page_size=1")
|
||||||
|> json_response_and_validate_schema(200) == resp
|
|> json_response_and_validate_schema(200) == resp
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue