mirror of
https://github.com/wanderer-industries/wanderer
synced 2026-01-14 10:50:20 +00:00
80 lines
2.0 KiB
Elixir
80 lines
2.0 KiB
Elixir
defmodule WandererAppWeb.OpenAPITestGeneratorSimple do
|
|
@moduledoc """
|
|
Simplified OpenAPI test generator for contract validation.
|
|
"""
|
|
|
|
alias OpenApiSpex.PathItem
|
|
|
|
@doc """
|
|
Generates basic contract test templates for OpenAPI operations.
|
|
"""
|
|
def generate_basic_tests(spec) do
|
|
spec.paths
|
|
|> Enum.flat_map(fn {path, path_item} ->
|
|
path_item
|
|
|> extract_operations()
|
|
|> Enum.map(fn {method, operation} ->
|
|
generate_test_template(path, method, operation)
|
|
end)
|
|
end)
|
|
|> Enum.join("\n\n")
|
|
end
|
|
|
|
defp extract_operations(%PathItem{} = path_item) do
|
|
[
|
|
{:get, path_item.get},
|
|
{:post, path_item.post},
|
|
{:put, path_item.put},
|
|
{:patch, path_item.patch},
|
|
{:delete, path_item.delete}
|
|
]
|
|
|> Enum.filter(fn {_method, operation} -> operation != nil end)
|
|
end
|
|
|
|
defp generate_test_template(path, method, operation) do
|
|
test_name = "#{String.upcase(to_string(method))} #{path}"
|
|
|
|
"""
|
|
test "#{test_name} matches schema" do
|
|
# TODO: Implement proper test for #{operation.operationId || "operation"}
|
|
# This test should validate request and response against OpenAPI schema
|
|
|
|
conn = build_conn()
|
|
# Add authentication headers if needed
|
|
# Add request body if needed
|
|
|
|
conn = #{method}(conn, "#{path}")
|
|
|
|
# Validate response status and schema
|
|
assert conn.status in [200, 201, 204]
|
|
# TODO: Add schema validation
|
|
end
|
|
"""
|
|
end
|
|
|
|
@doc """
|
|
Generates a complete test module for a specific API.
|
|
"""
|
|
def generate_test_module(spec, module_name) do
|
|
tests = generate_basic_tests(spec)
|
|
|
|
"""
|
|
defmodule #{module_name}Test do
|
|
use WandererAppWeb.ConnCase
|
|
use WandererAppWeb.OpenAPICase
|
|
|
|
describe "OpenAPI contract validation" do
|
|
setup [:create_test_data]
|
|
|
|
#{tests}
|
|
end
|
|
|
|
defp create_test_data(_) do
|
|
# TODO: Set up test data
|
|
%{}
|
|
end
|
|
end
|
|
"""
|
|
end
|
|
end
|