Saltar al contenido principal

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.
RepoRunnerEstadoCoverage actual
PlatformVitestTests pasan, coverage threshold falla74.15% statements, 74.23% lines
AgentGo testTests pasan59.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:
  1. Invariantes que pueden corromper datos.
  2. Auth y autorización.
  3. Contrato Agent-to-Platform.
  4. Conversión de unidades y timezone.
  5. Adapters externos.
  6. Wiring de bajo riesgo.
Coverage es una señal, no el objetivo final.

Platform

Comandos:
yarn test
yarn test:coverage
yarn verify
MétricaActualThresholdEstado
Statements74.15%80%Bajo target
Branches63.57%80%Bajo target
Functions79.16%80%Levemente bajo
Lines74.23%80%Bajo target

Qué cubre Platform

ÁreaQué cubrePor qué importa
ConfigValidación de env vars.Evita boot con config inválida.
AuthPasswords, sesiones, Google identity, controller.Protege login y sesión.
GuardsInternal service token.Protege APIs internas.
LoggingRedacción y formato.Evita leaks en logs.
Time/unitsFechas locales, timezones, conversiones.Protege summaries y display.
ChannelsNormalización y vinculación.Protege mapping de WhatsApp/Telegram.
OnboardingProfile, goals, nutrition.Primer estado de negocio del usuario.
MealsServicio, idempotencia y summary.Protege tracking nutricional.
WeightServicio y display de unidades.Protege progreso.
WorkoutsBase del módulo.Protege training.

Gaps de Platform

  • 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
PackageCoverageInterpretación
WhatsApp Cloud API adapter83.3%Buen coverage de replies.
WhatsApp webhook adapter84.1%Buen coverage de verificación, firmas y mapping.
LLM core76.8%Buena base del parser/interpreter.
Orchestration78.0%Buena cobertura temprana del flujo.
Session store71.9%Razonable, necesita más fallos/TTL.
App wiring55.5%Startup validation puede mejorar.
Gemini adapter6.1%Bajo por falta de mocks profundos del provider.
Telegram adapter0.0%Placeholder/futuro.

Tests recomendados

  1. Platform client de Agent con token, timeout, correlation ID e idempotency key.
  2. Idempotencia de meal logging ante retries.
  3. Session guard con sesiones faltantes, expiradas y malformadas.
  4. Workout logging con ejercicios, sets y payloads inválidos.
  5. Parser LLM con JSON incompleto o parcialmente válido.
  6. Media download con MIME validation y fallos de Meta API.

Política pre-deploy

Antes de deployar Platform:
yarn verify
Antes de deployar Agent:
make test
Antes de cambios de contrato Agent/Platform, validar ambos repos, Swagger/OpenAPI, DTOs, auth interna e idempotencia.