import 'reflect-metadata'; import assert from 'node:assert/strict'; import test from 'node:test'; import { plainToInstance } from 'class-transformer'; import { validate } from 'class-validator'; import { CancelInspectionActDto } from '../../src/inspection-acts/dto/cancel-inspection-act.dto'; import { CreateInspectionActDto } from '../../src/inspection-acts/dto/create-inspection-act.dto'; const ASSET_ID = '16e54e65-60cf-4739-b0d1-ccdd904fbfd5'; test('inspection act DTO accepts content and selected visit assets', async () => { const dto = plainToInstance(CreateInspectionActDto, { occurredAt: '2026-08-14T15:30:00.000Z', title: ' Verificación de instalación ', summary: ' Se inspeccionó el activo seleccionado. ', observations: ' Sin novedades. ', assetIds: [ASSET_ID], }); assert.deepEqual(await validate(dto), []); assert.equal(dto.title, 'Verificación de instalación'); assert.equal(dto.summary, 'Se inspeccionó el activo seleccionado.'); assert.equal(dto.observations, 'Sin novedades.'); }); test('inspection act DTO rejects duplicate assets', async () => { const dto = plainToInstance(CreateInspectionActDto, { occurredAt: '2026-08-14T15:30:00.000Z', title: 'Acta', summary: 'Contenido', assetIds: [ASSET_ID, ASSET_ID], }); assert.equal((await validate(dto)).some((error) => error.property === 'assetIds'), true); }); test('cancellation requires a meaningful reason', async () => { const invalid = plainToInstance(CancelInspectionActDto, { reason: ' breve ' }); const valid = plainToInstance(CancelInspectionActDto, { reason: ' Error de carga confirmado ' }); assert.equal((await validate(invalid)).some((error) => error.property === 'reason'), true); assert.deepEqual(await validate(valid), []); assert.equal(valid.reason, 'Error de carga confirmado'); });