test: flujos ejecutados de punta a punta contra un ERP falso
setup/tests/ corre NormalBot de verdad —no un espejo—: SQLite en memoria con los endpoints del seed reescritos hacia fixtures_api.php servido con php -S, asi el curl real se ejecuta y los POST capturados se comparan contra el contrato del procesador. ConversationContext, WhatsAppSender y AiBot son falsos en memoria; el resto es el codigo de produccion. 51 casos: finca restringida que entra sola, ausentismo completo con rango invertido rechazado, perfiles trabajador/supervisor, ciclos con multi-select paginado, mantenimiento con requires/resolver, labores con cuadrilla, y NLU que resuelve "plateo" por entity hasta el informe. Destaparon dos errores reales: - registrar_mantenimiento posteaba a labores_up sin novedad_id ni empleados, que el procesador exige: el ERP lo habria rechazado siempre. Ahora pide la labor del grupo elegido (endpoint nuevo novedades_mant_dn) y la cuadrilla. - resolverPorCampos reventaba con warning al sustituir arreglos en la URL. Uso: bash setup/tests/run.sh Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 4.6
parent
6df1d482cc
commit
1f7d33b40d
@@ -585,6 +585,27 @@ $configJson = [
|
||||
'label_field' => 'label',
|
||||
'empty_text' => '⚠️ No hay lotes con cantidad pendiente para ese grupo.',
|
||||
],
|
||||
[
|
||||
// labores_up exige la novedad concreta, no el grupo: se
|
||||
// ofrecen solo las del grupo ya elegido
|
||||
'key' => 'novedad_id',
|
||||
'label' => 'Labor',
|
||||
'type' => 'select',
|
||||
'prompt' => '¿Qué labor de mantenimiento?',
|
||||
'source_endpoint_key' => 'novedades_mant_dn',
|
||||
'value_field' => 'id',
|
||||
'label_field' => 'nombre',
|
||||
],
|
||||
[
|
||||
'key' => 'empleados',
|
||||
'label' => 'Trabajadores',
|
||||
'type' => 'multi_select',
|
||||
'prompt' => '¿Quiénes lo hicieron? (puedes marcar varios)',
|
||||
'source_endpoint_key' => 'empleados_labor_dn',
|
||||
'value_field' => 'id',
|
||||
'label_field' => 'nombre',
|
||||
'from_phone' => 'tercero_id',
|
||||
],
|
||||
[
|
||||
'key' => 'cantidad',
|
||||
'label' => 'Cantidad',
|
||||
@@ -903,6 +924,7 @@ $endpoints = [
|
||||
// Fase 3: las que arrastran inventario o autorizacion previa
|
||||
['key' => 'novedades_labor3_dn', 'dir' => 'download', 'url' => $BASE . '?peticion=novedades_labor_dn&fase=3'],
|
||||
['key' => 'productos_fertilizacion_dn', 'dir' => 'download', 'url' => $BASE . '?peticion=productos_fertilizacion_dn&lote_id={lote_id}'],
|
||||
['key' => 'novedades_mant_dn', 'dir' => 'download', 'url' => $BASE . '?peticion=novedades_labor_dn&fase=3&grupo={grupo_id}'],
|
||||
['key' => 'lotes_mantenimiento_dn', 'dir' => 'download', 'url' => $BASE . '?peticion=lotes_mantenimiento_dn&grupo={grupo_id}&finca_id={finca_id}'],
|
||||
['key' => 'lotes_mantenimiento_todos_dn', 'dir' => 'download', 'url' => $BASE . '?peticion=lotes_mantenimiento_dn&grupo={grupo_id}&finca_id={finca_id}&todos=1'],
|
||||
// Todos los lotes (PDF) por ciclo
|
||||
|
||||
Reference in New Issue
Block a user