import { describe, it, expect } from "vitest" import { Shrimp, ShrimpTableModule, MemoryShrimpCrud, ShrimpFieldTypes } from "../src" import type { IFieldConfig } from "../src" 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({}) expect((result.list[0] as any).tagIds_label).toEqual(["热门", "促销"]) }) })