Files
ttstd-infinite-canvas/web/test/channel-model-import-selection.test.ts
Rou 054dab28cc fix(workbench): 模型目录与助手形象 - 修正 Live2D 首帧闪现和模型默认分组 (#773)
* fix(workbench): 模型目录与助手形象 - 修正 Live2D 首帧闪现和模型默认分组

进入画布时形象配置与 Live2D 首帧未就绪不再显示默认球,改为加载提示,失败才回退。

新导入模型一级目录默认未分类、二级渠道展示名默认跟随上游 ID;历史非空分组(含与模型 ID 同名)保留。

拉取模型弹窗默认只勾选已存在模型并移除逐项已存在字样;一级分组下拉点击即展开全部选项。

* style(web): 画布与模型导入 - 按 Prettier 规范格式化改动文件

修复 PR 中 Web checks 的格式化检查失败:Live2D 启动器 JSX、模型导入选择工具函数与 Live2D 加载测试按项目 Prettier 配置重新排版,不改变行为。

* test(web): Live2D 生命周期 - 修复 bun 1.3.9 下 text 导入与模块导入冲突

agent-live2d-lifecycle 曾用 with { type: text } 导入 live2d-avatar.tsx,bun 1.3.9 会按路径复用该缓存,导致新增的模块导入拿不到 Live2DAvatar 具名导出并报 SyntaxError。改为 readFileSync 读取源码文本,本地以 bun 1.3.9 复现并验证通过。
2026-10-14 09:36:01 +08:00

59 lines
2.4 KiB
TypeScript

import { expect, test } from "bun:test";
import { deselectVisibleModels, filterImportModels, selectExistingImportModels, selectVisibleModels } from "../src/pages/admin/components/channel-model-import-selection";
const MODELS = [
"MiniMax-H3",
"004系列/MiniMax-H3(933/10-15秒768P)",
"004系列/sd2.5(30--0-10卡脸4-30秒/720P)",
"gpt-image-1",
"doubao-seedream-4",
];
test("关键字为空时返回全部模型", () => {
expect(filterImportModels(MODELS, "")).toEqual(MODELS);
expect(filterImportModels(MODELS, " ")).toEqual(MODELS);
});
test("按子串匹配,且大小写不敏感", () => {
expect(filterImportModels(MODELS, "minimax")).toEqual([MODELS[0], MODELS[1]]);
expect(filterImportModels(MODELS, "MINIMAX")).toEqual([MODELS[0], MODELS[1]]);
});
test("关键字首尾空白不影响匹配", () => {
expect(filterImportModels(MODELS, " sd2.5 ")).toEqual([MODELS[2]]);
});
test("没有命中时返回空数组(弹窗据此显示空态)", () => {
expect(filterImportModels(MODELS, "不存在的模型")).toEqual([]);
});
test("全选只并入当前可见集合,关键字外的勾选保留", () => {
const visible = filterImportModels(MODELS, "minimax");
expect(selectVisibleModels(["gpt-image-1"], visible)).toEqual(["gpt-image-1", MODELS[0], MODELS[1]]);
});
test("全选不会产生重复项", () => {
const visible = filterImportModels(MODELS, "minimax");
expect(selectVisibleModels([MODELS[0]], visible)).toEqual([MODELS[0], MODELS[1]]);
});
test("无关键字时全选等于选中全部,与旧行为一致", () => {
expect(selectVisibleModels([], filterImportModels(MODELS, ""))).toEqual(MODELS);
});
test("取消选中只移除可见的,隐藏的勾选不动", () => {
const visible = filterImportModels(MODELS, "minimax");
expect(deselectVisibleModels([MODELS[0], MODELS[1], "gpt-image-1"], visible)).toEqual(["gpt-image-1"]);
});
test("无关键字时取消选中等于清空,与旧行为一致", () => {
expect(deselectVisibleModels(MODELS, filterImportModels(MODELS, ""))).toEqual([]);
});
test("已有模型默认勾选,新模型默认不勾选,沿用上游标识匹配规则", () => {
const available = ["models/gpt-a", "new-model", " GPT-B ", "gpt-c"];
expect(selectExistingImportModels(available, ["gpt-a", "models/gpt-b", "gpt-c"])).toEqual(["models/gpt-a", " GPT-B ", "gpt-c"]);
expect(selectExistingImportModels(available, [])).toEqual([]);
});