12-testing.md
Testing · visión
Concert-Connect no tiene Karma ni Playwright. La red de seguridad es el typecheck del workspace y el contrato OpenAPI (Orval + Zod).
| Capa | Runner | Qué cubre | Comando |
|---|---|---|---|
| Tipos (libs) | tsc --build | lib/db, lib/api-zod, lib/api-client-react | pnpm run typecheck:libs |
| Tipos (apps) | tsc --noEmit | conciergo + api-server | pnpm run typecheck |
| Contrato | Orval + Zod | Spec ↔ hooks ↔ handlers | pnpm --filter @workspace/api-spec run codegen |
No hay GitHub Actions en el repo (el ciclo de vida es Replit). Un PR local no debería mergearse si pnpm run typecheck falla.
Siguientes: unitarios · integración · e2e · CI.
13-testing-unit.md
Testing · unitarios
No hay *.spec.ts de negocio. El “unitario” que sí se ejecuta es compilar los tipos.
Health + Zod
El handler no devuelve un objeto suelto: pasa por el schema generado.
router.get("/healthz", (_req, res) => {
const data = HealthCheckResponse.parse({ status: "ok" });
res.json(data);
});
Si alguien cambia HealthStatus en OpenAPI y no regenera, o si el parse recibe otro shape, peta en runtime y el typecheck avisa al desalinearse los imports.
JIT auth (contrato, no runner)
requireAuth está escrito para fallar cerrado:
if (!clerkId) {
return res.status(401).json({ error: "Unauthorized" });
}
Un test unitario futuro iría aquí (mock de getAuth + db.insert). Hoy se afirma con typecheck y uso real en Replit.
14-testing-integration.md
Testing · integración
No hay Supertest. La integración es codegen + typecheck de todo el grafo.
pnpm --filter @workspace/api-spec run codegen
pnpm run typecheck
Eso recorre:
openapi.yaml- hooks de
@workspace/api-client-react(el front solo llama esos hooks) - Zod de
@workspace/api-zod(el server parsea respuestas) - Drizzle (
lib/db) usado por las rutas
Si una ruta Express deja de devolver el schema, el front no compila o Zod lanza. Es integración de contratos, no de HTTP vivo (hace falta DATABASE_URL + Clerk).
15-testing-e2e.md
Testing · e2e
No hay Playwright. El recorrido (landing → eventos → mapa → match → chat) se prueba a mano en el Repl.
Por qué no está automatizado
- Clerk (login real) y Google Maps (key + billing) no caben en un CI anónimo.
- El preview Replit cambia de host (
*.spock.replit.dev); unbaseURLfijo se pudre. - Presencia/Task Cloud sí tienen e2e porque su núcleo (offline, tabs) no pide OAuth.
Recorrido manual mínimo
- Landing signed-out: «No dejes que un gran bolo se pierda».
- Explorar
/eventsy/events/mapsin sesión. - Unirse (Clerk) → apuntarse a un evento → aparece match en Conexiones.
- Chat: un mensaje, badge de no leído en el otro lado.
16-testing-ci.md
Testing · CI
Este repo no tiene .github/workflows. El “CI” es el typecheck local / Replit antes de merge.
pnpm run typecheck
Equivale a tsc --build de las libs + tsc --noEmit de artifacts/*.
Por qué no hay Actions
El remoto es un Repl con secretos (Clerk, Maps, DATABASE_URL). Un workflow en GitHub sin esos secretos no puede levantar la API. Añadir un job solo de typecheck sería el siguiente paso honesto (sin Maps ni login).
Qué fallaría en un job así
| Riesgo | Mitigación actual |
|---|---|
| Spec desfasado | Regenerar Orval a mano |
| TS roto en conciergo o api-server | pnpm run typecheck |
| Schema Drizzle vs rutas | Typecheck de @workspace/db |