72 lines
2.3 KiB
TypeScript
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' },
|
|
]);
|
|
});
|