import fs from 'node:fs' import path from 'node:path' import { describe, expect, it } from 'vitest' import { config } from '../src/config' import { convertDocument } from '../src/services/office' // 真实调用 LibreOffice(约数秒),验证独立沙箱中的转换可用 describe('convertDocument', () => { const ws = path.join(config.dataDir, 'workspaces/ses_office') fs.mkdirSync(ws, { recursive: true }) fs.writeFileSync(path.join(ws, '中文 报告.txt'), '你好,LibreOffice') it('把工作区内的文件转换为 PDF(中文文件名)', async () => { const out = await convertDocument({ workspaceDir: ws, input: '中文 报告.txt', format: 'pdf' }) expect(out).toBe(path.join(fs.realpathSync(ws), 'outputs/中文 报告.pdf')) expect(fs.readFileSync(out).subarray(0, 4).toString()).toBe('%PDF') }, 120_000) it('拒绝工作区以外的输入和输出', async () => { await expect(convertDocument({ workspaceDir: ws, input: '/etc/hostname', format: 'pdf' })).rejects.toThrow(/工作区内/) await expect(convertDocument({ workspaceDir: ws, input: '中文 报告.txt', format: 'pdf', outDir: '/tmp' })).rejects.toThrow(/工作区内/) }) })