Packages

Fast. Reusable. Quenya framework helps you generate and build OpenAPIv3 compatible API apps easily from a spec. It greatly reduced the time to build APIs from ideation to production.

Current section

Files

Jump to
quenya lib test_helper.ex
Raw

lib/test_helper.ex

defmodule Quenya.TestHelper do
@moduledoc """
Helper functions for property tests
"""
alias Quenya.ResponseHelper
def stream_gen_uri(uri, params) do
template =
uri
|> String.replace("{", "<%= ")
|> String.replace("}", " %>")
stream_gen(fn ->
opts =
params
|> params_filter_map("path")
|> Enum.map(fn {k, v} -> {String.to_atom(k), v} end)
uri = EEx.eval_string(template, opts)
case URI.encode_query(params_filter_map(params, "query")) do
"" -> uri
query -> "#{uri}?#{query}"
end
end)
end
def stream_gen_req_headers(params) do
stream_gen(fn ->
params_filter_map(params, "header")
end)
end
def stream_gen_req_body(c) when c == %{}, do: StreamData.constant(nil)
def stream_gen_req_body(content) do
stream_gen(fn ->
type = Enum.random(Map.keys(content))
data = get_one(JsonDataFaker.generate(content[type].schema))
{type, data}
end)
end
def stream_gen_res(res) do
stream_gen(fn ->
{code, data} = ResponseHelper.choose_best_response(res)
headers =
Enum.map(data.headers, fn {k, v} ->
{k, v.schema}
end)
case Enum.empty?(data.content) do
true ->
{code, headers, "*/*", %{}}
_ ->
type = Enum.random(Map.keys(data.content))
{code, headers, type, data.content[type].schema}
end
end)
end
def stream_gen(fun) do
StreamData.map(StreamData.constant(nil), fn _ -> fun.() end)
end
def get_one(stream_data), do: stream_data |> Enum.take(1) |> List.first()
# private functions
defp params_filter_map(params, position) do
params
|> Enum.filter(fn param -> param.position == position end)
|> Enum.map(fn param ->
item = get_one(JsonDataFaker.generate(param.schema))
p =
case is_list(item) do
true -> Enum.join(item, ",")
_ -> item
end
{param.name, p}
end)
end
end