78 lines
3.1 KiB
TypeScript
78 lines
3.1 KiB
TypeScript
import assert from 'node:assert/strict';
|
|
import test from 'node:test';
|
|
import { plainToInstance } from 'class-transformer';
|
|
import { validate } from 'class-validator';
|
|
import { CreateAreaCompanyRelationDto } from '../../src/asset-master/dto/create-area-company-relation.dto';
|
|
import { EndAreaCompanyRelationDto } from '../../src/asset-master/dto/end-area-company-relation.dto';
|
|
import { ListAreaCompanyRelationsQueryDto } from '../../src/asset-master/dto/list-area-company-relations-query.dto';
|
|
import { ListOperationalAreasQueryDto } from '../../src/asset-master/dto/list-operational-areas-query.dto';
|
|
import { CreateAssetTypeDto } from '../../src/asset-master/dto/create-asset-type.dto';
|
|
import { AssetTypeOperationalRole } from '../../src/database/entities';
|
|
|
|
const AREA_ID = '11111111-1111-4111-8111-111111111111';
|
|
const COMPANY_ID = '22222222-2222-4222-8222-222222222222';
|
|
|
|
test('D5.3 relation DTO trims reasons and accepts UUID v4 anchors', async () => {
|
|
const dto = plainToInstance(CreateAreaCompanyRelationDto, {
|
|
areaId: AREA_ID,
|
|
companyId: COMPANY_ID,
|
|
reason: ' Contrato de explotación vigente ',
|
|
});
|
|
assert.deepEqual(await validate(dto), []);
|
|
assert.equal(dto.reason, 'Contrato de explotación vigente');
|
|
|
|
const end = plainToInstance(EndAreaCompanyRelationDto, { reason: ' Fin de contrato ' });
|
|
assert.deepEqual(await validate(end), []);
|
|
assert.equal(end.reason, 'Fin de contrato');
|
|
});
|
|
|
|
test('D5.3 relation DTO rejects incomplete identifiers and short reasons', async () => {
|
|
const dto = plainToInstance(CreateAreaCompanyRelationDto, {
|
|
areaId: 'area',
|
|
companyId: COMPANY_ID,
|
|
reason: 'x',
|
|
});
|
|
const properties = new Set((await validate(dto)).map((error) => error.property));
|
|
assert.equal(properties.has('areaId'), true);
|
|
assert.equal(properties.has('reason'), true);
|
|
});
|
|
|
|
test('D5.3 history filter accepts explicit booleans', async () => {
|
|
const query = plainToInstance(ListAreaCompanyRelationsQueryDto, {
|
|
areaId: AREA_ID,
|
|
includeHistory: 'true',
|
|
});
|
|
assert.deepEqual(await validate(query), []);
|
|
assert.equal(query.includeHistory, true);
|
|
});
|
|
|
|
|
|
test('D5.3 operational area filter validates the physical parent', async () => {
|
|
const valid = plainToInstance(ListOperationalAreasQueryDto, { parentId: AREA_ID });
|
|
assert.deepEqual(await validate(valid), []);
|
|
const invalid = plainToInstance(ListOperationalAreasQueryDto, { parentId: 'parent' });
|
|
assert.equal((await validate(invalid)).some((error) => error.property === 'parentId'), true);
|
|
});
|
|
|
|
test('D5.3 asset type operational role is constrained to the enum', async () => {
|
|
const valid = plainToInstance(CreateAssetTypeDto, {
|
|
code: 'area',
|
|
name: 'Área',
|
|
description: '',
|
|
canBeRoot: true,
|
|
operationalRole: AssetTypeOperationalRole.AREA,
|
|
allowedParentTypeIds: [],
|
|
});
|
|
assert.deepEqual(await validate(valid), []);
|
|
|
|
const invalid = plainToInstance(CreateAssetTypeDto, {
|
|
code: 'company',
|
|
name: 'Empresa',
|
|
description: '',
|
|
canBeRoot: true,
|
|
operationalRole: 'MULTI',
|
|
allowedParentTypeIds: [],
|
|
});
|
|
assert.equal((await validate(invalid)).some((error) => error.property === 'operationalRole'), true);
|
|
});
|