import fs from "node:fs/promises"; import path from "node:path"; import { afterEach, beforeEach, describe, expect, it } from "vitest"; import { listChatCommands } from "../auto-reply/commands-registry.js"; import { setActivePluginRegistry } from "../plugins/runtime.js"; import { createTestRegistry } from "../test-utils/channel-plugins.js"; beforeEach(() => { setActivePluginRegistry(createTestRegistry([])); }); afterEach(() => { setActivePluginRegistry(createTestRegistry([])); }); function extractDocumentedSlashCommands(markdown: string): Set { const documented = new Set(); for (const match of markdown.matchAll(/`\/(?!<)([a-z0-9_-]+)/gi)) { documented.add(`/${match[1]}`); } return documented; } describe("slash commands docs", () => { it("documents all built-in chat command aliases", async () => { const docPath = path.join(process.cwd(), "docs", "tools", "slash-commands.md"); const markdown = await fs.readFile(docPath, "utf8"); const documented = extractDocumentedSlashCommands(markdown); for (const command of listChatCommands()) { for (const alias of command.textAliases) { expect(documented.has(alias)).toBe(true); } } }); });