处理器此前只读 newName/name/sheetName,而 Excel_RenameSheet 目录定义 与属性面板使用 newSheet,导致已填写新表名仍报「新 Sheet 名称为空」; 补充别名回归测试
69 lines
4.5 KiB
TypeScript
69 lines
4.5 KiB
TypeScript
import { readFile, mkdtemp, rm } from "node:fs/promises";
|
|
import os from "node:os";
|
|
import path from "node:path";
|
|
import { afterEach, describe, expect, it } from "vitest";
|
|
import type { Catalog, CatalogComponent, FlowNode } from "../../shared/types";
|
|
import type { RunContext } from "../engine/types";
|
|
import { getHandler } from "../engine/registry";
|
|
import "./office";
|
|
import "./extended";
|
|
import "./office-file-extended";
|
|
import { EXCEL_COMMON_ALIASES } from "./office-aliases";
|
|
|
|
const dirs: string[] = [];
|
|
const context = {} as RunContext;
|
|
const component = {} as CatalogComponent;
|
|
const node = (id: string): FlowNode => ({ id, componentId: id, position: { x: 0, y: 0 }, values: {}, options: {} });
|
|
async function run(id: string, args: Record<string, unknown>) { const handler = getHandler(id); expect(handler, id).toBeTruthy(); return handler!(context, node(id), args, component); }
|
|
afterEach(async () => Promise.all(dirs.splice(0).map((dir) => rm(dir, { recursive: true, force: true }))));
|
|
|
|
describe("common Excel aliases", () => {
|
|
it("registers only real catalog aliases", async () => {
|
|
const catalog = JSON.parse(await readFile("resources/catalog.json", "utf8")) as Catalog;
|
|
const ids = new Set(catalog.components.map((item) => item.id));
|
|
expect(EXCEL_COMMON_ALIASES.length).toBeGreaterThanOrEqual(25);
|
|
for (const id of EXCEL_COMMON_ALIASES) { expect(ids.has(id), id).toBe(true); expect(getHandler(id), id).toBeTruthy(); }
|
|
});
|
|
|
|
it("runs a real create, write and read pipeline through alias IDs", async () => {
|
|
const directory = await mkdtemp(path.join(os.tmpdir(), "rpa-excel-alias-")); dirs.push(directory);
|
|
const handle = await run("Excel_NewExcel", { path: directory, name: "aliases.xlsx", override: "1" });
|
|
await run("Excel_WriteCellNew", { workbook: handle, sheet: "Sheet1", row: 1, column: "A", content: "alias", save: "1" });
|
|
await expect(run("Excel_ReadCellNew", { workbook: handle, sheet: "Sheet1", row: 1, column: "A" })).resolves.toBe("alias");
|
|
});
|
|
|
|
it("accepts the Excel_NewExcel catalog keys (filePath / isMakedirs)", async () => {
|
|
const directory = await mkdtemp(path.join(os.tmpdir(), "rpa-excel-new-")); dirs.push(directory);
|
|
const handle = await run("Excel_NewExcel", { filePath: directory, name: "catalog-keys.xlsx", isMakedirs: "True" }) as { path: string };
|
|
expect(handle.path).toBe(path.resolve(directory, "catalog-keys.xlsx"));
|
|
});
|
|
|
|
it("rejects a missing directory when isMakedirs is False", async () => {
|
|
const directory = path.join(await mkdtemp(path.join(os.tmpdir(), "rpa-excel-new-")), "missing");
|
|
dirs.push(directory);
|
|
await expect(run("Excel_NewExcel", { filePath: directory, name: "none.xlsx", isMakedirs: "False" })).rejects.toThrow("目录不存在");
|
|
});
|
|
|
|
it("opens a workbook through the Excel_OpenExcel filePath key", async () => {
|
|
const directory = await mkdtemp(path.join(os.tmpdir(), "rpa-excel-open-")); dirs.push(directory);
|
|
const created = await run("Excel_NewExcel", { filePath: directory, name: "open-me.xlsx" }) as { path: string };
|
|
await expect(run("Excel_OpenExcel", { filePath: created.path })).resolves.toMatchObject({ path: created.path });
|
|
});
|
|
|
|
it("renames a sheet through the Excel_RenameSheet newSheet key", async () => {
|
|
const directory = await mkdtemp(path.join(os.tmpdir(), "rpa-excel-rename-")); dirs.push(directory);
|
|
const created = await run("Excel_NewExcel", { filePath: directory, name: "rename-me.xlsx" }) as { path: string };
|
|
await expect(run("Excel_RenameSheet", { objExcel: created, sheet: "Sheet1", newSheet: "库存表", isSave: "True" })).resolves.toBeTruthy();
|
|
const reopened = await run("Excel_OpenExcel", { filePath: created.path }) as { id: string };
|
|
await expect(run("Excel_GetSheetsName", { objExcel: reopened })).resolves.toEqual(["库存表"]);
|
|
});
|
|
|
|
it("writes a range through the Excel_WriteRange catalog keys (objExcel/cellPos/data/isSave)", async () => {
|
|
const directory = await mkdtemp(path.join(os.tmpdir(), "rpa-excel-range-")); dirs.push(directory);
|
|
const created = await run("Excel_NewExcel", { filePath: directory, name: "range.xlsx" }) as { path: string };
|
|
await run("Excel_WriteRange", { objExcel: created, sheet: "Sheet1", cellPos: "B2", data: [[1, "壹"], [2, "贰"]], isSave: "True" });
|
|
const reopened = await run("Excel_OpenExcel", { filePath: created.path }) as { id: string };
|
|
await expect(run("Excel_Cs_ReadContentV2", { workbook: reopened, sheet: "Sheet1", excelRng: "B2:C3" })).resolves.toEqual([[1, "壹"], [2, "贰"]]);
|
|
});
|
|
});
|