65 lines
2.7 KiB
TypeScript
65 lines
2.7 KiB
TypeScript
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<string, unknown>;
|
|
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));
|
|
});
|