Groups cdr_feed legs by Correlation ID for call-level summaries, fixes report-column field parsing and Docker proxy routing, and adds /calltest post-call Twilio and CDR enrichment. Co-authored-by: Cursor <cursoragent@cursor.com>
61 lines
2 KiB
JavaScript
61 lines
2 KiB
JavaScript
import test from 'node:test';
|
|
import assert from 'node:assert/strict';
|
|
import { extractCdrFeedList } from '../services/cdrFeedParser.js';
|
|
import {
|
|
cdrDedupKey,
|
|
cdrStartTime,
|
|
cdrCallingNumber,
|
|
} from '../services/cdrFeedParser.js';
|
|
import { filterCdrToWindow } from '../services/voiceReport/joinCallQuality.js';
|
|
|
|
test('extractCdrFeedList handles items array', () => {
|
|
const rows = [{ id: 1 }, { id: 2 }];
|
|
assert.deepEqual(extractCdrFeedList({ items: rows }), rows);
|
|
});
|
|
|
|
test('extractCdrFeedList handles numeric-keyed items object', () => {
|
|
const rows = [{ id: 'a' }, { id: 'b' }];
|
|
assert.deepEqual(extractCdrFeedList({ items: { 0: rows[0], 1: rows[1] } }), rows);
|
|
});
|
|
|
|
test('extractCdrFeedList handles top-level array', () => {
|
|
const rows = [{ id: 1 }];
|
|
assert.deepEqual(extractCdrFeedList(rows), rows);
|
|
});
|
|
|
|
test('extractCdrFeedList handles records alias', () => {
|
|
const rows = [{ id: 1 }];
|
|
assert.deepEqual(extractCdrFeedList({ records: rows }), rows);
|
|
});
|
|
|
|
test('cdrField reads report column labels', () => {
|
|
const row = {
|
|
'Report ID': 'abc-1',
|
|
'Start time': '2026-07-23T14:00:00.000Z',
|
|
'Calling number': '+15551234567',
|
|
'Called number': '+12122194600',
|
|
Duration: 42,
|
|
Direction: 'Inbound',
|
|
};
|
|
assert.equal(cdrStartTime(row), '2026-07-23T14:00:00.000Z');
|
|
assert.equal(cdrCallingNumber(row), '+15551234567');
|
|
assert.equal(cdrDedupKey(row), 'id:abc-1');
|
|
});
|
|
|
|
test('cdrDedupKey keeps distinct report rows', () => {
|
|
const a = { 'Report ID': '1', 'Start time': '2026-07-23T14:00:00.000Z' };
|
|
const b = { 'Report ID': '2', 'Start time': '2026-07-23T15:00:00.000Z' };
|
|
assert.notEqual(cdrDedupKey(a), cdrDedupKey(b));
|
|
});
|
|
|
|
test('filterCdrToWindow keeps API rows when start time is report-labeled', () => {
|
|
const window = {
|
|
startTime: '2026-07-23T13:00:00.000Z',
|
|
endTime: '2026-07-24T01:00:00.000Z',
|
|
};
|
|
const rows = [
|
|
{ 'Start time': '2026-07-23T14:00:00.000Z', 'Report ID': '1' },
|
|
{ 'Start time': '2026-07-23T15:00:00.000Z', 'Report ID': '2' },
|
|
];
|
|
assert.equal(filterCdrToWindow(rows, window).length, 2);
|
|
});
|