mirror of
https://akkoma.dev/AkkomaGang/akkoma.git
synced 2024-11-01 14:21:10 +00:00
58 lines
1.4 KiB
Elixir
58 lines
1.4 KiB
Elixir
|
# Pleroma: A lightweight social networking server
|
||
|
# Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>
|
||
|
# SPDX-License-Identifier: AGPL-3.0-only
|
||
|
|
||
|
defmodule Pleroma.Tests.ApiSpecHelpers do
|
||
|
@moduledoc """
|
||
|
OpenAPI spec test helpers
|
||
|
"""
|
||
|
|
||
|
import ExUnit.Assertions
|
||
|
|
||
|
alias OpenApiSpex.Cast.Error
|
||
|
alias OpenApiSpex.Reference
|
||
|
alias OpenApiSpex.Schema
|
||
|
|
||
|
def assert_schema(value, schema) do
|
||
|
api_spec = Pleroma.Web.ApiSpec.spec()
|
||
|
|
||
|
case OpenApiSpex.cast_value(value, schema, api_spec) do
|
||
|
{:ok, data} ->
|
||
|
data
|
||
|
|
||
|
{:error, errors} ->
|
||
|
errors =
|
||
|
Enum.map(errors, fn error ->
|
||
|
message = Error.message(error)
|
||
|
path = Error.path_to_string(error)
|
||
|
"#{message} at #{path}"
|
||
|
end)
|
||
|
|
||
|
flunk(
|
||
|
"Value does not conform to schema #{schema.title}: #{Enum.join(errors, "\n")}\n#{
|
||
|
inspect(value)
|
||
|
}"
|
||
|
)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
def resolve_schema(%Schema{} = schema), do: schema
|
||
|
|
||
|
def resolve_schema(%Reference{} = ref) do
|
||
|
schemas = Pleroma.Web.ApiSpec.spec().components.schemas
|
||
|
Reference.resolve_schema(ref, schemas)
|
||
|
end
|
||
|
|
||
|
def api_operations do
|
||
|
paths = Pleroma.Web.ApiSpec.spec().paths
|
||
|
|
||
|
Enum.flat_map(paths, fn {_, path_item} ->
|
||
|
path_item
|
||
|
|> Map.take([:delete, :get, :head, :options, :patch, :post, :put, :trace])
|
||
|
|> Map.values()
|
||
|
|> Enum.reject(&is_nil/1)
|
||
|
|> Enum.uniq()
|
||
|
end)
|
||
|
end
|
||
|
end
|