23 lines
789 B
TypeScript
23 lines
789 B
TypeScript
|
|
import assert from 'node:assert/strict'
|
||
|
|
import test from 'node:test'
|
||
|
|
|
||
|
|
import {isCurrentConversationResponse,reuseInFlightRequest} from '../src/conversationRequests.ts'
|
||
|
|
|
||
|
|
test('a late response from the previously selected conversation is ignored', () => {
|
||
|
|
assert.equal(isCurrentConversationResponse('gameflix','codexpi-self'),false)
|
||
|
|
assert.equal(isCurrentConversationResponse('gameflix','gameflix'),true)
|
||
|
|
})
|
||
|
|
|
||
|
|
test('simultaneous refreshes reuse one request and release it after completion', async () => {
|
||
|
|
const requests=new Map<string,Promise<number>>()
|
||
|
|
let calls=0
|
||
|
|
const load=()=>reuseInFlightRequest(requests,'conversation',async()=>++calls)
|
||
|
|
|
||
|
|
const first=load()
|
||
|
|
const second=load()
|
||
|
|
|
||
|
|
assert.equal(first,second)
|
||
|
|
assert.equal(await first,1)
|
||
|
|
assert.equal(await load(),2)
|
||
|
|
})
|