office.test.ts 1.2 KB

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