Add store/email/phone filtering, richer call-line formatting, CDR feed pagination and queueing, and split Jira poller enrichment into testable modules. Co-authored-by: Cursor <cursoragent@cursor.com>
46 lines
1.3 KiB
JavaScript
46 lines
1.3 KiB
JavaScript
// 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');
|
|
});
|