Files
dh-inspeccion-v2/api-v3/test/unit/inspection-evidence-dto.test.ts
T

60 lines
2.5 KiB
TypeScript

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 {
InspectionCommunicationChannel,
InspectionCommunicationDirection,
InspectionCommunicationType,
InspectionEvidenceKind,
InspectionEvidencePurpose,
} from '../../src/database/entities';
import { CreateInspectionCommunicationDto } from '../../src/inspection-findings/dto/create-inspection-communication.dto';
import { CreateInspectionEvidenceDto } from '../../src/inspection-findings/dto/create-inspection-evidence.dto';
test('D4 evidence DTO transforms multipart coordinates and accepts a communication link', async () => {
const dto = plainToInstance(CreateInspectionEvidenceDto, {
kind: InspectionEvidenceKind.DOCUMENT,
purpose: InspectionEvidencePurpose.COMPANY_RESPONSE,
communicationId: 'd567722e-888f-45e8-8ac6-a8bfa6855518',
capturedAt: '2026-08-14T20:30:00.000Z',
latitude: '-32.889458',
longitude: '-68.845839',
accuracyM: '4.250',
deviceLabel: 'Panel web',
});
assert.deepEqual(await validate(dto), []);
assert.equal(dto.latitude, -32.889458);
assert.equal(dto.accuracyM, 4.25);
});
test('D4 communication DTO accepts a company response and normalizes text', async () => {
const dto = plainToInstance(CreateInspectionCommunicationDto, {
direction: InspectionCommunicationDirection.INBOUND,
channel: InspectionCommunicationChannel.EMAIL,
type: InspectionCommunicationType.COMPANY_RESPONSE,
occurredAt: '2026-08-14T20:30:00.000Z',
subject: ' Respuesta al hallazgo H001 ',
details: ' Se comprometen a corregir. ',
contactEmail: 'responsable@empresa.test',
});
assert.deepEqual(await validate(dto), []);
assert.equal(dto.subject, 'Respuesta al hallazgo H001');
assert.equal(dto.details, 'Se comprometen a corregir.');
});
test('D4 communication DTO rejects invalid email and date', async () => {
const dto = plainToInstance(CreateInspectionCommunicationDto, {
direction: InspectionCommunicationDirection.OUTBOUND,
channel: InspectionCommunicationChannel.EMAIL,
type: InspectionCommunicationType.AUTHORITY_NOTICE,
occurredAt: '14/08/2026',
subject: 'Notificación',
contactEmail: 'correo-invalido',
});
const errors = await validate(dto);
assert.equal(errors.some((error) => error.property === 'occurredAt'), true);
assert.equal(errors.some((error) => error.property === 'contactEmail'), true);
});