Skip to main content

Testing y calidad

Pruebas unitarias​

  • Ejecutor: ng test (builder @angular-devkit/build-angular:karma) con Karma + Jasmine (jasmine-core ~4.3.0, karma ~6.4.0). Configuración en karma.conf.js: navegador Chrome, reporters progress y kjhtml, cobertura con karma-coverage-istanbul-reporter (html, lcovonly, text-summary en ./coverage/backoffice).
  • Arranque del entorno en src/test.ts: initTestEnvironment con teardown: { destroyAfterEach: true }.
  • No hay pruebas e2e configuradas (el README.md menciona ng e2e/Protractor, pero angular.json no define el target).

El detalle de cada caso de prueba está en Casos de prueba.

Hay 92 archivos *.spec.ts bajo src/app:

ÁreaSpecsEjemplos
features/whaticket15componentes del chat, whaticket-routing.module.spec.ts
core/states14reducers, efectos, acciones y selectores de auth, ticket, scheduled-message, settings, language, internal-chat
core/services11chat-socket.service.spec.ts, connection.service.spec.ts, my-permissions.service.spec.ts
shared/components9
features/settings6settings-routing.module.spec.ts y paneles
features/internal-chat5
core/guards4auth, loggedIn, admin, permission
features/profile, labels, quick-responses, scheduled-messages4 / 3 / 3 / 3
features/connections2connections-table.component.spec.ts, connection-whatsapp-modal.component.spec.ts
core/interceptors, core/helpers, shared/directives2 / 2 / 2device-token, http-error, presence.helper, nav.constant
shared/routes1content.routes.spec.ts: verifica el cableado de permissionGuard (CONTACTS, SETTINGS) y que DASHBOARD y PROFILE queden sin guard de permiso

Patrón visto en connections-table.component.spec.ts: el componente se instancia directamente (new Componente(...)) con espías de Jasmine (jasmine.createSpyObj) en lugar de TestBed.

Cobertura de la rama feat/meta_connections​

Los cambios de la rama no añaden pruebas nuevas: solo se actualizó connections-table.component.spec.ts para el nuevo constructor (ActivatedRoute, Router y ToastrNotificationService). No hay specs para ConnectionInstagramModalComponent, authorizeInstagram, findConnectionById, el retorno OAuth (handleMetaOAuthReturn), instagramExpiry, ticketLastMessageAckChanged, el estado failed ni renderWhatsappMarkup con linkify (una búsqueda de linkify, authorizeInstagram e instagram en los *.spec.ts no devuelve resultados).

Calidad de código​

  • TypeScript: strict, noImplicitOverride, noImplicitReturns, noFallthroughCasesInSwitch, strictTemplates.
  • Prettier (.prettierrc): comillas simples, 2 espacios, ancho 100.
  • Lint: existen tslint.json y codelyzer en devDependencies, y un script lint, pero angular.json no define un target lint.

Hooks de Git​

.husky/pre-commit (se instala con npm install por el script prepare):

  1. Bloquea el commit si hay archivos .env / .env.* en el índice (salvo .env.example, .env.sample, .env.template).
  2. Bloquea archivos de más de 1 MB (MAX_SIZE_BYTES=1048576).
  3. Ejecuta npx lint-staged, que corre prettier --write sobre *.{ts,html,scss,css,json,md}.
  4. Escanea secretos con gitleaks (protect --staged --redact), usando el binario de node_modules (@b12k/gitleaks) o, si no está, la imagen Docker zricethezav/gitleaks.

.gitleaks.toml extiende las reglas por defecto y añade generic-hardcoded-secret (nombres como password, secret, api_key, access_token... asignados a un literal de 8+ caracteres), con una lista de excepciones para marcadores como changeme o example.