Files
modelstudioai__cli/packages/commands/tests/e2e/usage-free.e2e.test.ts
T
clh02467605 d646a4e780 refactor(e2e): update test routes and streamline command handling
- Replaced hardcoded command paths with dynamic route mappings in E2E tests.
- Enhanced documentation for command testing, specifying minimum route requirements.
- Consolidated command path management into `topic-routes.ts` for better maintainability.
- Updated various E2E test cases to utilize the new routing structure, ensuring consistency across tests.
- Removed redundant helper functions and improved test clarity by directly referencing route exports.
2026-07-10 15:55:53 +08:00

240 lines
7.0 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import { describe, expect, test } from "vite-plus/test";
import {
isConsoleE2EReady,
isConsoleAuthFailure,
parseStdoutJson,
runCommandE2e,
} from "./helpers.ts";
import { USAGE_ROUTES } from "./topic-routes.ts";
describe("e2e: usage free", () => {
test("usage free --help 正常退出", async () => {
const { stderr, exitCode } = await runCommandE2e(USAGE_ROUTES, ["usage", "free", "--help"]);
expect(exitCode, stderr).toBe(0);
expect(stderr).toMatch(/--model|quota|free-tier/i);
});
test("usage free --help 包含所有示例", async () => {
const { stderr, exitCode } = await runCommandE2e(USAGE_ROUTES, ["usage", "free", "--help"]);
expect(exitCode, stderr).toBe(0);
expect(stderr).toContain("bl usage free");
expect(stderr).toContain("bl usage free --model qwen3-max");
expect(stderr).toContain("bl usage free --model qwen3-max,qwen-turbo");
});
});
describe.skipIf(!isConsoleE2EReady())("e2e: usage freeConsole", () => {
test("usage free --dry-run --model 输出请求参数不发起调用", async () => {
const { stdout, stderr, exitCode } = await runCommandE2e(USAGE_ROUTES, [
"usage",
"free",
"--dry-run",
"--model",
"qwen3-max",
"--output",
"json",
]);
expect(exitCode, stderr).toBe(0);
const data = parseStdoutJson<{
api?: string;
data?: { queryFreeTierQuotaRequest?: { models?: string[] } };
}>(stdout);
expect(data.api).toContain("queryFreeTierQuota");
expect(data.data?.queryFreeTierQuotaRequest?.models).toEqual(["qwen3-max"]);
});
test("usage free --dry-run --model 逗号分隔多个模型", async () => {
const { stdout, stderr, exitCode } = await runCommandE2e(USAGE_ROUTES, [
"usage",
"free",
"--dry-run",
"--model",
"qwen3-max,qwen-turbo",
"--output",
"json",
]);
expect(exitCode, stderr).toBe(0);
const data = parseStdoutJson<{
data?: { queryFreeTierQuotaRequest?: { models?: string[] } };
}>(stdout);
expect(data.data?.queryFreeTierQuotaRequest?.models).toEqual(["qwen3-max", "qwen-turbo"]);
});
test("usage free --dry-run --model 重复模型名自动去重", async () => {
const { stdout, stderr, exitCode } = await runCommandE2e(USAGE_ROUTES, [
"usage",
"free",
"--dry-run",
"--model",
"qwen3-max,qwen3-max,qwen-turbo",
"--output",
"json",
]);
expect(exitCode, stderr).toBe(0);
const data = parseStdoutJson<{
data?: { queryFreeTierQuotaRequest?: { models?: string[] } };
}>(stdout);
expect(data.data?.queryFreeTierQuotaRequest?.models).toEqual(["qwen3-max", "qwen-turbo"]);
});
test("usage free --dry-run --model 逗号间有空格也能正确解析", async () => {
const { stdout, stderr, exitCode } = await runCommandE2e(USAGE_ROUTES, [
"usage",
"free",
"--dry-run",
"--model",
"qwen3-max, qwen-turbo",
"--output",
"json",
]);
expect(exitCode, stderr).toBe(0);
const data = parseStdoutJson<{
data?: { queryFreeTierQuotaRequest?: { models?: string[] } };
}>(stdout);
expect(data.data?.queryFreeTierQuotaRequest?.models).toEqual(["qwen3-max", "qwen-turbo"]);
});
test("usage free --dry-run 不指定 --model 传全量模型列表", async () => {
const { stderr, exitCode } = await runCommandE2e(USAGE_ROUTES, [
"usage",
"free",
"--dry-run",
"--output",
"json",
]);
expect(exitCode, stderr).toBe(0);
});
test("usage free --model 单模型查询返回 JSON 结果", async () => {
const result = await runCommandE2e(USAGE_ROUTES, [
"usage",
"free",
"--model",
"qwen3-max",
"--output",
"json",
]);
if (isConsoleAuthFailure(result)) return;
expect(result.exitCode, result.stderr).toBe(0);
});
test("usage free --model 单模型文本输出包含表头", async () => {
const result = await runCommandE2e(USAGE_ROUTES, [
"usage",
"free",
"--model",
"qwen3-max",
"--output",
"text",
]);
if (isConsoleAuthFailure(result)) return;
expect(result.exitCode, result.stderr).toBe(0);
});
test("usage free --model 文本输出包含模型名", async () => {
const result = await runCommandE2e(USAGE_ROUTES, [
"usage",
"free",
"--model",
"qwen3-max",
"--output",
"text",
]);
if (isConsoleAuthFailure(result)) return;
expect(result.exitCode, result.stderr).toBe(0);
});
test("usage free --model 逗号分隔多模型文本输出包含所有模型", async () => {
const result = await runCommandE2e(USAGE_ROUTES, [
"usage",
"free",
"--model",
"qwen3-max,qwen-turbo",
"--output",
"text",
]);
if (isConsoleAuthFailure(result)) return;
expect(result.exitCode, result.stderr).toBe(0);
});
test("usage free --model 文本输出包含正确的 Type 列", async () => {
const result = await runCommandE2e(USAGE_ROUTES, [
"usage",
"free",
"--model",
"qwen3-max",
"--output",
"text",
]);
if (isConsoleAuthFailure(result)) return;
expect(result.exitCode, result.stderr).toBe(0);
});
test("usage free --model quotaStatus 为 UNKNOWN 时 Auto-Stop 显示 Unsupported", async () => {
const result = await runCommandE2e(USAGE_ROUTES, [
"usage",
"free",
"--model",
"wan2.7-image",
"--output",
"text",
]);
if (isConsoleAuthFailure(result)) return;
expect(result.exitCode, result.stderr).toBe(0);
});
test("usage free --model quotaStatus 为 UNKNOWN 时额度显示为 -", async () => {
const result = await runCommandE2e(USAGE_ROUTES, [
"usage",
"free",
"--model",
"wan2.7-image",
"--output",
"text",
]);
if (isConsoleAuthFailure(result)) return;
expect(result.exitCode, result.stderr).toBe(0);
});
test("usage free --model 不存在的模型仍返回表格行", async () => {
const result = await runCommandE2e(USAGE_ROUTES, [
"usage",
"free",
"--model",
"nonexistent-model-xyz-12345",
"--output",
"text",
]);
if (isConsoleAuthFailure(result)) return;
expect(result.exitCode, result.stderr).toBe(0);
});
test("usage free --model Auto-Stop 显示 ON、OFF 或 Unsupported", async () => {
const result = await runCommandE2e(USAGE_ROUTES, [
"usage",
"free",
"--model",
"qwen3-max",
"--output",
"text",
]);
if (isConsoleAuthFailure(result)) return;
expect(result.exitCode, result.stderr).toBe(0);
});
test("usage free --model --console-region cn-beijing 指定区域查询", async () => {
const result = await runCommandE2e(USAGE_ROUTES, [
"usage",
"free",
"--model",
"qwen3-max",
"--console-region",
"cn-beijing",
"--output",
"json",
]);
if (isConsoleAuthFailure(result)) return;
expect(result.exitCode, result.stderr).toBe(0);
});
});