collabSupport/tests/mppPhoneDiagnosticsRenderer.test.js
jmcqueen f7953b8eb5 Add MPP desk phone diagnostics follow-up to /phonestatus via relay.
Wire CP-78xx probe discovery, relay phone-probe commands, and a chat follow-up message so store desk phones get registration, switch, and provisioning detail alongside DECT and WAN diagnostics.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-28 18:01:01 -04:00

73 lines
2.7 KiB
JavaScript

import test from 'node:test';
import assert from 'node:assert/strict';
import fs from 'node:fs';
import path from 'node:path';
import { fileURLToPath } from 'node:url';
import { buildMppProbeView } from '../integrations/cisco-mpp-phone/aggregateProbe.js';
import { renderMppPhoneDiagnosticsMarkdown } from '../services/renderers/mppPhoneDiagnosticsRenderer.js';
const __dirname = path.dirname(fileURLToPath(import.meta.url));
const STATUS = fs.readFileSync(path.join(__dirname, 'fixtures/mpp/status-782-live.json'), 'utf8');
const DOWNLOAD = fs.readFileSync(path.join(__dirname, 'fixtures/mpp/download-status-782.json'), 'utf8');
const NS = fs.readFileSync(path.join(__dirname, 'fixtures/mpp/ns-782.json'), 'utf8');
const SYSTEM = fs.readFileSync(path.join(__dirname, 'fixtures/mpp/system-782.json'), 'utf8');
function okResult() {
const mpp = buildMppProbeView({
statusJson: STATUS,
downloadStatusJson: DOWNLOAD,
nsJson: NS,
systemJson: SYSTEM,
probes: [
{ path: '/Status.json', status: 200, sizeBytes: 12564 },
{ path: '/ns.json', status: 200, sizeBytes: 9474 },
],
});
return {
ok: true,
phone: { name: 'Store 00782 CP-7841', ip: '10.43.206.157', mac: 'CC98914F6799' },
parsed: mpp.parsed,
verdict: mpp.verdict,
mpp,
probes: mpp.probes,
};
}
test('renderMppPhoneDiagnosticsMarkdown: tier 1+2 default output', () => {
const md = renderMppPhoneDiagnosticsMarkdown([okResult()], { storeNum: '782', footer: false });
assert.match(md, /\*\*MPP Desk Phone Diagnostics — Store 782\*\*/);
assert.match(md, /Registered/);
assert.match(md, /SW00782R/);
assert.match(md, /Port 45/);
assert.match(md, /cisco\.sipflash\.com/);
assert.match(md, /MIC cert/i);
assert.doesNotMatch(md, /Probe paths:/);
});
test('renderMppPhoneDiagnosticsMarkdown: verbose includes probe table', () => {
const md = renderMppPhoneDiagnosticsMarkdown([okResult()], { storeNum: '782', verbose: true, footer: false });
assert.match(md, /Probe paths:/);
assert.match(md, /\/Status\.json/);
assert.match(md, /Ext 2:/);
});
test('renderMppPhoneDiagnosticsMarkdown: relay failure line', () => {
const md = renderMppPhoneDiagnosticsMarkdown([{
ok: false,
phone: { name: 'Phone', ip: '10.1.1.1' },
error: { message: 'relay offline', hint: 'check agent' },
}], { storeNum: '782', footer: false });
assert.match(md, /probe failed: relay offline/);
assert.match(md, /check agent/);
});
test('buildMppProbeView: merges MIC warning into verdict', () => {
const mpp = buildMppProbeView({
statusJson: STATUS,
downloadStatusJson: DOWNLOAD,
nsJson: NS,
});
assert.equal(mpp.verdict.healthy, false);
assert.ok(mpp.verdict.warnings.some((w) => /MIC cert/i.test(w)));
});