forked from AkkomaGang/akkoma
Add spec for AccountController.followers
This commit is contained in:
parent
03124c96cc
commit
bd6e2b300f
4 changed files with 42 additions and 2 deletions
|
@ -11,6 +11,7 @@ defmodule Pleroma.Web.ApiSpec.AccountOperation do
|
|||
alias Pleroma.Web.ApiSpec.Schemas.AccountCreateRequest
|
||||
alias Pleroma.Web.ApiSpec.Schemas.AccountCreateResponse
|
||||
alias Pleroma.Web.ApiSpec.Schemas.AccountRelationshipsResponse
|
||||
alias Pleroma.Web.ApiSpec.Schemas.AccountsResponse
|
||||
alias Pleroma.Web.ApiSpec.Schemas.AccountUpdateCredentialsRequest
|
||||
alias Pleroma.Web.ApiSpec.Schemas.BooleanLike
|
||||
alias Pleroma.Web.ApiSpec.Schemas.StatusesResponse
|
||||
|
@ -139,7 +140,23 @@ def statuses_operation do
|
|||
end
|
||||
|
||||
def followers_operation do
|
||||
:ok
|
||||
%Operation{
|
||||
tags: ["accounts"],
|
||||
summary: "Followers",
|
||||
operationId: "AccountController.followers",
|
||||
security: [%{"oAuth" => ["read:accounts"]}],
|
||||
description:
|
||||
"Accounts which follow the given account, if network is not hidden by the account owner.",
|
||||
parameters: [
|
||||
%Reference{"$ref": "#/components/parameters/accountIdOrNickname"},
|
||||
Operation.parameter(:max_id, :query, :string, "Max ID"),
|
||||
Operation.parameter(:since_id, :query, :string, "Since ID"),
|
||||
Operation.parameter(:limit, :query, :integer, "Limit")
|
||||
],
|
||||
responses: %{
|
||||
200 => Operation.response("Accounts", "application/json", AccountsResponse)
|
||||
}
|
||||
}
|
||||
end
|
||||
|
||||
def following_operation, do: :ok
|
||||
|
|
13
lib/pleroma/web/api_spec/schemas/accounts_response.ex
Normal file
13
lib/pleroma/web/api_spec/schemas/accounts_response.ex
Normal file
|
@ -0,0 +1,13 @@
|
|||
# Pleroma: A lightweight social networking server
|
||||
# Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>
|
||||
# SPDX-License-Identifier: AGPL-3.0-only
|
||||
|
||||
defmodule Pleroma.Web.ApiSpec.Schemas.AccountsResponse do
|
||||
require OpenApiSpex
|
||||
|
||||
OpenApiSpex.schema(%{
|
||||
title: "AccountsResponse",
|
||||
type: :array,
|
||||
items: Pleroma.Web.ApiSpec.Schemas.Account
|
||||
})
|
||||
end
|
|
@ -89,7 +89,8 @@ defmodule Pleroma.Web.MastodonAPI.AccountController do
|
|||
:update_credentials,
|
||||
:relationships,
|
||||
:show,
|
||||
:statuses
|
||||
:statuses,
|
||||
:followers
|
||||
]
|
||||
)
|
||||
|
||||
|
@ -284,6 +285,11 @@ def statuses(%{assigns: %{user: reading_user}} = conn, params) do
|
|||
|
||||
@doc "GET /api/v1/accounts/:id/followers"
|
||||
def followers(%{assigns: %{user: for_user, account: user}} = conn, params) do
|
||||
params =
|
||||
params
|
||||
|> Enum.map(fn {key, value} -> {to_string(key), value} end)
|
||||
|> Enum.into(%{})
|
||||
|
||||
followers =
|
||||
cond do
|
||||
for_user && user.id == for_user.id -> MastodonAPI.get_followers(user, params)
|
||||
|
|
|
@ -513,6 +513,7 @@ test "getting followers", %{user: user, conn: conn} do
|
|||
|
||||
assert [%{"id" => id}] = json_response(conn, 200)
|
||||
assert id == to_string(user.id)
|
||||
assert_schema(json_response(conn, 200), "AccountsResponse", ApiSpec.spec())
|
||||
end
|
||||
|
||||
test "getting followers, hide_followers", %{user: user, conn: conn} do
|
||||
|
@ -536,6 +537,7 @@ test "getting followers, hide_followers, same user requesting" do
|
|||
|> get("/api/v1/accounts/#{other_user.id}/followers")
|
||||
|
||||
refute [] == json_response(conn, 200)
|
||||
assert_schema(json_response(conn, 200), "AccountsResponse", ApiSpec.spec())
|
||||
end
|
||||
|
||||
test "getting followers, pagination", %{user: user, conn: conn} do
|
||||
|
@ -551,6 +553,7 @@ test "getting followers, pagination", %{user: user, conn: conn} do
|
|||
assert [%{"id" => id3}, %{"id" => id2}] = json_response(res_conn, 200)
|
||||
assert id3 == follower3.id
|
||||
assert id2 == follower2.id
|
||||
assert_schema(json_response(res_conn, 200), "AccountsResponse", ApiSpec.spec())
|
||||
|
||||
res_conn = get(conn, "/api/v1/accounts/#{user.id}/followers?max_id=#{follower3.id}")
|
||||
|
||||
|
@ -566,6 +569,7 @@ test "getting followers, pagination", %{user: user, conn: conn} do
|
|||
assert [link_header] = get_resp_header(res_conn, "link")
|
||||
assert link_header =~ ~r/min_id=#{follower2.id}/
|
||||
assert link_header =~ ~r/max_id=#{follower2.id}/
|
||||
assert_schema(json_response(res_conn, 200), "AccountsResponse", ApiSpec.spec())
|
||||
end
|
||||
end
|
||||
|
||||
|
|
Loading…
Reference in a new issue