Files
geointel/frontend/src/hooks/useMapThemeSelectionInsights.test.ts
T
Codex e2c90da11d
GeoIntel release gates / Compile, test, contracts and builds (push) Canceled after 0s
GeoIntel release gates / Python and npm vulnerability policy (push) Canceled after 0s
GeoIntel release gates / GIS image, SBOM and container scan (push) Canceled after 0s
fix(map): read all relevant selection sources
2026-07-19 17:54:07 +02:00

41 lines
1.4 KiB
TypeScript

import { describe, expect, it } from 'vitest'
import { settleWithConcurrency } from './useMapThemeSelectionInsights'
describe('settleWithConcurrency', () => {
it('keeps result order and never exceeds the acquisition limit', async () => {
let active = 0
let maximumActive = 0
const results = await settleWithConcurrency([0, 1, 2, 3, 4, 5], 3, async (value) => {
active += 1
maximumActive = Math.max(maximumActive, active)
await new Promise((resolve) => setTimeout(resolve, (5 - value) * 2))
active -= 1
return value * 10
})
expect(maximumActive).toBe(3)
expect(results).toEqual([
{ status: 'fulfilled', value: 0 },
{ status: 'fulfilled', value: 10 },
{ status: 'fulfilled', value: 20 },
{ status: 'fulfilled', value: 30 },
{ status: 'fulfilled', value: 40 },
{ status: 'fulfilled', value: 50 },
])
})
it('retains individual acquisition failures without stopping the queue', async () => {
const results = await settleWithConcurrency(['ok', 'fail', 'later'], 2, async (value) => {
if (value === 'fail') {
throw new Error('provider unavailable')
}
return value.toUpperCase()
})
expect(results[0]).toEqual({ status: 'fulfilled', value: 'OK' })
expect(results[1].status).toBe('rejected')
expect(results[2]).toEqual({ status: 'fulfilled', value: 'LATER' })
})
})