import { fireEvent, render, screen } from "@testing-library/react";
import { describe, expect, it, vi } from "vitest";
import { ScriptTable } from "@/components/artifact/ScriptTable";
import { ScriptElementTable } from "@/components/artifact/ScriptElementTable";
import type { ScriptElementRow, ScriptParagraphRow } from "@/lib/types";
const paragraph: ScriptParagraphRow = {
id: 1,
rowId: 1,
index: 1,
level: 1,
depth: 0,
name: "机制拆解",
contentRange: ["图1-2", "标题", "正文: 第二段"],
sections: {
theme: { label: "主题", description: "解释份额换订单", descriptionParts: [{ type: "text", text: "解释" }, { type: "element", id: 10, name: "份额换订单", resolved: true, text: "[元素:10]" }], dimensions: [{ type: "主维度", name: "核心竞争力", value: "份额换订单" }] },
form: { label: "形式", description: "案例拆解", descriptionParts: [{ type: "text", text: "案例拆解" }], dimensions: [] },
function: { label: "作用", description: "承接上文", descriptionParts: [{ type: "text", text: "承接上文" }], dimensions: [] },
feeling: { label: "感受", description: "建立可信度", descriptionParts: [{ type: "text", text: "建立可信度" }], dimensions: [] },
},
fullDescription: "通过元素解释机制。",
fullDescriptionParts: [
{ type: "text", text: "通过" },
{ type: "element", id: 10, name: "份额换订单", resolved: true, text: "[元素:10]" },
{ type: "text", text: "解释机制。" },
],
};
const element: ScriptElementRow = {
id: 10,
rowId: 10,
name: "份额换订单",
primaryDimension: "核心竞争力",
secondaryDimension: "商业模式",
paragraphs: [{ id: 1, index: 1, name: "机制拆解" }],
};
describe("full script table", () => {
it("matches the original complete table fields and element references", () => {
const openElement = vi.fn();
render();
expect(screen.getAllByText("维度类型")).toHaveLength(4);
expect(screen.getByText("核心竞争力")).toBeInTheDocument();
expect(screen.getByText("图1-2")).toBeInTheDocument();
expect(screen.getByText("正文: 第二段")).toBeInTheDocument();
fireEvent.click(screen.getAllByRole("button", { name: "份额换订单" })[0]);
expect(openElement).toHaveBeenCalledWith(10);
expect(screen.getByText("创作目录大纲(段本身)")).toBeInTheDocument();
});
it("shows element dimensions and linked paragraphs", () => {
render();
expect(screen.getByRole("row", { name: /份额换订单/ })).toHaveClass("isSelected");
expect(screen.getByText("商业模式")).toBeInTheDocument();
expect(screen.getByText("第 1 段")).toBeInTheDocument();
expect(screen.getByText("机制拆解")).toBeInTheDocument();
});
});