Skip to content

chore(widget): tests de la retención tras reordenar (#240) #241

Closed

Description

@egdev6

Contexto

Seguimiento de #240 (arreglo de #222). El comportamiento es correcto y está integrado; esta issue solo mejora sus tests. No es un bug.

Problema

  1. Funciones sin lógica propia. holdAfterReorderDrop, releaseOnStripLeave y canPointerOpen (src/lib/anchor-panel.ts) envuelven un booleano (x => x, _ => false, h => !h), así que sus tests no pueden fallar. Los que comprueban la aridad (canPointerOpen.length, hoverPanel.length, clickPanel.length) y «never changes the panel state» (src/lib/anchor-panel.test.ts) no fijan ningún comportamiento.

  2. La lógica con bordes reales no tiene test. La comprobación de «dentro de la ventana» al soltar un reordenado está en línea en src/Widget.tsx:1219:

    e.clientX >= 0 && e.clientY >= 0 && e.clientX < window.innerWidth && e.clientY < window.innerHeight

    Un error de < frente a <= dejaría la retención activa sin que nada la libere, y el hover no volvería a abrir el panel hasta salir de la tira.

Propuesta

  • Dejar la retención como un useRef<boolean> en Widget.tsx y quitar las tres funciones envoltorio y sus tests.
  • Extraer pointerInsideViewport(x, y, width, height) como función pura y cubrir los bordes en ambos ejes: 0, -1, width - 1 y width (y lo mismo con height).
  • Mantener el test de ProviderGauge sobre el enrutado de mouseenter a onPointerEnter, que sí aporta.

Criterios

Fuera de alcance

Cambiar la regla de #222, el temporizador de 400 ms (REORDER_GUARD_MS) o el cableado de foco y clic.

Activity

  1. egdev6 commented on Nov 5, 2026

    @egdev6
    OwnerAuthor

    @DonatoSilva, como conoces este código desde #240, te ofrezco esta issue. Es un ajuste de tests sin cambio de comportamiento. Si te interesa, avísame aquí y te la asigno.

  2. DonatoSilva commented on Nov 5, 2026

    @DonatoSilva
    Contributor

    Claro si, feliz de seguir colaborando en este proyecto

  3. added
    status:approvedApproved for implementation by the repository owner
    and removed on Nov 5, 2026
  4. DonatoSilva commented on Nov 6, 2026

    @DonatoSilva
    Contributor

    PR lista para revisión: #242

    Qué cambia:

    • pointerInsideViewport(x, y, width, height) pasa a src/lib/pointer-viewport.ts como función pura, con los bordes cubiertos en ambos ejes (0, -1, width - 1 y width).
    • La retención queda como useRef<boolean> en Widget.tsx: se borran holdAfterReorderDrop, releaseOnStripLeave y canPointerOpen, que solo envolvían un booleano, y sus tests, que no podían fallar.
    • El pointerup usa ahora la función extraída, con window.innerWidth/innerHeight leídos al soltar, igual que antes.

    Sin cambio de comportamiento: las mismas condiciones de retención y liberación que #240, y la guarda sigue solo en la vía del puntero (onPointerEnter), así que el foco y el clic no la consultan. No se tocan la regla de #222, REORDER_GUARD_MS ni el test de ProviderGauge sobre el enrutado de mouseenter.

    Checks: npm test (vitest 69 archivos / 910 tests; node --test 298; 0 fallos), npm run typecheck, npm run build y node scripts/i18n-inventory.mjs --check, todo en verde. cargo test no aplica porque no hay cambios en src-tauri/.

    Tres commits: el refactor con sus tests y el ODD, el inventario i18n regenerado (solo cambia la línea de hashes del árbol de src/) y la anotación de la entrega en la tarea.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

status:approvedApproved for implementation by the repository ownertype:choreMaintenance, release infrastructure and tooling

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions