Files
dh-inspeccion-v2/api-v3/test/unit/asset-attribute-validator.test.ts

72 lines
2.3 KiB
TypeScript

import assert from 'node:assert/strict';
import test from 'node:test';
import { validateAssetAttributeValues } from '../../src/asset-master/asset-attribute-validator';
import {
AssetAttributeDataType,
type AssetAttributeDefinition,
} from '../../src/database/entities';
function definition(
id: string,
name: string,
dataType: AssetAttributeDataType,
overrides: Partial<AssetAttributeDefinition> = {},
): AssetAttributeDefinition {
return {
id,
name,
code: name.toLowerCase(),
dataType,
assetTypeId: '16e54e65-60cf-4739-b0d1-ccdd904fbfd5',
isRequired: false,
isActive: true,
unit: null,
options: null,
sortOrder: 0,
createdAt: new Date(),
updatedAt: new Date(),
...overrides,
};
}
test('normalizes configured values without accepting arbitrary attributes', () => {
const definitions = [
definition('7450ea58-6348-4cfc-88f1-e0f3bcd38913', 'Presión', AssetAttributeDataType.NUMBER),
definition('f82088f8-6fc0-46c9-98b2-d694f80449c3', 'Crítico', AssetAttributeDataType.BOOLEAN),
];
assert.deepEqual(validateAssetAttributeValues(definitions, {
[definitions[0]!.id]: 12.5,
[definitions[1]!.id]: false,
}), [
{ definitionId: definitions[0]!.id, value: 12.5 },
{ definitionId: definitions[1]!.id, value: false },
]);
assert.throws(() => validateAssetAttributeValues(definitions, { unknown: 'value' }));
});
test('enforces required, date and selection semantics', () => {
const requiredDate = definition(
'880d0cdf-2400-4892-9a78-bcd8e7a3e270',
'Instalación',
AssetAttributeDataType.DATE,
{ isRequired: true },
);
const selector = definition(
'26430113-1116-45f0-a1d5-f96858e97b2e',
'Clase',
AssetAttributeDataType.SELECT,
{ options: ['A', 'B'] },
);
assert.throws(() => validateAssetAttributeValues([requiredDate], {}));
assert.throws(() => validateAssetAttributeValues([requiredDate], { [requiredDate.id]: '2026-02-30' }));
assert.throws(() => validateAssetAttributeValues([selector], { [selector.id]: 'C' }));
assert.deepEqual(validateAssetAttributeValues([requiredDate, selector], {
[requiredDate.id]: '2026-08-13',
[selector.id]: 'B',
}), [
{ definitionId: requiredDate.id, value: '2026-08-13' },
{ definitionId: selector.id, value: 'B' },
]);
});