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