// tests/cdrFeedQueue.test.js import test from 'node:test'; import assert from 'node:assert/strict'; import { enqueueCdrFeedFetch, _resetCdrFeedQueueForTests, _setCdrFeedCooldownForTests, } from '../services/cdrFeedQueue.js'; test.afterEach(() => { _resetCdrFeedQueueForTests(); }); test('enqueueCdrFeedFetch runs immediately when idle', async () => { let ran = false; await enqueueCdrFeedFetch(async () => { ran = true; return 1; }); assert.equal(ran, true); }); test('enqueueCdrFeedFetch queues second call and invokes onQueued', async () => { _setCdrFeedCooldownForTests(150); let releaseFirst; const firstGate = new Promise((resolve) => { releaseFirst = resolve; }); const first = enqueueCdrFeedFetch(async () => { await firstGate; return 'first'; }); let queuedInfo = null; const second = enqueueCdrFeedFetch(async () => 'second', { onQueued: (info) => { queuedInfo = info; }, }); await new Promise((r) => setTimeout(r, 20)); assert.ok(queuedInfo, 'onQueued should fire for second caller'); assert.ok(queuedInfo.waitMs >= 100, `expected meaningful wait, got ${queuedInfo.waitMs}`); assert.equal(queuedInfo.position, 2); releaseFirst(); assert.equal(await first, 'first'); assert.equal(await second, 'second'); });