> ## Documentation Index
> Fetch the complete documentation index at: https://docs.mov-eat.app/llms.txt
> Use this file to discover all available pages before exploring further.

# Testing

> Cobertura actual, estrategia de testing y gaps de calidad para Platform y Agent.

# 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.

<Info>
  Los números de coverage fueron medidos el 2026-06-13 desde los repos locales.
</Info>

## Snapshot actual

<CardGroup cols={2}>
  <Card title="Platform" icon="server">
    21 archivos de test, 61 tests pasando. Coverage existe pero falla el threshold global de 80%.
  </Card>

  <Card title="Agent" icon="bot">
    Los tests Go pasan. Statement coverage actual: 59.5%. Todavía no hay threshold global.
  </Card>
</CardGroup>

| 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                |

<Warning>
  `yarn test` pasa en Platform, pero `yarn test:coverage` falla porque el threshold configurado es 80% y la cobertura actual está por debajo.
</Warning>

## 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:

```bash theme={null}
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    |

## Qué cubre Platform

| Á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.                     |

## 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:

```bash theme={null}
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

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:

```bash theme={null}
yarn verify
```

Antes de deployar Agent:

```bash theme={null}
make test
```

Antes de cambios de contrato Agent/Platform, validar ambos repos, Swagger/OpenAPI, DTOs, auth interna e idempotencia.
