108 lines
2.6 KiB
TypeScript
108 lines
2.6 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
||
import {
|
||
ApplicationRequestError,
|
||
DocxExportServiceError
|
||
} from "@md-to-pdf/application";
|
||
import { toDesktopDocxExportFailure } from "../src/docx-contract.js";
|
||
|
||
describe("Desktop DOCX IPC 契约", () => {
|
||
it("映射应用请求错误", () => {
|
||
expect(
|
||
toDesktopDocxExportFailure(
|
||
new ApplicationRequestError(
|
||
400,
|
||
"INVALID_EXPORT_CONFIG",
|
||
"导出配置无效"
|
||
)
|
||
)
|
||
).toEqual({
|
||
ok: false,
|
||
error: "INVALID_EXPORT_CONFIG",
|
||
message: "导出配置无效",
|
||
retryable: false
|
||
});
|
||
});
|
||
|
||
it("保留共享服务的重试语义", () => {
|
||
expect(
|
||
toDesktopDocxExportFailure(
|
||
new DocxExportServiceError(
|
||
429,
|
||
"DOCX_QUEUE_FULL",
|
||
"DOCX 生成队列已满",
|
||
true
|
||
)
|
||
)
|
||
).toEqual({
|
||
ok: false,
|
||
error: "DOCX_QUEUE_FULL",
|
||
message: "DOCX 生成队列已满",
|
||
retryable: true
|
||
});
|
||
});
|
||
|
||
it("仅透传格式受控的桌面媒体超时详情", () => {
|
||
expect(
|
||
toDesktopDocxExportFailure(
|
||
new DocxExportServiceError(
|
||
500,
|
||
"DOCX_GENERATION_FAILED",
|
||
"DOCX 导出失败",
|
||
false,
|
||
{ cause: new Error("桌面 DOCX 媒体布局超过 30000ms") }
|
||
)
|
||
)
|
||
).toMatchObject({
|
||
message: "DOCX 导出失败:桌面 DOCX 媒体布局超过 30000ms"
|
||
});
|
||
expect(
|
||
toDesktopDocxExportFailure(
|
||
new DocxExportServiceError(
|
||
500,
|
||
"DOCX_GENERATION_FAILED",
|
||
"DOCX 导出失败",
|
||
false,
|
||
{
|
||
cause: new Error(
|
||
"桌面 DOCX 第 2/7 个媒体(echarts)PNG 捕获超过 20000ms"
|
||
)
|
||
}
|
||
)
|
||
)
|
||
).toMatchObject({
|
||
message:
|
||
"DOCX 导出失败:桌面 DOCX 第 2/7 个媒体(echarts)PNG 捕获超过 20000ms"
|
||
});
|
||
});
|
||
|
||
it("保留 Front Matter 解析错误", () => {
|
||
expect(
|
||
toDesktopDocxExportFailure(
|
||
new ApplicationRequestError(
|
||
400,
|
||
"INVALID_FRONT_MATTER",
|
||
"无法解析 Markdown Front Matter"
|
||
)
|
||
)
|
||
).toEqual({
|
||
ok: false,
|
||
error: "INVALID_FRONT_MATTER",
|
||
message: "无法解析 Markdown Front Matter",
|
||
retryable: false
|
||
});
|
||
});
|
||
|
||
it("隐藏未知主进程错误细节", () => {
|
||
expect(
|
||
toDesktopDocxExportFailure(
|
||
new Error("C:\\secret\\pandoc.exe 启动失败")
|
||
)
|
||
).toEqual({
|
||
ok: false,
|
||
error: "DOCX_GENERATION_FAILED",
|
||
message: "DOCX 导出失败",
|
||
retryable: false
|
||
});
|
||
});
|
||
});
|