chore: import DH V2 D5.6.4 production baseline
This commit is contained in:
@@ -0,0 +1,71 @@
|
||||
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' },
|
||||
]);
|
||||
});
|
||||
Reference in New Issue
Block a user