import assert from 'node:assert/strict'; import test from 'node:test'; import { OperationRegistry, operationMetadata58e2204, requireOperation } from '../src/index.ts'; import { operationAcceptanceOverrides58e2204 } from '../src/acceptance-58e2204.ts'; import { upstream58e2204Operations } from '../src/upstream-58e2204.ts'; test('explicit reviewed metadata covers every operation and preserves domain acronyms', () => { assert.equal(Object.keys(operationMetadata58e2204).length, 117); assert.deepEqual( Object.keys(operationMetadata58e2204).toSorted(), upstream58e2204Operations.map(({ operationId }) => operationId).toSorted(), ); for (const [operationId, metadata] of Object.entries(operationMetadata58e2204)) { assert.match(metadata.title, /\S/); assert.equal(metadata.parameterSchemaId, `simadmin.58e2204.${operationId}.parameters.v1`); } const titles = Object.values(operationMetadata58e2204) .map(({ title }) => title) .join(' '); for (const acronym of ['SMS', 'APN', 'DDNS', 'WLAN', 'IMS', 'OTA', 'LPAC', 'eUICC', 'ICCID']) { assert.match(titles, new RegExp(`\\b${acronym}\\b`), acronym); } }); test('constructor rejects missing/extra/blank/malformed metadata and freezes metadata fields', () => { const rows = upstream58e2204Operations; const missing = { ...operationMetadata58e2204 } as Record; delete missing.getDevice; assert.throws( () => new OperationRegistry(rows, operationAcceptanceOverrides58e2204, missing as never), /missing operation metadata: getDevice/, ); const extra = { ...operationMetadata58e2204, inventedOperation: { title: 'Invented', parameterSchemaId: 'simadmin.58e2204.inventedOperation.parameters.v1', }, }; assert.throws( () => new OperationRegistry(rows, operationAcceptanceOverrides58e2204, extra), /extra operation metadata: inventedOperation/, ); const blank = { ...operationMetadata58e2204, getDevice: { ...operationMetadata58e2204.getDevice, title: ' ' }, }; assert.throws( () => new OperationRegistry(rows, operationAcceptanceOverrides58e2204, blank), /blank operation title: getDevice/, ); const malformed = { ...operationMetadata58e2204, getDevice: { ...operationMetadata58e2204.getDevice, parameterSchemaId: '../schema' }, }; assert.throws( () => new OperationRegistry(rows, operationAcceptanceOverrides58e2204, malformed), /invalid parameter schema id: getDevice/, ); const descriptor = requireOperation('getDevice'); assert.equal(descriptor.title, 'Get Device'); assert.equal(descriptor.parameterSchemaId, 'simadmin.58e2204.getDevice.parameters.v1'); assert.ok(Object.isFrozen(descriptor)); });