Skip to main content

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.ts junto al servicio, controlador, repositorio, helper o job) bajo src/; el único E2E está en test/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.createTestingModule con useValue).
    • Integración con mongodb-memory-server y modelos Mongoose reales (repositorios, servicios de ticket, inbound de Meta, seeds, migraciones). Se reconocen por el nombre *.integration.spec.ts o por usar la base en memoria aunque el archivo sea .spec.ts.
    • Controladores con supertest y guards reales (AuthGuard, PermissionsGuard) sobre un módulo mínimo, con FakeAuthGuard o PermissionResolverService.resolve mockeado.
    • Un spec con Redis real (scheduled-message-queue.service.redis.integration.spec.ts) que se omite solo si Redis no está disponible.

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 con jest.mock antes de cualquier import en los specs de WhatsApp.
  • Los guards se prueban con ExecutionContext falsos, o reales sobre supertest cuando 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ÁreaCasos
CoreGuards, crypto, storage, filtros, interceptores, utils94
Bootstrap y configCORS, env, migraciones, seeds, E2E59
Auth y API keysLogin, API keys48
Usuarios y departamentosUser, Department132
RBACRole, permisos, catálogo, módulos127
TenantTenants y solicitudes externas82
Ticket: serviciosServicio, horarios, efectos de resolución142
Ticket: integraciónAsignación, mensajes de conexión, traspaso108
Ticket: API y jobsControladores, DTOs, jobs, repositorios106
Message: serviciosPipeline inbound, router, plantillas, locks105
Message: API y repositoriosControladores y repositorios117
Mensajería auxiliarStarred, respuestas rápidas, labels, system-message132
FileArchivos38
Meta: inboundWebhooks, normalizador, firma104
Meta: outbound y OAuthOAuth, Graph, dispatcher, refresh de token68
ConnectionConexiones51
WhatsAppBaileys, inbound, outbound, sesiones151
WidgetWidget web30
Chat gatewaySockets, presencia, broadcast175
Chat internoConversaciones internas66
ContactContactos52
Scheduled messageMensajes programados79
Settings y queueAjustes del tenant, horarios, módulo de colas36

Lo que NO está cubierto​

  • Módulo dashboard: sin ningún spec.
  • E2E: solo existe app.e2e-spec.ts, que verifica el arranque y Hello World!; no hay E2E por flujo de negocio.
  • src/main.ts, src/database/seeds/run-seed.ts y los scripts de scripts/ no tienen specs.
  • No hay umbral de cobertura configurado en Jest; npm run test:cov solo genera el reporte.
  • Dos tests de chat.gateway.spec.ts están con it.skip (autenticación legacy sendType: 'user').
  • Integraciones externas reales (Meta Graph, S3, WhatsApp/Baileys) siempre están mockeadas; no hay tests contra servicios reales.