import 'reflect-metadata'; import assert from 'node:assert/strict'; import test from 'node:test'; import { validate } from 'class-validator'; import { CreateRoleDto } from '../../src/administration/roles/dto/create-role.dto'; import { CreateUserDto } from '../../src/administration/users/dto/create-user.dto'; const ROLE_ID = '9c3e6a45-8de3-4acf-a078-7994168231f7'; const PERMISSION_ID = '35f62a40-5fd0-4ee7-89fc-381c3c0eceaf'; test('CreateUserDto accepts a controlled temporary credential and role ids', async () => { const dto = Object.assign(new CreateUserDto(), { username: 'nuevo.inspector', email: 'inspector@example.com', password: 'Temporal-segura-2026', firstName: 'Nuevo', lastName: 'Inspector', mustChangePassword: true, roleIds: [ROLE_ID], }); assert.deepEqual(await validate(dto), []); }); test('CreateUserDto rejects weak passwords and malformed role ids', async () => { const dto = Object.assign(new CreateUserDto(), { username: 'nuevo inspector', password: 'corta', firstName: 'Nuevo', lastName: 'Inspector', roleIds: ['no-es-uuid'], }); const properties = new Set((await validate(dto)).map((error) => error.property)); assert.equal(properties.has('username'), true); assert.equal(properties.has('password'), true); assert.equal(properties.has('roleIds'), true); }); test('CreateRoleDto validates dynamic permission identifiers', async () => { const dto = Object.assign(new CreateRoleDto(), { code: 'coordinador_campo', name: 'Coordinador de campo', description: 'Coordina equipos operativos', permissionIds: [PERMISSION_ID], }); assert.deepEqual(await validate(dto), []); });