import * as Store from '../../../internal/Store.js' import * as ScreenManager from './ScreenManager.js' describe('create', () => { test('screens participants concurrently and reuses cached results', async () => { const calls: string[] = [] let active = 0 let maxActive = 0 const manager = ScreenManager.create({ chainId: 4217, provider: { async screen({ address }) { active++ maxActive = Math.max(maxActive, active) calls.push(address) await Promise.resolve() active-- return { allowed: true } }, }, store: Store.memory(), }) const addresses = [`0x${'aa'.repeat(20)}`, `0x${'bb'.repeat(20)}`] await manager.screen(addresses) await manager.screen(addresses) expect(calls).toEqual(addresses) expect(maxActive).toBe(2) }) test('rejects a payment when any participant fails screening', async () => { const manager = ScreenManager.create({ chainId: 4217, provider: { async screen() { return { allowed: false } }, }, store: Store.memory(), }) await expect(manager.screen([`0x${'aa'.repeat(20)}`])).rejects.toThrow( ScreenManager.RejectedError, ) }) test('uses the configured cache lifetime', async () => { let calls = 0 const manager = ScreenManager.create({ chainId: 4217, provider: { async screen() { calls++ return { allowed: true } }, }, store: Store.memory(), ttl: 0, }) const addresses = [`0x${'aa'.repeat(20)}`] await manager.screen(addresses) await manager.screen(addresses) expect(calls).toBe(2) }) })