@startuml testing-pyramid !include _style.iuml title 3. Pirámide de pruebas — ExpressMX skinparam ranksep 35 skinparam nodesep 30 package "Cima — E2E navegador (Playwright)" as TOP #FCE7F3 { rectangle "7 specs E2E\napps/web/e2e/\nchromium, fullyParallel,\ntimeout 30s, retries CI=1" as E2E } package "Medio — Integración con DB real (Vitest + Postgres)" as MID #FEF3C7 { rectangle "5 suites integración\napps/web/src/__tests__/integration/\nfixtures por test, cleanup\ntras cada describe" as INT } package "Base — Unitarias puras (Vitest)" as BOT #DBEAFE { rectangle "11 archivos unit:\n5 de schemas Zod en\npackages/validations/src/__tests__/\n1 de cursor en\napps/web/src/lib/api/__tests__/cursor.test.ts" as UNIT } UNIT -[hidden]up- INT INT -[hidden]up- E2E note right of E2E Cobertura: API health (4), login admin (2), navegación dashboard operaciones (1). Costo de mantenimiento: alto (web server, seed admin, browser binaries). Estado actual: job CI desactivado (if: false) hasta tener seed determinista. Skip dinámico si E2E_ADMIN_AVAILABLE != 1. end note note right of INT Cobertura: auth login/me/logout, mobile orders (cliente), provider jobs (RBAC y ownership), register (idempotencia y duplicados), services (catálogo público). Servicio postgres:16 levantado por CI con schema completo (00.sql + migrations/*.sql). Sin mocks de DB; usa fixtures con prefix por PID y limpieza tras cada describe. end note note right of UNIT Cobertura: loginSchema, forgot/reset password, common (uuid, email, password, phone, isoDate, idParam, paginationQuery), mobile-orders, mobile-provider, mobile-register, cursor (encode/decode keyset). Costo de mantenimiento: bajo. Tiempo CI: segundos. Estilo controlados-positivos / controlados-negativos / no controlados (adversarial) por cada schema. end note note bottom of BOT Gaps documentados: - Sin contract tests gRPC/OpenAPI. - Sin tests de carga ni soak. - Sin tests específicos de RLS Postgres (RBAC validado en integración, no a nivel kernel de DB). - E2E móvil (Expo) no cubierto. end note footer Fuente: packages/validations/src/__tests__/, apps/web/src/__tests__/integration/, apps/web/e2e/, apps/web/playwright.config.ts @enduml