refactor: 统一 target name/description 可空语义,前端展示 fallback 到 id
- schema: name/description 允许省略或显式 null,TypeBox Union([Null, String]) - 类型: RawTargetConfig/ResolvedTargetBase/子类型/StoredTarget/TargetStatus name 改为 string | null - checker resolve: name: t.name ?? null,不再 fallback 到 id - 语义校验: 拒绝空字符串和纯空白 name - SQLite: targets.name 列改为可空 TEXT - 前端: 新增 getTargetDisplayName(target) 展示 name ?? id - 测试: 覆盖 name/description null 全场景,查找改为按 id - 文档: 更新 README/DEVELOPMENT 和 6 个 openspec specs
This commit is contained in:
@@ -156,4 +156,28 @@ describe("createTargetTableColumns", () => {
|
||||
expect(nameColumn.sorter).toBeUndefined();
|
||||
expect(nameColumn.sortType).toBeUndefined();
|
||||
});
|
||||
|
||||
test("名称列 name 为 null 时显示 id", () => {
|
||||
const nameColumn = getColumn(createTargetTableColumns(["http"]), "name");
|
||||
const renderCell = nameColumn.cell as (params: PrimaryTableCellParams<TargetStatus>) => string;
|
||||
const result = renderCell({
|
||||
col: nameColumn,
|
||||
colIndex: 1,
|
||||
row: makeTarget({ id: "my-api", name: null }),
|
||||
rowIndex: 0,
|
||||
});
|
||||
expect(result).toBe("my-api");
|
||||
});
|
||||
|
||||
test("名称列 name 有值时显示 name", () => {
|
||||
const nameColumn = getColumn(createTargetTableColumns(["http"]), "name");
|
||||
const renderCell = nameColumn.cell as (params: PrimaryTableCellParams<TargetStatus>) => string;
|
||||
const result = renderCell({
|
||||
col: nameColumn,
|
||||
colIndex: 1,
|
||||
row: makeTarget({ id: "my-api", name: "我的 API" }),
|
||||
rowIndex: 0,
|
||||
});
|
||||
expect(result).toBe("我的 API");
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user