部分上游端点会返回几百个模型,弹窗里铺满复选框后只能靠肉眼滚动查找, 没法按厂商或系列收窄。 - 弹窗顶部新增搜索框(大小写不敏感的子串匹配、自动聚焦、可一键清空); - 搜索时「全选 / 取消选中」只作用于当前匹配集合,按钮文案带出匹配数量; 关键字之外的勾选状态保留。无关键字时与改动前行为完全一致; - 无命中时列表区显示空态;汇总行补充匹配数与其中已勾选数。 筛选与批量勾选规则抽到 channel-model-import-selection.ts 并配套单测。
53 lines
2.0 KiB
TypeScript
53 lines
2.0 KiB
TypeScript
import { expect, test } from "bun:test";
|
|
|
|
import { deselectVisibleModels, filterImportModels, 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([]);
|
|
});
|