Files
modelstudioai__cli/packages/commands/tests/e2e/knowledge/knowledge-kb-stats.e2e.test.ts
zeyu.fz 4086da572f docs(knowledge): 修改多处参数描述为“精确匹配”并完善错误处理说明
- 将 category-list、file-list、service-list 等命令参数的描述更新为强调“精确匹配”
- file-list 命令中 --name 参数改为匹配不含扩展名的精确文件名,并在备注中补充说明
- kb-stats 命令严格校验时间格式,增强无效格式报错及提示
- 丰富知识相关测试用例,增加对不存在 ID 的服务端错误传递和非零退出的正向断言
- 优化知识文档上传测试,支持跳过 node_modules/.git 文件夹及显示被跳过文件详情
- 修正知识搜索及聊天流程中未发布版本号引发的服务器拒绝场景测试
- 更新知识模块命令文档,补充参数要求和用法提示,提升用户指引明确度
2026-08-14 23:59:05 +08:00

155 lines
4.6 KiB
TypeScript

import { describe, expect, test } from "vite-plus/test";
import { parseStdoutJson, runCommandE2e } from "../helpers.ts";
import { KNOWLEDGE_KB_STATS_ROUTES } from "../topic-routes.ts";
interface DryRunBody {
endpoint?: string;
request?: {
indexId?: string;
startTimestamp?: string;
endTimestamp?: string;
};
}
describe("e2e: knowledge stats dry-run", () => {
test("--dry-run 正常日期范围输出正确时间戳", async () => {
const { stdout, stderr, exitCode } = await runCommandE2e(
KNOWLEDGE_KB_STATS_ROUTES,
[
"knowledge",
"stats",
"--dry-run",
"--index-id",
"idx_test",
"--start",
"2026-07-30",
"--end",
"2026-08-10",
"--workspace-id",
"ws_test",
"--output",
"json",
],
{ DASHSCOPE_API_KEY: "sk-fake-for-dryrun" },
);
expect(exitCode, stderr).toBe(0);
const data = parseStdoutJson<DryRunBody>(stdout);
expect(data.endpoint).toMatch(/api\/v1\/indices\/rag\/index\/monitor/);
expect(data.request?.indexId).toBe("idx_test");
expect(data.request?.startTimestamp).toBe("1785369600"); // 2026-07-30 00:00:00 UTC
expect(data.request?.endTimestamp).toBe("1786320000"); // 2026-08-10 00:00:00 UTC (11 days after start)
});
test("--end 未来时间被截断为当前时间", async () => {
const beforeRun = Math.floor(Date.now() / 1000);
const { stdout, stderr, exitCode } = await runCommandE2e(
KNOWLEDGE_KB_STATS_ROUTES,
[
"knowledge",
"stats",
"--dry-run",
"--index-id",
"idx_test",
"--start",
"2026-07-30",
"--end",
"2026-12-31",
"--workspace-id",
"ws_test",
"--output",
"json",
],
{ DASHSCOPE_API_KEY: "sk-fake-for-dryrun" },
);
const afterRun = Math.floor(Date.now() / 1000);
expect(exitCode, stderr).toBe(0);
const data = parseStdoutJson<DryRunBody>(stdout);
expect(data.request?.startTimestamp).toBe("1785369600"); // 2026-07-30 unchanged
// endTimestamp should be clamped to now, within the run window
const endTs = Number(data.request?.endTimestamp);
expect(endTs).toBeGreaterThanOrEqual(beforeRun);
expect(endTs).toBeLessThanOrEqual(afterRun);
});
test("--start 未来时间报用法错误 (exit 2)", async () => {
const { stderr, exitCode } = await runCommandE2e(
KNOWLEDGE_KB_STATS_ROUTES,
[
"knowledge",
"stats",
"--dry-run",
"--index-id",
"idx_test",
"--start",
"2026-12-31",
"--workspace-id",
"ws_test",
"--output",
"json",
],
{ DASHSCOPE_API_KEY: "sk-fake-for-dryrun" },
);
expect(exitCode).toBe(2);
expect(stderr).toMatch(/future/i);
});
test("--start 非法时间格式报用法错误 (exit 2) 且 hint 给出合法格式", async () => {
const { stderr, exitCode } = await runCommandE2e(
KNOWLEDGE_KB_STATS_ROUTES,
[
"knowledge",
"stats",
"--dry-run",
"--index-id",
"idx_test",
"--start",
"2026-",
"--workspace-id",
"ws_test",
"--output",
"json",
],
{ DASHSCOPE_API_KEY: "sk-fake-for-dryrun" },
);
expect(exitCode).toBe(2);
expect(stderr).toMatch(/Invalid time value/i);
// The hint should teach the accepted formats (Unix seconds / ISO date)
expect(stderr).toMatch(/Unix seconds|ISO date/i);
});
test("13 位毫秒时间戳归一化为秒级字符串", async () => {
const { stdout, stderr, exitCode } = await runCommandE2e(
KNOWLEDGE_KB_STATS_ROUTES,
[
"knowledge",
"stats",
"--dry-run",
"--index-id",
"idx_test",
"--start",
"1785369600000", // 2026-07-30 00:00:00 UTC in milliseconds
"--end",
"1786320000000", // 2026-08-10 00:00:00 UTC in milliseconds
"--workspace-id",
"ws_test",
"--output",
"json",
],
{ DASHSCOPE_API_KEY: "sk-fake-for-dryrun" },
);
expect(exitCode, stderr).toBe(0);
const data = parseStdoutJson<DryRunBody>(stdout);
expect(data.request?.startTimestamp).toBe("1785369600");
expect(data.request?.endTimestamp).toBe("1786320000");
});
test("缺 --index-id 报用法错误 (exit 2)", async () => {
const { exitCode } = await runCommandE2e(
KNOWLEDGE_KB_STATS_ROUTES,
["knowledge", "stats", "--dry-run", "--workspace-id", "ws_test"],
{ DASHSCOPE_API_KEY: "sk-fake-for-dryrun" },
);
expect(exitCode).toBe(2);
});
});