41 lines
1.9 KiB
TypeScript
41 lines
1.9 KiB
TypeScript
import { describe, it, expect } from "vitest"
|
|
import { Shrimp, ShrimpTableModule, MemoryShrimpCrud, ShrimpFieldTypes } from "../src/main"
|
|
import type { IFieldConfig } from "../src/main"
|
|
|
|
describe("crudRegistry 自动登记", () => {
|
|
it("ShrimpTableModule 构造时自动把 dataSource 登记到 root.crudRegistry", () => {
|
|
const shrimp = new Shrimp()
|
|
const crud = new MemoryShrimpCrud()
|
|
new ShrimpTableModule(shrimp, "tag", crud, [], "标签")
|
|
expect(shrimp.crudRegistry.get("tag")).toBe(crud)
|
|
})
|
|
|
|
it("通过 ShrimpTableModule.list 走 relation populate,只需声明字段无需手动 wire", async () => {
|
|
const shrimp = new Shrimp()
|
|
|
|
const tagCrud = new MemoryShrimpCrud<{ _id: string; name: string }>()
|
|
new ShrimpTableModule(shrimp, "tag", tagCrud, [
|
|
{ key: "name", label: "名称", type: ShrimpFieldTypes.String },
|
|
], "标签").initCrud()
|
|
const t1 = await tagCrud.add({ name: "热门" } as any)
|
|
const t2 = await tagCrud.add({ name: "促销" } as any)
|
|
|
|
const productCrud = new MemoryShrimpCrud<{ _id: string; code: string; tagIds: string[] }>()
|
|
const productFields: IFieldConfig[] = [
|
|
{ key: "code", label: "编码", type: ShrimpFieldTypes.String },
|
|
{
|
|
key: "tagIds", label: "标签", type: ShrimpFieldTypes.Relation,
|
|
relation: { moduleKey: "tag", labelKey: "name" }, multiple: true,
|
|
},
|
|
]
|
|
const productModule = new ShrimpTableModule(shrimp, "product", productCrud, productFields, "商品")
|
|
productModule.initCrud()
|
|
|
|
await productCrud.add({ code: "P001", tagIds: [t1._id, t2._id] } as any)
|
|
|
|
const result = await productModule.list({})
|
|
// _label 逐行机制已退场:relation 显示名走整页 refs 字典(refs[moduleKey][id])
|
|
expect((result as any).refs?.tag).toEqual({ [t1._id]: "热门", [t2._id]: "促销" })
|
|
})
|
|
})
|