collabSupport/tests/phoneService.cdrFeed.test.js
jmcqueen 1eaabbcee1 Add /voicereport store digest and harden Webex CDR feed handling.
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>
2026-07-24 13:43:11 -04:00

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);
});