Files
bDS2/test/bds/scripting/api_documentation_test.exs

40 lines
1.4 KiB
Elixir

defmodule BDS.Scripting.ApiDocumentationTest do
use ExUnit.Case, async: true
test "rendered API docs include richer module indexes and example responses" do
rendered = BDS.Scripting.ApiDocs.render()
assert rendered =~ "**Module APIs**"
assert rendered =~ "- [projects.create](#projectscreate)"
assert rendered =~ "**Example response**"
assert rendered =~ "- Data structures: `ProjectData`"
assert rendered =~ "[↑ Back to Table of contents](#table-of-contents)"
end
test "API.md matches the generated Lua scripting contract" do
api_doc_path = Path.expand("../../../API.md", __DIR__)
assert File.exists?(api_doc_path)
assert File.read!(api_doc_path) == BDS.Scripting.ApiDocs.render()
end
test "documented Lua methods match the live capability map" do
documented_methods =
BDS.Scripting.ApiDocs.render()
|> String.split("\n")
|> Enum.filter(&String.starts_with?(&1, "### "))
|> Enum.map(&String.replace_prefix(&1, "### ", ""))
|> Enum.filter(&String.contains?(&1, "."))
|> MapSet.new()
live_methods =
BDS.Scripting.Capabilities.for_project("project-id")
|> Enum.flat_map(fn {module_name, functions} ->
Enum.map(Map.keys(functions), fn function_name -> "#{module_name}.#{function_name}" end)
end)
|> MapSet.new()
assert documented_methods == live_methods
end
end