Add spec for AccountController.verify_credentials
This commit is contained in:
parent
b08ded6c2f
commit
f80116125f
8 changed files with 262 additions and 9 deletions
|
@ -31,7 +31,7 @@ def spec do
|
||||||
password: %OpenApiSpex.OAuthFlow{
|
password: %OpenApiSpex.OAuthFlow{
|
||||||
authorizationUrl: "/oauth/authorize",
|
authorizationUrl: "/oauth/authorize",
|
||||||
tokenUrl: "/oauth/token",
|
tokenUrl: "/oauth/token",
|
||||||
scopes: %{"read" => "read"}
|
scopes: %{"read" => "read", "write" => "write"}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,9 +4,10 @@
|
||||||
|
|
||||||
defmodule Pleroma.Web.ApiSpec.AccountOperation do
|
defmodule Pleroma.Web.ApiSpec.AccountOperation do
|
||||||
alias OpenApiSpex.Operation
|
alias OpenApiSpex.Operation
|
||||||
|
alias Pleroma.Web.ApiSpec.Helpers
|
||||||
|
alias Pleroma.Web.ApiSpec.Schemas.Account
|
||||||
alias Pleroma.Web.ApiSpec.Schemas.AccountCreateRequest
|
alias Pleroma.Web.ApiSpec.Schemas.AccountCreateRequest
|
||||||
alias Pleroma.Web.ApiSpec.Schemas.AccountCreateResponse
|
alias Pleroma.Web.ApiSpec.Schemas.AccountCreateResponse
|
||||||
alias Pleroma.Web.ApiSpec.Helpers
|
|
||||||
|
|
||||||
@spec open_api_operation(atom) :: Operation.t()
|
@spec open_api_operation(atom) :: Operation.t()
|
||||||
def open_api_operation(action) do
|
def open_api_operation(action) do
|
||||||
|
@ -30,7 +31,16 @@ def create_operation do
|
||||||
end
|
end
|
||||||
|
|
||||||
def verify_credentials_operation do
|
def verify_credentials_operation do
|
||||||
:ok
|
%Operation{
|
||||||
|
tags: ["accounts"],
|
||||||
|
description: "Test to make sure that the user token works.",
|
||||||
|
summary: "Verify account credentials",
|
||||||
|
operationId: "AccountController.verify_credentials",
|
||||||
|
security: [%{"oAuth" => ["read:accounts"]}],
|
||||||
|
responses: %{
|
||||||
|
200 => Operation.response("Account", "application/json", Account)
|
||||||
|
}
|
||||||
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
def update_credentials_operation do
|
def update_credentials_operation do
|
||||||
|
|
|
@ -51,11 +51,7 @@ def verify_credentials_operation do
|
||||||
summary: "Verify your app works",
|
summary: "Verify your app works",
|
||||||
description: "Confirm that the app's OAuth2 credentials work.",
|
description: "Confirm that the app's OAuth2 credentials work.",
|
||||||
operationId: "AppController.verify_credentials",
|
operationId: "AppController.verify_credentials",
|
||||||
security: [
|
security: [%{"oAuth" => ["read"]}],
|
||||||
%{
|
|
||||||
"oAuth" => ["read"]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
responses: %{
|
responses: %{
|
||||||
200 =>
|
200 =>
|
||||||
Operation.response("App", "application/json", %Schema{
|
Operation.response("App", "application/json", %Schema{
|
||||||
|
|
|
@ -5,8 +5,8 @@
|
||||||
defmodule Pleroma.Web.ApiSpec.RenderError do
|
defmodule Pleroma.Web.ApiSpec.RenderError do
|
||||||
@behaviour Plug
|
@behaviour Plug
|
||||||
|
|
||||||
alias Plug.Conn
|
|
||||||
alias OpenApiSpex.Plug.JsonRenderError
|
alias OpenApiSpex.Plug.JsonRenderError
|
||||||
|
alias Plug.Conn
|
||||||
|
|
||||||
@impl Plug
|
@impl Plug
|
||||||
def init(opts), do: opts
|
def init(opts), do: opts
|
||||||
|
|
181
lib/pleroma/web/api_spec/schemas/account.ex
Normal file
181
lib/pleroma/web/api_spec/schemas/account.ex
Normal file
|
@ -0,0 +1,181 @@
|
||||||
|
# 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.Account do
|
||||||
|
alias OpenApiSpex.Schema
|
||||||
|
alias Pleroma.Web.ApiSpec.Schemas.AccountEmoji
|
||||||
|
alias Pleroma.Web.ApiSpec.Schemas.AccountField
|
||||||
|
|
||||||
|
require OpenApiSpex
|
||||||
|
|
||||||
|
OpenApiSpex.schema(%{
|
||||||
|
title: "Account",
|
||||||
|
description: "Response schema for an account",
|
||||||
|
type: :object,
|
||||||
|
properties: %{
|
||||||
|
acct: %Schema{type: :string},
|
||||||
|
avatar_static: %Schema{type: :string},
|
||||||
|
avatar: %Schema{type: :string},
|
||||||
|
bot: %Schema{type: :boolean},
|
||||||
|
created_at: %Schema{type: :string, format: "date-time"},
|
||||||
|
display_name: %Schema{type: :string},
|
||||||
|
emojis: %Schema{type: :array, items: AccountEmoji},
|
||||||
|
fields: %Schema{type: :array, items: AccountField},
|
||||||
|
follow_requests_count: %Schema{type: :integer},
|
||||||
|
followers_count: %Schema{type: :integer},
|
||||||
|
following_count: %Schema{type: :integer},
|
||||||
|
header_static: %Schema{type: :string},
|
||||||
|
header: %Schema{type: :string},
|
||||||
|
id: %Schema{type: :string},
|
||||||
|
locked: %Schema{type: :boolean},
|
||||||
|
note: %Schema{type: :string},
|
||||||
|
statuses_count: %Schema{type: :integer},
|
||||||
|
url: %Schema{type: :string},
|
||||||
|
username: %Schema{type: :string},
|
||||||
|
pleroma: %Schema{
|
||||||
|
type: :object,
|
||||||
|
properties: %{
|
||||||
|
allow_following_move: %Schema{type: :boolean},
|
||||||
|
background_image: %Schema{type: :boolean, nullable: true},
|
||||||
|
chat_token: %Schema{type: :string},
|
||||||
|
confirmation_pending: %Schema{type: :boolean},
|
||||||
|
hide_favorites: %Schema{type: :boolean},
|
||||||
|
hide_followers_count: %Schema{type: :boolean},
|
||||||
|
hide_followers: %Schema{type: :boolean},
|
||||||
|
hide_follows_count: %Schema{type: :boolean},
|
||||||
|
hide_follows: %Schema{type: :boolean},
|
||||||
|
is_admin: %Schema{type: :boolean},
|
||||||
|
is_moderator: %Schema{type: :boolean},
|
||||||
|
skip_thread_containment: %Schema{type: :boolean},
|
||||||
|
tags: %Schema{type: :array, items: %Schema{type: :string}},
|
||||||
|
unread_conversation_count: %Schema{type: :integer},
|
||||||
|
notification_settings: %Schema{
|
||||||
|
type: :object,
|
||||||
|
properties: %{
|
||||||
|
followers: %Schema{type: :boolean},
|
||||||
|
follows: %Schema{type: :boolean},
|
||||||
|
non_followers: %Schema{type: :boolean},
|
||||||
|
non_follows: %Schema{type: :boolean},
|
||||||
|
privacy_option: %Schema{type: :boolean}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
relationship: %Schema{
|
||||||
|
type: :object,
|
||||||
|
properties: %{
|
||||||
|
blocked_by: %Schema{type: :boolean},
|
||||||
|
blocking: %Schema{type: :boolean},
|
||||||
|
domain_blocking: %Schema{type: :boolean},
|
||||||
|
endorsed: %Schema{type: :boolean},
|
||||||
|
followed_by: %Schema{type: :boolean},
|
||||||
|
following: %Schema{type: :boolean},
|
||||||
|
id: %Schema{type: :string},
|
||||||
|
muting: %Schema{type: :boolean},
|
||||||
|
muting_notifications: %Schema{type: :boolean},
|
||||||
|
requested: %Schema{type: :boolean},
|
||||||
|
showing_reblogs: %Schema{type: :boolean},
|
||||||
|
subscribing: %Schema{type: :boolean}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
settings_store: %Schema{
|
||||||
|
type: :object
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
source: %Schema{
|
||||||
|
type: :object,
|
||||||
|
properties: %{
|
||||||
|
fields: %Schema{type: :array, items: AccountField},
|
||||||
|
note: %Schema{type: :string},
|
||||||
|
privacy: %Schema{type: :string},
|
||||||
|
sensitive: %Schema{type: :boolean},
|
||||||
|
pleroma: %Schema{
|
||||||
|
type: :object,
|
||||||
|
properties: %{
|
||||||
|
actor_type: %Schema{type: :string},
|
||||||
|
discoverable: %Schema{type: :boolean},
|
||||||
|
no_rich_text: %Schema{type: :boolean},
|
||||||
|
show_role: %Schema{type: :boolean}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
example: %{
|
||||||
|
"JSON" => %{
|
||||||
|
"acct" => "foobar",
|
||||||
|
"avatar" => "https://mypleroma.com/images/avi.png",
|
||||||
|
"avatar_static" => "https://mypleroma.com/images/avi.png",
|
||||||
|
"bot" => false,
|
||||||
|
"created_at" => "2020-03-24T13:05:58.000Z",
|
||||||
|
"display_name" => "foobar",
|
||||||
|
"emojis" => [],
|
||||||
|
"fields" => [],
|
||||||
|
"follow_requests_count" => 0,
|
||||||
|
"followers_count" => 0,
|
||||||
|
"following_count" => 1,
|
||||||
|
"header" => "https://mypleroma.com/images/banner.png",
|
||||||
|
"header_static" => "https://mypleroma.com/images/banner.png",
|
||||||
|
"id" => "9tKi3esbG7OQgZ2920",
|
||||||
|
"locked" => false,
|
||||||
|
"note" => "cofe",
|
||||||
|
"pleroma" => %{
|
||||||
|
"allow_following_move" => true,
|
||||||
|
"background_image" => nil,
|
||||||
|
"confirmation_pending" => true,
|
||||||
|
"hide_favorites" => true,
|
||||||
|
"hide_followers" => false,
|
||||||
|
"hide_followers_count" => false,
|
||||||
|
"hide_follows" => false,
|
||||||
|
"hide_follows_count" => false,
|
||||||
|
"is_admin" => false,
|
||||||
|
"is_moderator" => false,
|
||||||
|
"skip_thread_containment" => false,
|
||||||
|
"chat_token" =>
|
||||||
|
"SFMyNTY.g3QAAAACZAAEZGF0YW0AAAASOXRLaTNlc2JHN09RZ1oyOTIwZAAGc2lnbmVkbgYARNplS3EB.Mb_Iaqew2bN1I1o79B_iP7encmVCpTKC4OtHZRxdjKc",
|
||||||
|
"unread_conversation_count" => 0,
|
||||||
|
"tags" => [],
|
||||||
|
"notification_settings" => %{
|
||||||
|
"followers" => true,
|
||||||
|
"follows" => true,
|
||||||
|
"non_followers" => true,
|
||||||
|
"non_follows" => true,
|
||||||
|
"privacy_option" => false
|
||||||
|
},
|
||||||
|
"relationship" => %{
|
||||||
|
"blocked_by" => false,
|
||||||
|
"blocking" => false,
|
||||||
|
"domain_blocking" => false,
|
||||||
|
"endorsed" => false,
|
||||||
|
"followed_by" => false,
|
||||||
|
"following" => false,
|
||||||
|
"id" => "9tKi3esbG7OQgZ2920",
|
||||||
|
"muting" => false,
|
||||||
|
"muting_notifications" => false,
|
||||||
|
"requested" => false,
|
||||||
|
"showing_reblogs" => true,
|
||||||
|
"subscribing" => false
|
||||||
|
},
|
||||||
|
"settings_store" => %{
|
||||||
|
"pleroma-fe" => %{}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"source" => %{
|
||||||
|
"fields" => [],
|
||||||
|
"note" => "foobar",
|
||||||
|
"pleroma" => %{
|
||||||
|
"actor_type" => "Person",
|
||||||
|
"discoverable" => false,
|
||||||
|
"no_rich_text" => false,
|
||||||
|
"show_role" => true
|
||||||
|
},
|
||||||
|
"privacy" => "public",
|
||||||
|
"sensitive" => false
|
||||||
|
},
|
||||||
|
"statuses_count" => 0,
|
||||||
|
"url" => "https://mypleroma.com/users/foobar",
|
||||||
|
"username" => "foobar"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
end
|
31
lib/pleroma/web/api_spec/schemas/account_emoji.ex
Normal file
31
lib/pleroma/web/api_spec/schemas/account_emoji.ex
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
# 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.AccountEmoji do
|
||||||
|
alias OpenApiSpex.Schema
|
||||||
|
|
||||||
|
require OpenApiSpex
|
||||||
|
|
||||||
|
OpenApiSpex.schema(%{
|
||||||
|
title: "AccountEmoji",
|
||||||
|
description: "Response schema for account custom fields",
|
||||||
|
type: :object,
|
||||||
|
properties: %{
|
||||||
|
shortcode: %Schema{type: :string},
|
||||||
|
url: %Schema{type: :string},
|
||||||
|
static_url: %Schema{type: :string},
|
||||||
|
visible_in_picker: %Schema{type: :boolean}
|
||||||
|
},
|
||||||
|
example: %{
|
||||||
|
"JSON" => %{
|
||||||
|
"shortcode" => "fatyoshi",
|
||||||
|
"url" =>
|
||||||
|
"https://files.mastodon.social/custom_emojis/images/000/023/920/original/e57ecb623faa0dc9.png",
|
||||||
|
"static_url" =>
|
||||||
|
"https://files.mastodon.social/custom_emojis/images/000/023/920/static/e57ecb623faa0dc9.png",
|
||||||
|
"visible_in_picker" => true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
end
|
28
lib/pleroma/web/api_spec/schemas/account_field.ex
Normal file
28
lib/pleroma/web/api_spec/schemas/account_field.ex
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
# 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.AccountField do
|
||||||
|
alias OpenApiSpex.Schema
|
||||||
|
|
||||||
|
require OpenApiSpex
|
||||||
|
|
||||||
|
OpenApiSpex.schema(%{
|
||||||
|
title: "AccountField",
|
||||||
|
description: "Response schema for account custom fields",
|
||||||
|
type: :object,
|
||||||
|
properties: %{
|
||||||
|
name: %Schema{type: :string},
|
||||||
|
value: %Schema{type: :string},
|
||||||
|
verified_at: %Schema{type: :string, format: "date-time", nullable: true}
|
||||||
|
},
|
||||||
|
example: %{
|
||||||
|
"JSON" => %{
|
||||||
|
"name" => "Website",
|
||||||
|
"value" =>
|
||||||
|
"<a href=\"https://pleroma.com\" rel=\"me nofollow noopener noreferrer\" target=\"_blank\"><span class=\"invisible\">https://</span><span class=\"\">pleroma.com</span><span class=\"invisible\"></span></a>",
|
||||||
|
"verified_at" => "2019-08-29T04:14:55.571+00:00"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
end
|
|
@ -6,12 +6,19 @@ defmodule Pleroma.Web.ApiSpec.AccountOperationTest do
|
||||||
use Pleroma.Web.ConnCase, async: true
|
use Pleroma.Web.ConnCase, async: true
|
||||||
|
|
||||||
alias Pleroma.Web.ApiSpec
|
alias Pleroma.Web.ApiSpec
|
||||||
|
alias Pleroma.Web.ApiSpec.Schemas.Account
|
||||||
alias Pleroma.Web.ApiSpec.Schemas.AccountCreateRequest
|
alias Pleroma.Web.ApiSpec.Schemas.AccountCreateRequest
|
||||||
alias Pleroma.Web.ApiSpec.Schemas.AccountCreateResponse
|
alias Pleroma.Web.ApiSpec.Schemas.AccountCreateResponse
|
||||||
|
|
||||||
import OpenApiSpex.TestAssertions
|
import OpenApiSpex.TestAssertions
|
||||||
import Pleroma.Factory
|
import Pleroma.Factory
|
||||||
|
|
||||||
|
test "Account example matches schema" do
|
||||||
|
api_spec = ApiSpec.spec()
|
||||||
|
schema = Account.schema()
|
||||||
|
assert_schema(schema.example, "Account", api_spec)
|
||||||
|
end
|
||||||
|
|
||||||
test "AccountCreateRequest example matches schema" do
|
test "AccountCreateRequest example matches schema" do
|
||||||
api_spec = ApiSpec.spec()
|
api_spec = ApiSpec.spec()
|
||||||
schema = AccountCreateRequest.schema()
|
schema = AccountCreateRequest.schema()
|
||||||
|
|
Loading…
Reference in a new issue