wbxcallprov/test/dect.test.js
jmcqueen 6b585bf33f
Some checks failed
CI / verify (push) Has been cancelled
Add /provisionPhone for wired desk phones (7841/7821)
New /provisionPhone <storeNumber> command manages the store user's
wired desk phones via the same card pattern as /provisionDect:
multi-select checkbox list that doubles as the display, MACs render
as AA:BB:CC:DD:EE:FF, model dropdown for add (defaults to 7841),
side-by-side Add / Remove-checked actions, and every removal goes
through an explicit confirm card. Adds are idempotent (MACs already
registered are skipped) and bulk MAC input is supported.

DECT handsets are filtered out of the display so /provisionPhone and
/provisionDect coexist cleanly on the same store user without
overlapping responsibilities.

Refactors:
- Extract MAC helpers (normalize/format/display) to src/utils/mac.js
  so both DECT and wired-phone flows share one implementation. dect.js
  re-exports for backward compat with existing consumers.
- Add parseEmailArg helper; migrate /userInfo to use it.

Tests: pure-logic coverage for WIRED_PHONE_MODELS,
isSupportedWiredModel, filterWiredPhones (DECT/model filter), and
parseEmailArg.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-07 12:39:06 -04:00

38 lines
1.5 KiB
JavaScript

import { describe, it } from 'node:test';
import assert from 'node:assert/strict';
import { dectNetworkName, generateDectAccessCode } from '../src/webex/dect.js';
// AE's access code convention: 4-digit stores use their own digits; anything
// shorter prefixes '8' and pads the rest to 3. Ports collabFinder's rule
// verbatim so cross-project behaviour stays in sync.
describe('generateDectAccessCode', () => {
it('uses the store number verbatim for 4-digit stores', () => {
assert.equal(generateDectAccessCode(1234), '1234');
assert.equal(generateDectAccessCode('0499'), '0499');
});
it('truncates 5+ digit stores to the first 4', () => {
assert.equal(generateDectAccessCode(12345), '1234');
});
it("prefixes '8' and pads for shorter stores", () => {
assert.equal(generateDectAccessCode(347), '8347');
assert.equal(generateDectAccessCode(67), '8067');
assert.equal(generateDectAccessCode(1), '8001');
});
it('strips non-digit characters from the input', () => {
assert.equal(generateDectAccessCode('4-9-9'), '8499');
assert.equal(generateDectAccessCode('Store 1234'), '1234');
});
});
describe('dectNetworkName', () => {
it('produces the canonical "Store XXXX" name (4-digit padding)', () => {
assert.equal(dectNetworkName(499), 'Store 0499');
assert.equal(dectNetworkName(1), 'Store 0001');
assert.equal(dectNetworkName(1234), 'Store 1234');
assert.equal(dectNetworkName('67'), 'Store 0067');
});
});