Persist offer assistant jobs and recover results across closed views
This commit is contained in:
@@ -0,0 +1,18 @@
|
||||
import test from 'node:test';
|
||||
import assert from 'node:assert/strict';
|
||||
import {runDurableAiJob} from '../src/services/aiJobs.js';
|
||||
test('durable client polls separate requests until completion and creates a job only once',async()=>{
|
||||
let calls=0;const states=[];
|
||||
const result=await runDurableAiJob('teklif-taslak',{ikn:'2026/1'},{check:()=>{},pollMs:1,onProgress:job=>states.push(job.state),request:async(url,options)=>{
|
||||
calls++;
|
||||
if(calls===1){assert.equal(options.method,'POST');assert.ok(JSON.parse(options.body).requestId);return {job:{id:'a',state:'queued'}};}
|
||||
assert.ok(url.includes('id=a'));assert.equal(options.method,undefined);
|
||||
return calls===2?{job:{id:'a',state:'running'}}:{job:{id:'a',state:'completed',result:{success:true}}};
|
||||
}});
|
||||
assert.deepEqual(states,['queued','running','completed']);assert.equal(calls,3);assert.equal(result.success,true);
|
||||
});
|
||||
test('closing the viewer stops polling without deleting a durable job',async()=>{
|
||||
const controller=new AbortController();let calls=0;
|
||||
await assert.rejects(runDurableAiJob('belge-sor',{ikn:'2026/1'},{signal:controller.signal,check:()=>controller.signal.throwIfAborted(),pollMs:1,onProgress:()=>controller.abort(),request:async()=>{calls++;return {job:{id:'a',state:'running'}};}}),{name:'AbortError'});
|
||||
assert.equal(calls,1);
|
||||
});
|
||||
Reference in New Issue
Block a user