docs: añade pruebas bun:test y mejora estado en README y docs

Co-authored-by: aider (openrouter/openai/gpt-5) <aider@aider.chat>
webui
borja 2 weeks ago
parent 3eb38fa7bd
commit d9f77e6e4d

@ -90,12 +90,18 @@ Consulta:
- Migraciones up-only al arranque; logging de eventos de migración.
- Copias de seguridad: respaldar el directorio data/ y planificar retención.
## Pruebas (bun:test)
- Suite web implementada con build programático: los tests construyen apps/web (adapter-node) una única vez, arrancan el servidor en un puerto efímero y hacen peticiones HTTP reales.
- Sin dependencias externas: bun:test, bun:sqlite y helpers propios.
- Cobertura actual: endpoints /api/me/tasks (gating, orden, búsqueda con ESCAPE, soonDays y paginación), /api/me/preferences (valores por defecto) y helpers de servidor para build/arranque.
- Ejecución: bun test tests/web
## Estado y licencia
- Nombre provisional: “Taskbot”.
- Licencia por definir (software libre; se evaluará GPLv3/AGPL/MIT/Apache-2.0).
- Progreso Etapa 1 (autenticación web): completada. /login (GET intermedio + POST), sesión con idle 2h, logout y ruta /app protegida; desplegado con proxy interno en Bun.
- Lectura (MVP) en curso: endpoints GET /api/me/tasks (orden por fecha de vencimiento), /api/me/groups (con contadores) y /api/groups/:id/tasks; UI de Grupos en /app/groups.
- Etapa 1 (autenticación web): completada. /login (GET intermedio + POST), sesión con idle 2h, logout y ruta /app protegida; desplegado con proxy interno en Bun.
- Etapa 2 (lectura de datos - MVP): completada. GET /api/me/tasks (orden por due_date asc con NULL al final, búsqueda con ESCAPE, filtros soonDays/dueBefore, paginación page/limit), GET /api/me/groups (contadores open/unassigned) y GET /api/groups/:id/tasks (unassignedFirst, onlyUnassigned, limit). UI: /app (Mis tareas, filtros/búsqueda/paginación) y /app/groups (bloque “sin responsable” con prefetch).
- Roadmap y contribuciones: pendientes de publicación.
## Enlaces

@ -35,11 +35,11 @@ Endpoints operativos
- 200 siempre (proxy interno), útil para healthcheck del contenedor.
- APIs web (requieren sesión)
- GET /api/me/tasks?status=open&search=...
- Orden por fecha de vencimiento ascendente (NULL al final). Aplica gating por AllowedGroups + membresía activa (group_members). Soporta búsqueda simple por descripción.
- Orden por fecha de vencimiento ascendente (NULL al final). Aplica gating por AllowedGroups + membresía activa (group_members). Búsqueda por descripción con LIKE y ESCAPE '\'. Filtros dueBefore y soonDays (en días). Paginación page/limit y campos hasMore/total en la respuesta.
- GET /api/me/groups
- Devuelve solo grupos permitidos donde el usuario está activo. Incluye counts.open y counts.unassigned por grupo.
- GET /api/groups/:id/tasks?unassignedFirst=true
- Requiere que el usuario sea miembro activo del grupo y que el grupo esté permitido. Orden por due_date (NULL al final), con opción de priorizar tareas sin responsable.
- Requiere que el usuario sea miembro activo del grupo y que el grupo esté permitido. Orden por due_date (NULL al final); admite parámetros unassignedFirst, onlyUnassigned y limit (clamp a 100).
Arranque y servicios
- src/server.ts::start() (bot)
@ -82,6 +82,7 @@ Buenas prácticas
- No arrancar schedulers en test salvo que FORCE_SCHEDULERS='true'.
- Validar nuevas env en src/server.ts::validateEnv() y documentarlas aquí.
- En apps/web, kit.csrf.checkOrigin=false debido al proxy interno; considerar alternativas si se elimina el proxy.
- Tests web con bun:test: construcción programática de apps/web (build/), arranque real del servidor y peticiones HTTP reales; ver tests/web/helpers/server.ts.
Formato de fechas en comandos
- Se aceptan únicamente YYYY-MM-DD y YY-MM-DD (YY se expande a 20YY).

@ -215,6 +215,8 @@ Etapa 6 — Evolutivos (posteriores)
## 14) Pruebas
Implementado: suite web con bun:test y build programático (helpers en tests/web/helpers/server.ts). Los tests arrancan la web real (adapter-node) y ejercitan endpoints y páginas vía HTTP, usando una base SQLite temporal.
- Unit:
- Emisión/canje de token, expiración, cookie y expiración por inactividad.
- Autorización de endpoints (gating, membresía).

Loading…
Cancel
Save