Spec — La cola de Publisher: class-admin.php (segunda pasada)¶
Estado: planificada, no ejecutada. Es el siguiente trabajo después de la primera pasada, que bajó la clase de 2.817 a 1.650 líneas.
1. Lo que queda dentro, medido¶
22 métodos con queue en el nombre, 808 líneas. Se parten en dos grupos que casi no se hablan:
Grupo A — vistas (12 métodos, 456 líneas)¶
| Método | Líneas | Llama a |
|---|---|---|
render_queue_tab |
103 | las nueve siguientes |
render_queue_table |
63 | — |
render_queue_list |
52 | render_queue_table |
render_queue_stuck |
47 | render_stuck_table |
render_queue_grid |
44 | queue_entry_html |
queue_by_day |
39 | — |
queue_entry_html |
34 | — |
queue_url |
26 | queue_week_start |
render_queue_week |
18 | queue_by_day, queue_week_start, render_queue_grid |
render_queue_month |
15 | queue_by_day, render_queue_grid |
queue_month_name |
10 | — |
queue_week_start |
5 | — |
Más render_stuck_table (31), que solo usan estas vistas. Total: 487 líneas, cerradas entre
sí salvo tab_url, que ya vive en Vista_Canales.
Grupo B — escritura (10 métodos, ~321 líneas)¶
handle_queue_send_stuck (53), handle_queue_reschedule (25), handle_queue_spacing (25),
handle_queue_cancel (18), enqueue_assets (48), sanitize_queue_interval (17), y los ayudantes
privados queue_move (14), queue_remove (18), queue_parse_when (25).
2. Por qué no se hace de una vez¶
El grupo A es pintar. El grupo B escribe en la base de datos: reprograma, cancela, mueve y fuerza envíos. Mover escritura sin una prueba por formulario es cambiar dónde está el riesgo, no quitarlo.
3. Trozo A — las vistas a Vista_Cola¶
- Extraer los 13 métodos (487 líneas) a
includes/class-vista-cola.php. - En
Admin, un delegadorender_queue_tab()de una línea. - Reescribir dentro del grupo
self::tab_url(→Vista_Canales::tab_url(.
Verificación:
make test(477 casos) y CI.- Las ocho pantallas del panel, comparadas contra la línea base (
antes-2026-11-02.json). La pestaña queue ya está en esa captura: es el juez de este trozo. - Si el diff no es vacío y no se puede explicar, se revierte.
4. Trozo B — los manejadores, con red primero¶
Antes de moverlos, cuatro pruebas de integración, una por formulario:
| Formulario | Qué debe comprobarse |
|---|---|
handle_queue_cancel |
sin nonce no cambia nada; con nonce y permiso, el envío pasa a cancelado y no se puede reenviar |
handle_queue_reschedule |
fecha válida → reprograma; fecha basura → no toca y avisa; no se puede reprogramar lo ya enviado |
handle_queue_spacing |
cambia el intervalo y respeta los límites permitidos |
handle_queue_send_stuck |
solo actúa sobre un envío atascado; uno reciente no se toca |
Con esas cuatro en verde, mover el grupo B a Manejador_Cola es mecánico. Sin ellas, no se mueve.
Lo que se ha medido al intentar escribirlas (2 de noviembre)¶
Tres pruebas escritas ya (tests/Unit/AdminQueueHandlersTest.php): sin permiso, cancel,
spacing, reschedule y send_stuck cortan con wp_die y no tocan la cola. Comprobadas en
negativo: al quitar la guarda de handle_queue_cancel, la prueba muere.
Y dos hallazgos que cambian el plan del trozo B:
- Los manejadores terminan en
exit. Al quitar la guarda, el manejador sigue hastawp_safe_redirect()+exity mata la corrida de PHPUnit: no hay fallo limpio, hay proceso muerto. Para probar el camino feliz hay que devolver en vez de salir —un cambio de comportamiento que hay que decidir, no colar en una refactorización. - El doble de
check_admin_refererdevuelve siempre 1. Una prueba de nonce escrita con el arnés actual no puede fallar: saldría verde y no protegería nada. O se mejora el doble para que respete un nonce declarado, o el control de nonce se verifica de otra forma.
Conclusión honesta: de las cuatro pruebas, hoy son escribibles las de permiso (hechas). Las de efecto necesitan que los manejadores devuelvan un resultado en vez de salir, y eso es una decisión de diseño previa, no un detalle de la mudanza.
5. Criterio de parada¶
class-admin.phppor debajo de 1.200 líneas tras el trozo A.- Ningún
render_*de más de 40 líneas. - Los manejadores solo se mueven con las cuatro pruebas de integración escritas y vistas fallar al quitar la comprobación que protegen (no basta con que existan).
6. Lo que NO entra aquí¶
register_settingsy los saneadores: siguen enAdminpor lo explicado en la primera pasada.- El CSS y el JS de la cola:
enqueue_assetsse queda donde está hasta que haya una razón para tocar los assets.