Skip to content

Plan de Pruebas — M4: ABMs de Administración

Fecha: 2026-07-27 Módulo: doc/plans/2026-07-25-plan-desarrollo-modulos.md (M4) Ambiente: Dev local (./start-dev.sh) — http://localhost:5173

Aviso importante sobre esta ronda de QA

Todo lo de este documento se verificó con tests automáticos (115 en total, backend) y pegándole directo a la API real con curl contra el stack levantado (login real contra el emulador de Firebase, altas/modificaciones reales, respuestas reales). No se verificó clickeando en un navegador real — no había herramienta de browser disponible en la sesión que implementó esto. Todo lo que involucra solo backend (permisos, validaciones, cascadas, auditoría) está probado con la misma rigurosidad que M1/M2/M3. Lo que sí necesita tus ojos en un navegador de verdad:

  • Que las 7 pantallas nuevas rendericen bien (tablas, modales, checkboxes) — el build de producción (vue-tsc + vite build) corre limpio, pero eso no reemplaza verlo.
  • El timer de inactividad (sección 6) — la lógica nunca se disparó en un browser real, es lo de mayor riesgo real de este módulo.

Usuarios (mismos que M1/M2/M3)

EmailPasswordRol
admin@cislatam.testAdmin123!Admin — acceso completo a los 7 ABMs
supervisor@cislatam.testSuper123!Supervisor — solo Auditoría (lectura) de los 7
backoffice@cislatam.testBackoffice123!Backoffice — ningún ABM de Administración

1. Países

#PasoResultado esperado
1.1Como Admin, entrar a Usuarios y Accesos → no está acá, es Ubicaciones → PaísesTabla con los países existentes + formulario de alta a la derecha
1.2Dar de alta un país con código de 2 letras ya usado (ej. GT)422 — código duplicado, no se crea nada
1.3Dar de alta un país nuevo con comisión fuera de 0–100 (ej. 150)422
1.4Dar de alta un país nuevo válido (ej. código PA, Panamá, comisión 4)Aparece en la tabla, código en mayúsculas aunque lo hayas tipeado en minúscula
1.5Editar el país recién creado (cambiar el nombre)Se guarda, refresh (F5) mantiene el cambio
1.6Desactivarlo desde la tablaPide confirmación (modal), pasa a "Inactivo"
1.7ReactivarloVuelve a "Activo" — sin parpadeo de datos viejos durante la recarga
1.8Como Backoffice, entrar por URL directa a PaísesTe rebota — no tiene acceso a ningún ABM de Administración

2. Estaciones / PDV

#PasoResultado esperado
2.1Como Admin, entrar a Ubicaciones → Estaciones / PDVTabla + formulario de alta con selector de país
2.2Dar de alta una estación sin tocar "Mails de notificación"Se crea sin mails — el formulario arranca sin filas, hay que click "+ Agregar" para sumar una
2.3Agregar 2 mails de notificación al alta, uno con el checkbox destildadoSe crean ambos, uno enabled=true y el otro false
2.4Editar la estación: sacar un mail, agregar uno nuevo, togglear el enabled del que quedaLos 3 cambios se reflejan juntos en un solo "Guardar"
2.5Desactivar/reactivar una estaciónMismo modal de confirmación que Países

3. Usuarios

#PasoResultado esperado
3.1Como Admin, entrar a Usuarios y Accesos → UsuariosBuscador + tabla paginada (25 por página) + botón "+ Nuevo usuario"
3.2Crear un usuario nuevo con un email que no existeModal de "Contraseña generada" — copiala con el botón de copiar, no se vuelve a mostrar
3.3Intentar crear un usuario con un email ya usado422, mensaje claro
3.4Cerrar sesión y entrar con el usuario recién creado, usando la contraseña copiada en 3.2Login funciona — la cuenta es real en Firebase, no solo en la tabla users
3.5Como Admin, buscar ese usuario y click "Restablecer contraseña"Nuevo modal de contraseña — probar que la vieja (3.2) ya NO sirve para loguearse y la nueva sí
3.6Editar el email de un usuarioCerrar sesión y volver a entrar con el mail nuevo y la misma contraseña — tiene que andar (se sincronizó en Firebase)
3.7Desactivar un usuario y tratar de loguearse con élEl login de Firebase funciona (no lo bloquea Firebase), pero la app lo rebota igual — mensaje "usuario desactivado"
3.8Buscar por un fragmento de email en el buscadorFiltra la tabla, debounce (no dispara en cada tecla)

4. Roles y Permisos

