Testing
Testing en Moveat existe para proteger la corrección de negocio, no solo para subir un número de coverage.
Los bugs más riesgosos son los que corrompen estado: comidas duplicadas, resúmenes calóricos incorrectos, sesiones rotas, conversión de unidades incorrecta, retries de webhooks que escriben dos veces o acciones de Agent que saltean validación de Platform.
Los números de coverage fueron medidos el 2026-06-13 desde los repos locales.
Snapshot actual
Platform 21 archivos de test, 61 tests pasando. Coverage existe pero falla el threshold global de 80%.
Agent Los tests Go pasan. Statement coverage actual: 59.5%. Todavía no hay threshold global.
Repo Runner Estado Coverage actual Platform Vitest Tests pasan, coverage threshold falla 74.15% statements, 74.23% lines Agent Go test Tests pasan 59.5% statements
yarn test pasa en Platform, pero yarn test:coverage falla porque el threshold configurado es 80% y la cobertura actual está por debajo.
Filosofía
Prioridad de tests:
Invariantes que pueden corromper datos.
Auth y autorización.
Contrato Agent-to-Platform.
Conversión de unidades y timezone.
Adapters externos.
Wiring de bajo riesgo.
Coverage es una señal, no el objetivo final.
Comandos:
yarn test
yarn test:coverage
yarn verify
Métrica Actual Threshold Estado Statements 74.15% 80% Bajo target Branches 63.57% 80% Bajo target Functions 79.16% 80% Levemente bajo Lines 74.23% 80% Bajo target
Área Qué cubre Por qué importa Config Validación de env vars. Evita boot con config inválida. Auth Passwords, sesiones, Google identity, controller. Protege login y sesión. Guards Internal service token. Protege APIs internas. Logging Redacción y formato. Evita leaks en logs. Time/units Fechas locales, timezones, conversiones. Protege summaries y display. Channels Normalización y vinculación. Protege mapping de WhatsApp/Telegram. Onboarding Profile, goals, nutrition. Primer estado de negocio del usuario. Meals Servicio, idempotencia y summary. Protege tracking nutricional. Weight Servicio y display de unidades. Protege progreso. Workouts Base del módulo. Protege training.
Branch coverage bajo.
Workout service necesita más pruebas.
Redis service tiene poca cobertura.
Session guard necesita más casos.
Auth controller necesita más edge cases.
Lifecycle de Prisma está poco cubierto.
Agent
Comandos:
make test
GOCACHE = /tmp/go-build GOMODCACHE = /tmp/go-mod go test ./...
GOCACHE = /tmp/go-build GOMODCACHE = /tmp/go-mod go test ./... -coverprofile=/tmp/moveat-agent-cover.out
go tool cover -func=/tmp/moveat-agent-cover.out
Package Coverage Interpretación WhatsApp Cloud API adapter 83.3% Buen coverage de replies. WhatsApp webhook adapter 84.1% Buen coverage de verificación, firmas y mapping. LLM core 76.8% Buena base del parser/interpreter. Orchestration 78.0% Buena cobertura temprana del flujo. Session store 71.9% Razonable, necesita más fallos/TTL. App wiring 55.5% Startup validation puede mejorar. Gemini adapter 6.1% Bajo por falta de mocks profundos del provider. Telegram adapter 0.0% Placeholder/futuro.
Tests recomendados
Platform client de Agent con token, timeout, correlation ID e idempotency key.
Idempotencia de meal logging ante retries.
Session guard con sesiones faltantes, expiradas y malformadas.
Workout logging con ejercicios, sets y payloads inválidos.
Parser LLM con JSON incompleto o parcialmente válido.
Media download con MIME validation y fallos de Meta API.
Política pre-deploy
Antes de deployar Platform:
Antes de deployar Agent:
Antes de cambios de contrato Agent/Platform, validar ambos repos, Swagger/OpenAPI, DTOs, auth interna e idempotencia.