collabSupport/tests/callReport.resolveTarget.test.js
jmcqueen a25fc08fe2 Rename /voicereport to /callreport with scoped user and phone targets.
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>
2026-07-27 10:10:03 -04:00

74 lines
2.3 KiB
JavaScript

// tests/callReport.resolveTarget.test.js
import test from 'node:test';
import assert from 'node:assert/strict';
import {
parseCallReportTarget,
parseStoreNumFromLocationName,
} from '../services/callReport/parseTarget.js';
import {
buildMatchKeysForNumber,
buildMatchKeysForPerson,
} from '../services/callTest/locationResolver.js';
test('parseCallReportTarget recognizes store numbers', () => {
assert.deepEqual(parseCallReportTarget('782'), { kind: 'store', storeNum: '782' });
assert.deepEqual(parseCallReportTarget('24'), { kind: 'store', storeNum: '24' });
});
test('parseCallReportTarget recognizes email addresses', () => {
assert.deepEqual(parseCallReportTarget('mcqueenj@ae.com'), {
kind: 'user',
email: 'mcqueenj@ae.com',
});
});
test('parseCallReportTarget recognizes phone numbers', () => {
assert.deepEqual(parseCallReportTarget('7247795574'), {
kind: 'number',
phoneNumber: '+17247795574',
});
assert.deepEqual(parseCallReportTarget('+17247795574'), {
kind: 'number',
phoneNumber: '+17247795574',
});
});
test('parseCallReportTarget rejects invalid tokens', () => {
assert.equal(parseCallReportTarget(''), null);
assert.equal(parseCallReportTarget('50782'), null);
assert.equal(parseCallReportTarget('not-a-target'), null);
});
test('parseStoreNumFromLocationName extracts store digits', () => {
assert.equal(parseStoreNumFromLocationName('Store 0782'), '782');
assert.equal(parseStoreNumFromLocationName('store 2477'), '2477');
assert.equal(parseStoreNumFromLocationName('HQ'), null);
});
test('buildMatchKeysForNumber includes phone and extension', () => {
const keys = buildMatchKeysForNumber({
phoneNumber: '+17247795574',
extension: '7841',
owner: { name: 'Jane Doe' },
});
assert.ok(keys.has('17247795574'));
assert.ok(keys.has('7841'));
assert.ok(keys.has('jane doe'));
});
test('buildMatchKeysForPerson includes email and owned numbers', () => {
const keys = buildMatchKeysForPerson(
{
displayName: 'Jane Doe',
emails: ['jane@ae.com'],
phoneNumbers: [{ value: '+15551234567' }],
},
[{ phoneNumber: '+15559876543', extension: '50782' }],
);
assert.ok(keys.has('jane@ae.com'));
assert.ok(keys.has('jane doe'));
assert.ok(keys.has('50782'));
assert.ok(keys.has('15551234567'));
});