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 enkarma.conf.js: navegadorChrome, reportersprogressykjhtml, cobertura conkarma-coverage-istanbul-reporter(html,lcovonly,text-summaryen./coverage/backoffice). - Arranque del entorno en
src/test.ts:initTestEnvironmentconteardown: { destroyAfterEach: true }. - No hay pruebas e2e configuradas (el
README.mdmencionang e2e/Protractor, peroangular.jsonno define el target).
El detalle de cada caso de prueba está en Casos de prueba.
Hay 92 archivos *.spec.ts bajo src/app:
| Área | Specs | Ejemplos |
|---|---|---|
features/whaticket | 15 | componentes del chat, whaticket-routing.module.spec.ts |
core/states | 14 | reducers, efectos, acciones y selectores de auth, ticket, scheduled-message, settings, language, internal-chat |
core/services | 11 | chat-socket.service.spec.ts, connection.service.spec.ts, my-permissions.service.spec.ts |
shared/components | 9 | |
features/settings | 6 | settings-routing.module.spec.ts y paneles |
features/internal-chat | 5 | |
core/guards | 4 | auth, loggedIn, admin, permission |
features/profile, labels, quick-responses, scheduled-messages | 4 / 3 / 3 / 3 | |
features/connections | 2 | connections-table.component.spec.ts, connection-whatsapp-modal.component.spec.ts |
core/interceptors, core/helpers, shared/directives | 2 / 2 / 2 | device-token, http-error, presence.helper, nav.constant |
shared/routes | 1 | content.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.jsonycodelyzerendevDependencies, y un scriptlint, peroangular.jsonno define un targetlint.
Hooks de Git
.husky/pre-commit (se instala con npm install por el script prepare):
- Bloquea el commit si hay archivos
.env/.env.*en el índice (salvo.env.example,.env.sample,.env.template). - Bloquea archivos de más de 1 MB (
MAX_SIZE_BYTES=1048576). - Ejecuta
npx lint-staged, que correprettier --writesobre*.{ts,html,scss,css,json,md}. - Escanea secretos con gitleaks (
protect --staged --redact), usando el binario denode_modules(@b12k/gitleaks) o, si no está, la imagen Dockerzricethezav/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.