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("保留 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 }); }); });