Saltar al contenido principal

Desarrollo

Tests​

Suite de tests sin dependencias externas (runner propio, sin PHPUnit):

php tests/run.php

Cubre seguridad de la API, logger, generadores y el motor del page-builder (plantillas, formularios, control de acceso). Devuelve código de salida 0/1 (apto para CI).

La mayoría de los tests leen el código fuente: por eso corren en cualquier máquina, sin base de datos, y por eso no ven si algo funciona. Para eso está tests/restaurant_e2e_test.php, que atiende una mesa completa —abrir, pedir, cocinar, entregar, cobrar, descontar la receta, cuadrar la caja y anular— con los mismos controladores que usa el panel:

  • Crea su propia base desechable (wf_e2e_<pid>), le aplica las migraciones del plugin y la borra al terminar. Nunca toca la base del sitio.
  • Si no hay MySQL a mano, o el usuario no puede crear bases, se omite en vez de fallar.
  • Apunta los controladores a esa base con Connection::useTestLink(), que sólo funciona desde la línea de comandos.

Si escribes un flujo que cruza varias tablas, éste es el molde a copiar.

Generadores CLI (tools/)​

Scaffolders que reutilizan funciones puras (testeadas) como backend:

php tools/make-web-page.php <tabla> [opciones] # página web (lista/detalle)
php tools/make-migration.php <nombre> --date YYYY-MM-DD [columnas]
php tools/make-table.php config.json # tabla + CRUD admin (JSON)
php tools/make-page.php config.json # página pública desde JSON
php tools/introspect.php # snapshot: plugins activos, tablas, relaciones
php tools/doctor.php --json # diagnóstico del entorno (exit 1 si hay errores)
php tools/schema.php [tabla] # qué existe: secciones, columnas, páginas
php tools/make-column.php <tabla> --name=<campo> --type=<tipo> # agregar campo a una sección existente
php tools/seed.php <tabla> datos.json [--key=<col>] # cargar datos (idempotente con --key)
php tools/make-plugin.php <nombre-kebab> # esqueleto de plugin
  • tools/page-builder.php — motor del Generador de Páginas (plantillas, formularios, login/acceso). Usado por el CMS y testeado.
  • tools/setup.php — creación de config/directorios (lo llama setup.sh).

Logger​

core/logger.php — logger central que nunca lanza excepciones (cae a error_log). Escribe en logs/ (denegado por web, archivo diario).

Logger::error('mensaje', ['contexto' => 1]);
Logger::warning(...); Logger::info(...); Logger::debug(...);

Permisos / diagnóstico​

core/permissions.php + la página "Estado del Sistema" del CMS diagnostican y reparan (en lo posible) los directorios escribibles.

Convenciones​

  • Comentarios de código en inglés (obligatorio). Docs de usuario en español.
  • Controladores: nombre.controller.php. Servicios: nombre.service.php.
  • Migraciones descriptivas en migrations/ (add_*.sql, create_*.sql).
  • Mantén config.example.php actualizado al añadir configuración.

Plugins​

Cada plugin es autocontenido en plugins/nombre-plugin/ (controllers, views, assets, config). Se registran en plugins/plugins-registry.php. Sigue la estructura de los plugins existentes (payku, workflow-manager).

Contribución​

  1. Crea una rama para tu cambio.
  2. Asegúrate de que php tests/run.php pase.
  3. Abre un Pull Request a development.