Files
wanderer/test/support/openapi_test_generator_simple.ex
2025-07-09 01:47:24 -04:00

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