57 lines
2.3 KiB
TypeScript
57 lines
2.3 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 { 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);
|
|
});
|