54 lines
1.5 KiB
TypeScript
54 lines
1.5 KiB
TypeScript
import { describe, expect, it, vi } from 'vitest'
|
|
import { ipcChannels } from '../shared/ipc-channels'
|
|
import { DocumentOcrBroker } from './document-ocr-broker'
|
|
|
|
function request() {
|
|
return {
|
|
modelId: 'pp-ocrv6-tiny',
|
|
fileName: 'scan.pdf',
|
|
mimeType: 'application/pdf' as const,
|
|
data: new ArrayBuffer(8),
|
|
maximumPages: 10,
|
|
pageNumbers: [1],
|
|
pageTimeoutSeconds: 60
|
|
}
|
|
}
|
|
|
|
describe('DocumentOcrBroker', () => {
|
|
it('forwards an AbortSignal cancellation to the renderer', async () => {
|
|
const send = vi.fn()
|
|
const broker = new DocumentOcrBroker({
|
|
isDestroyed: vi.fn(() => false),
|
|
webContents: { send }
|
|
} as never)
|
|
const controller = new AbortController()
|
|
const result = broker.recognize(request(), controller.signal)
|
|
const ocrRequest = send.mock.calls.find(
|
|
([channel]) => channel === ipcChannels.documentParsingOcrRequest
|
|
)?.[1] as { requestId: string }
|
|
|
|
controller.abort()
|
|
|
|
await expect(result).rejects.toThrow('OCR 解析已取消')
|
|
expect(send).toHaveBeenCalledWith(
|
|
ipcChannels.documentParsingOcrCancel,
|
|
ocrRequest.requestId
|
|
)
|
|
broker.dispose()
|
|
})
|
|
|
|
it('rejects a request that is already cancelled', () => {
|
|
const broker = new DocumentOcrBroker({
|
|
isDestroyed: vi.fn(() => false),
|
|
webContents: { send: vi.fn() }
|
|
} as never)
|
|
const controller = new AbortController()
|
|
controller.abort()
|
|
|
|
expect(() =>
|
|
broker.recognize(request(), controller.signal)
|
|
).toThrow('OCR 解析已取消')
|
|
broker.dispose()
|
|
})
|
|
})
|