Cancel PDF reading and OCR when the offer assistant closes
This commit is contained in:
@@ -0,0 +1,28 @@
|
||||
import {test} from 'node:test';
|
||||
import assert from 'node:assert/strict';
|
||||
import {readPdfPages} from '../src/services/pdfDocumentReader.js';
|
||||
import {awaitWithAbort} from '../src/services/abortable.js';
|
||||
test('cancelling pending OCR cleans the page and prevents reading subsequent pages',async()=>{
|
||||
const c=new AbortController();let reads=0,cleanups=0;
|
||||
const doc={numPages:3,getPage:async()=>{reads++;return {getTextContent:async()=>({items:[]}),cleanup:()=>cleanups++};}};
|
||||
await assert.rejects(readPdfPages(doc,{signal:c.signal,ocrPage:async()=>{c.abort();return new Promise(()=>{});}}),{name:'AbortError'});
|
||||
assert.equal(reads,1);assert.equal(cleanups,1);
|
||||
});
|
||||
test('late page acquisition after cancellation cleans the acquired page',async()=>{
|
||||
const c=new AbortController();let release,cleanups=0;
|
||||
const pending=readPdfPages({numPages:1,getPage:()=>new Promise(resolve=>release=resolve)},{signal:c.signal});
|
||||
c.abort();await assert.rejects(pending,{name:'AbortError'});
|
||||
release({cleanup:()=>cleanups++});await Promise.resolve();await Promise.resolve();
|
||||
assert.equal(cleanups,1);
|
||||
});
|
||||
test('abort invokes resource cancellation once even if work settles later',async()=>{
|
||||
const c=new AbortController();let release,cancelled=0;
|
||||
const pending=awaitWithAbort(new Promise(resolve=>release=resolve),c.signal,()=>cancelled++);
|
||||
c.abort();await assert.rejects(pending,{name:'AbortError'});
|
||||
release('late');await Promise.resolve();assert.equal(cancelled,1);
|
||||
});
|
||||
test('normal completion removes cancellation callbacks',async()=>{
|
||||
const c=new AbortController();let cancelled=0;
|
||||
assert.equal(await awaitWithAbort(Promise.resolve('source'),c.signal,()=>cancelled++),'source');
|
||||
c.abort();assert.equal(cancelled,0);
|
||||
});
|
||||
Reference in New Issue
Block a user