40 lines
1.4 KiB
Elixir
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
|