[CMS-VISUAL] D1-D10: 组件库全量——布局模型扩 6 新类型(stats_band/featured_topics/video_tour/events/people/badges)+ 编辑器新属性面板(统计项/专题卡/徽章数组编辑器、图标选择器)+ gallery 瀑布流 + banner 4 Tab(topic/event 位)+ 人物管理 CRUD 页 + 全类型英文副题(176 测试绿)
This commit is contained in:
@@ -217,7 +217,7 @@ describe("HomeLayoutEditor - F2 三栏 + 预览 + 缩略图 + 自动编排(doc
|
||||
expect(layout).toBeTruthy();
|
||||
expect(layout.blocks.length).toBeGreaterThanOrEqual(4); // ticker + 2 栏目区块 + gallery
|
||||
expect(layout.blocks[0].type).toBe("ticker");
|
||||
expect(layout.blocks.some((b: { type: string }) => b.type === "article_list" && b.title === "校园时讯")).toBe(true);
|
||||
expect(layout.blocks.some((b: { type: string; title?: string }) => b.type === "article_list" && b.title === "校园时讯")).toBe(true);
|
||||
expect(layout.blocks.some((b: { type: string }) => b.type === "gallery")).toBe(true);
|
||||
// 其余键无损
|
||||
expect(JSON.parse(model.value).logo).toBe("/a.png");
|
||||
@@ -236,3 +236,43 @@ describe("HomeLayoutEditor - F2 三栏 + 预览 + 缩略图 + 自动编排(doc
|
||||
expect(JSON.parse(model.value).home_layout).toBeUndefined();
|
||||
});
|
||||
});
|
||||
|
||||
describe("HomeLayoutEditor - D 组件属性面板(docs/20 D-1/D-8)", () => {
|
||||
it("stats_band:统计项三列编辑器(名称/数值/单位)渲染并可增行", async () => {
|
||||
const config = JSON.stringify({
|
||||
home_layout: { version: 1, blocks: [
|
||||
{ id: "s1", type: "stats_band", stats: [{ label: "在校生", value: "3.2", unit: "万" }] },
|
||||
] },
|
||||
});
|
||||
const { el } = await mountEditor(config);
|
||||
(el.querySelector(".hle-row") as HTMLElement).click();
|
||||
await settle();
|
||||
const field = fieldOf(el as HTMLElement, "统计项")!;
|
||||
expect(field.querySelector(".hle-stat-row")).toBeTruthy();
|
||||
expect((field.querySelector(".hle-stat-row input") as HTMLInputElement)).toBeTruthy();
|
||||
const add = field.querySelector(".hle-stat-add, .hle-link-add") as HTMLElement;
|
||||
add.click();
|
||||
await settle();
|
||||
expect(field.querySelectorAll(".hle-stat-row").length).toBe(2);
|
||||
});
|
||||
|
||||
it("gallery:布局形态下拉含瀑布流(campus_wall)选项且选中回写", async () => {
|
||||
const config = JSON.stringify({
|
||||
home_layout: { version: 1, blocks: [{ id: "g1", type: "gallery" }] },
|
||||
});
|
||||
const { el, model } = await mountEditor(config);
|
||||
(el.querySelector(".hle-row") as HTMLElement).click();
|
||||
await settle();
|
||||
const field = fieldOf(el as HTMLElement, "布局形态")!;
|
||||
const select = field.querySelector(".ivu-select") as HTMLElement;
|
||||
expect(select).toBeTruthy();
|
||||
// 展开下拉点选 masonry
|
||||
select.querySelector(".ivu-select-selection").dispatchEvent(new MouseEvent("click", { bubbles: true }));
|
||||
await settle(8);
|
||||
const opt = [...document.querySelectorAll(".ivu-select-item")].find(n => n.textContent?.includes("瀑布流")) as HTMLElement;
|
||||
expect(opt).toBeTruthy();
|
||||
opt.click();
|
||||
await settle(8);
|
||||
expect(JSON.parse(model.value).home_layout.blocks[0].layout).toBe("masonry");
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user