60 lines
2.5 KiB
TypeScript
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);
|
|
});
|