Casos de prueba del backend
Catálogo de los casos de uso cubiertos por los tests del backend NestJS (rama feat/meta_connections). Cada página lista, por spec y por describe, los it() reales con su escenario (given/when), resultado esperado (then) y mocks utilizados. Complementa la guía general de Testing.
Organización
- Ubicación: los specs conviven con el código (
*.spec.tsjunto al servicio, controlador, repositorio, helper o job) bajosrc/; el único E2E está entest/app.e2e-spec.ts. - Jest unitario: config en
package.json(rootDir: src,testRegex: .*\.spec\.ts$,ts-jest,testEnvironment: node,maxWorkers: 4, cobertura en../coverage). - Jest E2E:
test/jest-e2e.json(testRegex: .e2e-spec.ts$). - Tipos:
- Unitarios con dependencias mockeadas (
jest.fn(),Test.createTestingModuleconuseValue). - Integración con
mongodb-memory-servery modelos Mongoose reales (repositorios, servicios de ticket, inbound de Meta, seeds, migraciones). Se reconocen por el nombre*.integration.spec.tso por usar la base en memoria aunque el archivo sea.spec.ts. - Controladores con
supertesty guards reales (AuthGuard,PermissionsGuard) sobre un módulo mínimo, conFakeAuthGuardoPermissionResolverService.resolvemockeado. - Un spec con Redis real (
scheduled-message-queue.service.redis.integration.spec.ts) que se omite solo si Redis no está disponible.
- Unitarios con dependencias mockeadas (
Comandos
npm run test # unitarios + integración (*.spec.ts)
npm run test:watch
npm run test:cov # cobertura
npm run test:e2e # test/app.e2e-spec.ts
npm run test:ci # scripts/test-runner.js (requiere TESTING=true)
Convenciones de mocking
- Repositorios, colas BullMQ, Redis, gateways de sockets y clientes externos (Graph API de Meta, S3) se reemplazan con objetos
jest.fn(). baileys(solo ESM) se mockea conjest.mockantes de cualquier import en los specs de WhatsApp.- Los guards se prueban con
ExecutionContextfalsos, o reales sobresupertestcuando se valida 401/403. - Los tokens y secretos de Meta se prueban cifrados (
iv,tag,ciphertext); los specs verifican que no aparezcan en logs. - No existe helper global de mocks: cada spec define sus fábricas locales.
Resumen de cobertura
Aproximadamente 166 archivos de spec, unos 2 100 casos it() documentados (los it.each se documentan una vez por título; en ejecución se expanden a más tests).
| Página | Área | Casos |
|---|---|---|
| Core | Guards, crypto, storage, filtros, interceptores, utils | 94 |
| Bootstrap y config | CORS, env, migraciones, seeds, E2E | 59 |
| Auth y API keys | Login, API keys | 48 |
| Usuarios y departamentos | User, Department | 132 |
| RBAC | Role, permisos, catálogo, módulos | 127 |
| Tenant | Tenants y solicitudes externas | 82 |
| Ticket: servicios | Servicio, horarios, efectos de resolución | 142 |
| Ticket: integración | Asignación, mensajes de conexión, traspaso | 108 |
| Ticket: API y jobs | Controladores, DTOs, jobs, repositorios | 106 |
| Message: servicios | Pipeline inbound, router, plantillas, locks | 105 |
| Message: API y repositorios | Controladores y repositorios | 117 |
| Mensajería auxiliar | Starred, respuestas rápidas, labels, system-message | 132 |
| File | Archivos | 38 |
| Meta: inbound | Webhooks, normalizador, firma | 104 |
| Meta: outbound y OAuth | OAuth, Graph, dispatcher, refresh de token | 68 |
| Connection | Conexiones | 51 |
| Baileys, inbound, outbound, sesiones | 151 | |
| Widget | Widget web | 30 |
| Chat gateway | Sockets, presencia, broadcast | 175 |
| Chat interno | Conversaciones internas | 66 |
| Contact | Contactos | 52 |
| Scheduled message | Mensajes programados | 79 |
| Settings y queue | Ajustes del tenant, horarios, módulo de colas | 36 |
Lo que NO está cubierto
- Módulo
dashboard: sin ningún spec. - E2E: solo existe
app.e2e-spec.ts, que verifica el arranque yHello World!; no hay E2E por flujo de negocio. src/main.ts,src/database/seeds/run-seed.tsy los scripts descripts/no tienen specs.- No hay umbral de cobertura configurado en Jest;
npm run test:covsolo genera el reporte. - Dos tests de
chat.gateway.spec.tsestán conit.skip(autenticación legacysendType: 'user'). - Integraciones externas reales (Meta Graph, S3, WhatsApp/Baileys) siempre están mockeadas; no hay tests contra servicios reales.