38 lines
1.2 KiB
TypeScript
38 lines
1.2 KiB
TypeScript
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<string> {
|
|
const documented = new Set<string>();
|
|
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);
|
|
}
|
|
}
|
|
});
|
|
});
|