diff options
author | Egor Kislitsyn <egor@kislitsyn.com> | 2020-04-27 14:33:00 +0400 |
---|---|---|
committer | Egor Kislitsyn <egor@kislitsyn.com> | 2020-04-27 14:33:00 +0400 |
commit | f1ca917bb0d733445657e0be92440dedc2f8d3c6 (patch) | |
tree | 175db64bc7d9c32bc5c2f2e7b443daa040e4d65c /test/support/api_spec_helpers.ex | |
parent | 1b06a27746ccbbdec77b7bc1571783a64ade4431 (diff) | |
parent | 01cc93b6873b5c50c0fc54774a3b004bf660e46b (diff) | |
download | pleroma-f1ca917bb0d733445657e0be92440dedc2f8d3c6.tar.gz pleroma-f1ca917bb0d733445657e0be92440dedc2f8d3c6.zip |
Merge branch 'develop' into openapi/account
Diffstat (limited to 'test/support/api_spec_helpers.ex')
-rw-r--r-- | test/support/api_spec_helpers.ex | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/test/support/api_spec_helpers.ex b/test/support/api_spec_helpers.ex new file mode 100644 index 000000000..80c69c788 --- /dev/null +++ b/test/support/api_spec_helpers.ex @@ -0,0 +1,57 @@ +# 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 |