#PasoResultado esperado
4.1Como Admin, entrar a Usuarios y Accesos → Roles y PermisosGrilla: filas = módulos, columnas = Admin/Supervisor/Backoffice, cada una con 3 checkboxes (L/E/B)
4.2En cualquier módulo de Backoffice, activar el checkbox "B" (Borrar)Se activan también "E" y "L" solos, sin que los toques
4.3Con B y E activos, intentar destildar "E"El checkbox de Escribir queda deshabilitado mientras Borrar esté activo — ni se puede clickear
4.4Destildar primero "B", después "E"Ahora sí se puede — hay que ir de abajo hacia arriba
4.5Con E activo, intentar destildar "L"Mismo bloqueo — hay que sacar Escribir primero
4.6Cualquier cambio válidoSe guarda solo, sin botón "Guardar" aparte — un click, un save

5. Asignación de Roles

#PasoResultado esperado
5.1Como Admin, entrar a Usuarios y Accesos → Asignación de RolesBuscador de usuario por email
5.2Buscar y elegir un usuarioAparece su tabla de asignaciones actuales (vacía si es nuevo) + formulario de alta a la derecha
5.3Alta: elegir país, rol, y 1-2 PDVs de ese paísSe crea, aparece en la tabla con los PDVs listados
5.4Repetir el alta exacto (mismo usuario+país+rol)422 — ya existe esa combinación
5.5Click "Editar PDVs" en una asignación existenteSe abre un editor inline con el multi-select de PDVs precargado
5.6Cerrar sesión y entrar con ese usuarioVe exactamente las transacciones/lo que corresponda a los PDVs/país recién asignados — ni más ni menos
5.7Eliminar una asignaciónPide confirmación, desaparece de la tabla

6. Timeout de sesión (⚠️ no verificado en navegador — probar con atención)

#PasoResultado esperado
6.1Como Admin, entrar a ConfiguraciónDebajo de la tarjeta de Soterex hay una nueva: "Timeout de sesión (global)"
6.2Cambiar el valor a 1 minuto y guardarSe guarda, muestra "Última edición" actualizada
6.3Dejar la pestaña quieta (sin mover mouse/teclado) por poco más de 1 minutoEsto es lo importante de probar: debería cerrar sesión sola y mandarte a /login?reason=timeout con un cartel "Tu sesión se cerró por inactividad"
6.4Volver a loguearte, y esta vez mover el mouse cada 30sLa sesión NO debería cerrarse mientras haya actividad
6.5En Roles y Permisos, poner un override de timeout distinto en un rol (ej. 2 minutos)Un usuario con ese rol usa 2 minutos en vez del global, aunque el global siga en 1
6.6En Usuarios, poner un override en un usuario puntual (ej. 10 minutos)Ese usuario usa 10 minutos sin importar lo que diga su rol o el global — el override de usuario gana siempre
6.7Volver a poner el timeout global en un valor razonable (ej. 30) antes de seguir usando la appEvita que se corte la sesión todo el tiempo mientras seguís probando otras pantallas

7. Auditoría

#PasoResultado esperado
7.1Como Admin o Supervisor, entrar a AuditoríaTabla paginada, más reciente primero
7.2Como Backoffice, entrar por URL directaTe rebota — Backoffice no tiene acceso a Auditoría
7.3Filtrar por acción (ej. "Usuario creado")Solo aparecen esas filas
7.4Filtrar por email del actorSolo movimientos hechos por ese usuario
7.5Mirar la columna "Detalle" de una fila de login, alta de país, o cambio de estado de transacciónTexto legible (no JSON crudo) — ej. "ACCEPTED → PAID (MTCN ...)"
7.6Mirar el detalle de algo menos comúnCae a un bloque de JSON crudo — no debería romper la página
7.7Cualquier acción hecha en las secciones 1-6 de este mismo documentoTiene que aparecer acá, filtrando por esa acción

8. Qué NO es parte de este módulo (no reportar como bug)

  • M5 (integración real con Soterex) sigue pendiente — Configuración solo tiene el modo mock/real de la conexión, sin credenciales de verdad todavía.
  • Roles y Permisos no tiene alta/baja/rename de rol — los 3 roles (Admin/Supervisor/Backoffice) son fijos por diseño, la pantalla solo edita la matriz de permisos.
  • El timer de inactividad es por pestaña — si tenés dos pestañas abiertas, una inactiva puede cerrar sesión mientras seguís usando la otra activamente. Es una limitación conocida y aceptada, no un bug.

Cómo reportarme el feedback

Con el número de la tabla alcanza (ej. "6.3 no cerró sesión sola"). Para la sección 6 en particular, contame también qué valor de timeout pusiste y cuánto tiempo esperaste realmente.

Documentación viva — se actualiza junto con el código, no es un anexo aparte.