forked from AkkomaGang/akkoma
Add OpenAPI spec for FollowRequestController
This commit is contained in:
parent
33f2976020
commit
ec1e4b4f1a
3 changed files with 72 additions and 4 deletions
|
@ -0,0 +1,65 @@
|
||||||
|
# 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.FollowRequestOperation do
|
||||||
|
alias OpenApiSpex.Operation
|
||||||
|
alias OpenApiSpex.Schema
|
||||||
|
alias Pleroma.Web.ApiSpec.Schemas.Account
|
||||||
|
alias Pleroma.Web.ApiSpec.Schemas.AccountRelationship
|
||||||
|
|
||||||
|
def open_api_operation(action) do
|
||||||
|
operation = String.to_existing_atom("#{action}_operation")
|
||||||
|
apply(__MODULE__, operation, [])
|
||||||
|
end
|
||||||
|
|
||||||
|
def index_operation do
|
||||||
|
%Operation{
|
||||||
|
tags: ["Follow Requests"],
|
||||||
|
summary: "Pending Follows",
|
||||||
|
security: [%{"oAuth" => ["read:follows", "follow"]}],
|
||||||
|
operationId: "FollowRequestController.index",
|
||||||
|
responses: %{
|
||||||
|
200 =>
|
||||||
|
Operation.response("Array of Account", "application/json", %Schema{
|
||||||
|
type: :array,
|
||||||
|
items: Account,
|
||||||
|
example: [Account.schema().example]
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
def authorize_operation do
|
||||||
|
%Operation{
|
||||||
|
tags: ["Follow Requests"],
|
||||||
|
summary: "Accept Follow",
|
||||||
|
operationId: "FollowRequestController.authorize",
|
||||||
|
parameters: [id_param()],
|
||||||
|
security: [%{"oAuth" => ["follow", "write:follows"]}],
|
||||||
|
responses: %{
|
||||||
|
200 => Operation.response("Relationship", "application/json", AccountRelationship)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
def reject_operation do
|
||||||
|
%Operation{
|
||||||
|
tags: ["Follow Requests"],
|
||||||
|
summary: "Reject Follow",
|
||||||
|
operationId: "FollowRequestController.reject",
|
||||||
|
parameters: [id_param()],
|
||||||
|
security: [%{"oAuth" => ["follow", "write:follows"]}],
|
||||||
|
responses: %{
|
||||||
|
200 => Operation.response("Relationship", "application/json", AccountRelationship)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
defp id_param do
|
||||||
|
Operation.parameter(:id, :path, :string, "Conversation ID",
|
||||||
|
example: "123",
|
||||||
|
required: true
|
||||||
|
)
|
||||||
|
end
|
||||||
|
end
|
|
@ -10,6 +10,7 @@ defmodule Pleroma.Web.MastodonAPI.FollowRequestController do
|
||||||
alias Pleroma.Web.CommonAPI
|
alias Pleroma.Web.CommonAPI
|
||||||
|
|
||||||
plug(:put_view, Pleroma.Web.MastodonAPI.AccountView)
|
plug(:put_view, Pleroma.Web.MastodonAPI.AccountView)
|
||||||
|
plug(Pleroma.Web.ApiSpec.CastAndValidate)
|
||||||
plug(:assign_follower when action != :index)
|
plug(:assign_follower when action != :index)
|
||||||
|
|
||||||
action_fallback(:errors)
|
action_fallback(:errors)
|
||||||
|
@ -21,6 +22,8 @@ defmodule Pleroma.Web.MastodonAPI.FollowRequestController do
|
||||||
%{scopes: ["follow", "write:follows"]} when action != :index
|
%{scopes: ["follow", "write:follows"]} when action != :index
|
||||||
)
|
)
|
||||||
|
|
||||||
|
defdelegate open_api_operation(action), to: Pleroma.Web.ApiSpec.FollowRequestOperation
|
||||||
|
|
||||||
@doc "GET /api/v1/follow_requests"
|
@doc "GET /api/v1/follow_requests"
|
||||||
def index(%{assigns: %{user: followed}} = conn, _params) do
|
def index(%{assigns: %{user: followed}} = conn, _params) do
|
||||||
follow_requests = User.get_follow_requests(followed)
|
follow_requests = User.get_follow_requests(followed)
|
||||||
|
@ -42,7 +45,7 @@ def reject(%{assigns: %{user: followed, follower: follower}} = conn, _params) do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
defp assign_follower(%{params: %{"id" => id}} = conn, _) do
|
defp assign_follower(%{params: %{id: id}} = conn, _) do
|
||||||
case User.get_cached_by_id(id) do
|
case User.get_cached_by_id(id) do
|
||||||
%User{} = follower -> assign(conn, :follower, follower)
|
%User{} = follower -> assign(conn, :follower, follower)
|
||||||
nil -> Pleroma.Web.MastodonAPI.FallbackController.call(conn, {:error, :not_found}) |> halt()
|
nil -> Pleroma.Web.MastodonAPI.FallbackController.call(conn, {:error, :not_found}) |> halt()
|
||||||
|
|
|
@ -27,7 +27,7 @@ test "/api/v1/follow_requests works", %{user: user, conn: conn} do
|
||||||
|
|
||||||
conn = get(conn, "/api/v1/follow_requests")
|
conn = get(conn, "/api/v1/follow_requests")
|
||||||
|
|
||||||
assert [relationship] = json_response(conn, 200)
|
assert [relationship] = json_response_and_validate_schema(conn, 200)
|
||||||
assert to_string(other_user.id) == relationship["id"]
|
assert to_string(other_user.id) == relationship["id"]
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -44,7 +44,7 @@ test "/api/v1/follow_requests/:id/authorize works", %{user: user, conn: conn} do
|
||||||
|
|
||||||
conn = post(conn, "/api/v1/follow_requests/#{other_user.id}/authorize")
|
conn = post(conn, "/api/v1/follow_requests/#{other_user.id}/authorize")
|
||||||
|
|
||||||
assert relationship = json_response(conn, 200)
|
assert relationship = json_response_and_validate_schema(conn, 200)
|
||||||
assert to_string(other_user.id) == relationship["id"]
|
assert to_string(other_user.id) == relationship["id"]
|
||||||
|
|
||||||
user = User.get_cached_by_id(user.id)
|
user = User.get_cached_by_id(user.id)
|
||||||
|
@ -62,7 +62,7 @@ test "/api/v1/follow_requests/:id/reject works", %{user: user, conn: conn} do
|
||||||
|
|
||||||
conn = post(conn, "/api/v1/follow_requests/#{other_user.id}/reject")
|
conn = post(conn, "/api/v1/follow_requests/#{other_user.id}/reject")
|
||||||
|
|
||||||
assert relationship = json_response(conn, 200)
|
assert relationship = json_response_and_validate_schema(conn, 200)
|
||||||
assert to_string(other_user.id) == relationship["id"]
|
assert to_string(other_user.id) == relationship["id"]
|
||||||
|
|
||||||
user = User.get_cached_by_id(user.id)
|
user = User.get_cached_by_id(user.id)
|
||||||
|
|
Loading…
Reference in a new issue