Files
OmniRoute/tests/unit/cli-tools-schema.test.ts
diegosouzapw 34e8b3e243 test: repair pre-existing test-suite failures (batch 2) + real source-bug fixes
Repaired 47 of 49 pre-existing failing unit test files on release/v3.8.2 (down to
docs-site-overhaul, a tr46/tsx/Node24 toolchain blocker, tracked separately).

Stale tests reconciled with current source (catalog/registry/version drift), the
notable ones: openai gpt-4o / gpt-4o-mini removed from the registry; Antigravity
Claude models removed from the public catalog; DEFAULT_CLAUDE_CODE_VERSION and
DEFAULT_CODEX_CLIENT_VERSION bumps; voyage-3-large → voyage-4; model-alias seed now
routes via gemini-cli; remapToolNames API change; getLKGP return shape; sidebar nav
overhaul; CLI commands now write via process.stdout.write; cloudEnabled default true.

Real SOURCE bugs found by the tests and fixed (not masked):
- fix(db): commandCodeAuth.toSafeStatus + evals.ts read the `*Json` camel keys that
  rowToCamel does not produce — it auto-parses `*_json` columns under the base name,
  so metadata/outputs/summary/results/tags were always empty. Read the base keys.
- fix(executors): re-register claude-web / cw-web in the executor index (the provider
  shipped in #2476 but was never wired into the registry).
- fix(validation): build the OpenAI-like /models probe with addModelsSuffix so an
  OpenAI base URL validates against /v1/models, not /v1/chat/completions/models;
  honor a ya29.* Google OAuth token as Bearer even when authType is apikey/header
  (it was shadowed by an unreachable else-if); make the Anthropic /models probe
  best-effort (try/catch) so a 404/malformed-URL throw no longer marks a valid key invalid.
- fix(security): add the requireCliToolsAuth guard to the GET handlers of
  cli-tools/guide-settings/[toolId] and cli-tools/hermes-agent-settings (host config
  access was unguarded).
- revert(stream): restore the SSE heartbeat default to 15s (the 4s round-8 change
  regressed runtime-timeouts; #2544's early-keepalive route wrapper remains the fix).

Also: env-doc sync (OMNIROUTE_SKIP_DB_HEALTHCHECK) and new sidebar i18n keys.
2026-05-22 13:10:48 -03:00

64 lines
2.1 KiB
TypeScript

import test from "node:test";
import assert from "node:assert/strict";
test("CLI_TOOLS registry contains all 18 expected tools", async () => {
const { CLI_TOOLS } = await import("../../src/shared/constants/cliTools.ts");
const expected = [
"claude",
"codex",
"opencode",
"cline",
"kilo",
"continue",
"qwen",
"windsurf",
"hermes",
"hermes-agent",
"amp",
"kiro",
"cursor",
"droid",
"antigravity",
"copilot",
"openclaw",
"custom",
];
for (const id of expected) {
assert.ok(id in CLI_TOOLS, `Missing tool: ${id}`);
}
assert.equal(Object.keys(CLI_TOOLS).length, expected.length);
});
test("Every tool has required fields: id, name, description, configType", async () => {
const { CLI_TOOLS } = await import("../../src/shared/constants/cliTools.ts");
for (const [key, tool] of Object.entries(CLI_TOOLS)) {
assert.equal(typeof tool.id, "string", `${key}.id must be string`);
assert.equal(tool.id, key, `${key}.id must match its registry key`);
assert.equal(typeof tool.name, "string", `${key}.name must be string`);
assert.ok(tool.name.length > 0, `${key}.name must be non-empty`);
assert.equal(typeof tool.description, "string", `${key}.description must be string`);
assert.equal(typeof tool.configType, "string", `${key}.configType must be string`);
}
});
test("listCliTools returns all tools as an array", async () => {
const { listCliTools, CLI_TOOLS } = await import("../../src/shared/constants/cliTools.ts");
const tools = listCliTools();
assert.ok(Array.isArray(tools));
assert.equal(tools.length, Object.keys(CLI_TOOLS).length);
for (const tool of tools) {
assert.equal(typeof tool.id, "string");
}
});
test("getCliTool returns correct tool by id", async () => {
const { getCliTool } = await import("../../src/shared/constants/cliTools.ts");
const claude = getCliTool("claude");
assert.ok(claude);
assert.equal(claude.id, "claude");
assert.equal(claude.name, "Claude Code");
const missing = getCliTool("nonexistent");
assert.equal(missing, undefined);
});