summaryrefslogtreecommitdiff
path: root/test/support/api_spec_helpers.ex
diff options
context:
space:
mode:
authorEgor Kislitsyn <egor@kislitsyn.com>2020-04-27 14:33:00 +0400
committerEgor Kislitsyn <egor@kislitsyn.com>2020-04-27 14:33:00 +0400
commitf1ca917bb0d733445657e0be92440dedc2f8d3c6 (patch)
tree175db64bc7d9c32bc5c2f2e7b443daa040e4d65c /test/support/api_spec_helpers.ex
parent1b06a27746ccbbdec77b7bc1571783a64ade4431 (diff)
parent01cc93b6873b5c50c0fc54774a3b004bf660e46b (diff)
downloadpleroma-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.ex57
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