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 { CreateCompanyOutcomeDto } from '../../src/inspection-closing/dto/create-company-outcome.dto'; import { CreateInspectionSignatureDto } from '../../src/inspection-closing/dto/create-inspection-signature.dto'; import { UpsertInspectionResponsibleDto } from '../../src/inspection-closing/dto/upsert-inspection-responsible.dto'; test('D5 present responsible requires identity and position', async () => { const valid = plainToInstance(UpsertInspectionResponsibleDto, { attendanceStatus: 'PRESENT', fullName: ' Responsable Empresa ', documentType: 'DNI', documentNumber: '12345678', position: 'Encargado', email: 'responsable@empresa.test', }); assert.deepEqual(await validate(valid), []); assert.equal(valid.fullName, 'Responsable Empresa'); const invalid = plainToInstance(UpsertInspectionResponsibleDto, { attendanceStatus: 'PRESENT', }); assert.equal((await validate(invalid)).length > 0, true); }); test('D5 absent responsible and company outcome require a detailed reason', async () => { const responsible = plainToInstance(UpsertInspectionResponsibleDto, { attendanceStatus: 'ABSENT', absenceReason: 'No había personal responsable en el establecimiento.', }); assert.deepEqual(await validate(responsible), []); const outcome = plainToInstance(CreateCompanyOutcomeDto, { status: 'ABSENT', reason: 'Se dejó constancia ante el personal presente.', }); assert.deepEqual(await validate(outcome), []); const invalid = plainToInstance(CreateCompanyOutcomeDto, { status: 'SIGNED', reason: 'Motivo suficientemente extenso', }); assert.equal((await validate(invalid)).some((error) => error.property === 'status'), true); }); test('D5 signature DTO transforms multipart consent and coordinates', async () => { const dto = plainToInstance(CreateInspectionSignatureDto, { consentAccepted: 'true', clientSignedAt: '2026-08-15T01:02:03.000Z', latitude: '-32.889458', longitude: '-68.845839', accuracyM: '5.5', }); assert.deepEqual(await validate(dto), []); assert.equal(dto.consentAccepted, true); assert.equal(dto.latitude, -32.889458); });