Saltar al contenido principal

Pruebas requeridas

Alcance

Esta matriz concentra las validaciones funcionales recomendadas para los cambios recientes en:

  • roles BUSINESS, CROSS_BUSINESS y GLOBAL
  • permisos y modulos BUSINESS, GLOBAL y HYBRID
  • membresias globales sin businessId
  • separacion entre negocio y Panel de control
  • rutas, guards y permisos asociados

Como usarla

  • Ejecuta los casos por seccion.
  • Marca Estado como Pendiente, OK, Fallo o Bloqueado.
  • Si una prueba falla, registra evidencia y modulo afectado.

Datos minimos recomendados

  • Usuario A: membresia global activa con permisos globales completos.
  • Usuario B: membresia global activa con permisos globales parciales.
  • Usuario C: membresia de negocio activa y sin membresia global.
  • Usuario D: sin membresias activas.
  • Negocio 1 y Negocio 2 activos.
  • Negocio 3 inactivo.
  • Roles existentes de tipo BUSINESS, CROSS_BUSINESS y GLOBAL.
  • Modulos y permisos con tipos BUSINESS, GLOBAL y HYBRID.

1. Autenticacion y arranque

IDObjetivoPrecondicionPasosResultado esperadoPrioridadEstado
AUTH-01Validar arranque con usuario global completoUsuario A con membresia global ACTIVE y permisos globales validos1. Iniciar sesion. 2. Esperar hidratacion inicial. 3. Ir a seleccion de negocio.Se muestra acceso a Panel de control y el usuario puede entrar al contexto global.AltaPendiente
AUTH-02Validar arranque sin membresia globalUsuario C con membresia de negocio activa y sin membresia global1. Iniciar sesion. 2. Ir a seleccion de negocio.No aparece acceso a Panel de control.AltaPendiente
AUTH-03Validar usuario con permisos globales parcialesUsuario B con membresia global ACTIVE y permisos parciales1. Iniciar sesion. 2. Entrar a Panel de control.El panel abre, pero solo muestra modulos permitidos por sus permisos.AltaPendiente
AUTH-04Validar ausencia total de membresiasUsuario D sin membresias activas1. Iniciar sesion.No entra a negocio ni a Panel de control; la UI refleja falta de acceso.AltaPendiente
AUTH-05Refrescar acceso de sesion con /auth/meUsuario autenticado con membresias modificadas recientemente1. Ir a /admin/select-business-membership. 2. Esperar el aviso de actualizacion.La lista de negocios, acceso global y permisos reflejan la respuesta mas reciente de /auth/me.AltaPendiente

2. Seleccion de negocio y transicion de contexto

IDObjetivoPrecondicionPasosResultado esperadoPrioridadEstado
CTX-01Mostrar boton de Panel de control en seleccion de negocioUsuario A autenticado1. Ir a /admin/select-business-membership.Aparece acceso visible a Panel de control.AltaPendiente
CTX-02Ocultar Panel de control si no aplicaUsuario C autenticado1. Ir a /admin/select-business-membership.No aparece acceso a Panel de control.AltaPendiente
CTX-03Entrar al Panel de control desde seleccion de negocioUsuario A autenticado1. Hacer clic en Panel de control.Navega a /control-panel/home.AltaPendiente
CTX-04Entrar al Panel de control desde menu superior dentro de negocioUsuario A dentro de un negocio1. Abrir menu del header. 2. Hacer clic en Panel de control.Navega a /control-panel/home sin devolver a seleccion de negocio.AltaPendiente
CTX-05Salir del Panel de controlUsuario A dentro de /control-panel1. Abrir menu del header. 2. Hacer clic en Seleccionar negocio.Regresa a /admin/select-business-membership.AltaPendiente
CTX-06Validar limpieza del contexto de negocioUsuario A entra al panel desde un negocio1. Entrar a Panel de control. 2. Revisar requests y navegacion posterior.El panel no depende de cookie ni de businessId de negocio.AltaPendiente

3. Home y navegacion del Panel de control

IDObjetivoPrecondicionPasosResultado esperadoPrioridadEstado
CPH-01Validar cards visibles segun permisosUsuario B con permisos parciales1. Entrar a /control-panel/home.Solo aparecen cards de modulos autorizados.AltaPendiente
CPH-02Validar coherencia visual del homeUsuario A autenticado1. Entrar a /control-panel/home.Todas las cards tienen fondo blanco uniforme y apariencia consistente.MediaPendiente
CPH-03Validar iconografia consistente con sidebarUsuario A autenticado1. Comparar iconos del home y del sidebar.Los iconos coinciden visualmente con los del sidebar.BajaPendiente
CPH-04Validar textos en lenguaje usuarioUsuario A autenticado1. Revisar cards del home.No se muestran labels tecnicos crudos como BUSINESS, GLOBAL, HYBRID o CROSS_BUSINESS.MediaPendiente
CPH-05Validar header del drawer movil a 280pxViewport de 280px de ancho1. Abrir Panel de control. 2. Abrir sidebar movil.Logo, chip y boton de cierre se ven correctos, sin cortes ni solapamientos.MediaPendiente

4. Usuarios globales

IDObjetivoPrecondicionPasosResultado esperadoPrioridadEstado
USR-01Listar solo usuarios globalesUsuario A con permiso de listar usuarios1. Ir a /control-panel/users.El listado muestra solo usuarios con membresia sin businessId.AltaPendiente
USR-02Ver detalle de usuario globalUsuario A con permiso suficiente1. Abrir detalle de un usuario del listado.El detalle corresponde a la membresia global seleccionada.MediaPendiente
USR-03Crear membresia globalUsuario A con permiso core.memberships.create1. Abrir Crear membresia. 2. Seleccionar usuario. 3. Dejar vacio el selector de negocio. 4. Guardar.Se crea membresia PENDING sin businessId.AltaPendiente
USR-04Crear membresia de negocio desde Panel de controlUsuario A con permiso core.memberships.create1. Abrir Crear membresia. 2. Seleccionar usuario. 3. Elegir negocio desde el lazy select. 4. Guardar.Se crea membresia PENDING ligada al businessId seleccionado.AltaPendiente
USR-05Evitar duplicado de membresia globalUsuario que ya posee membresia global1. Intentar crear otra membresia global.Backend rechaza la operacion y la UI informa el error.AltaPendiente
USR-06Evitar duplicado en el mismo negocioUsuario que ya posee membresia en un negocio1. Intentar crear otra membresia para el mismo negocio.Backend rechaza la operacion y la UI informa el error.AltaPendiente

5. Roles

IDObjetivoPrecondicionPasosResultado esperadoPrioridadEstado
ROLE-01Administrar roles globales y transversales desde Panel de controlUsuario A con permisos de roles1. Ir a /control-panel/roles.Solo se gestionan roles GLOBAL y CROSS_BUSINESS.AltaPendiente
ROLE-02Administrar roles de negocio solo en contexto negocioUsuario con acceso a un negocio1. Ir a /admin/roles.Solo se gestionan roles BUSINESS.AltaPendiente
ROLE-03Filtrar permisos validos para rol globalUsuario A con permisos de edicion de roles1. Crear o editar rol GLOBAL.Solo se pueden asignar permisos GLOBAL y HYBRID.AltaPendiente
ROLE-04Filtrar permisos validos para rol transversalUsuario A con permisos de edicion de roles1. Crear o editar rol CROSS_BUSINESS.Solo se pueden asignar permisos BUSINESS y HYBRID.AltaPendiente
ROLE-05Filtrar permisos validos para rol de negocioUsuario con permisos de roles en un negocio1. Crear o editar rol BUSINESS.Solo se pueden asignar permisos BUSINESS y HYBRID.AltaPendiente
ROLE-06Persistir permisos del rol con su typeRol editado recientemente1. Editar un rol. 2. Guardar.La subcoleccion Roles/{roleId}/Permissions conserva type consistente con la coleccion maestra.AltaPendiente

6. Permisos y modulos

IDObjetivoPrecondicionPasosResultado esperadoPrioridadEstado
ACL-01Listar todos los tipos en Panel de controlUsuario A con permisos de consulta1. Abrir /control-panel/permissions. 2. Abrir /control-panel/modules.Se visualizan tipos BUSINESS, GLOBAL y HYBRID.AltaPendiente
ACL-02Limitar listados en negocioUsuario con acceso a negocio1. Abrir paginas de permisos y modulos dentro de negocio.Solo se visualizan elementos BUSINESS y HYBRID.AltaPendiente
ACL-03Ocultar tipo en negocioUsuario con acceso a negocio1. Revisar tablas de permisos y modulos en negocio.No se muestra el chip o columna de tipo.MediaPendiente
ACL-04Mantener tipo visible en Panel de controlUsuario A con acceso al panel1. Revisar tablas de permisos y modulos del panel.El tipo si se muestra.MediaPendiente
ACL-05Unificar color del tipo compartidoUsuario A con acceso al panel1. Revisar chips HYBRID en permisos y modulos.Ambos usan el mismo amarillo y contraste consistente.BajaPendiente
ACL-06Crear modulo desde Panel de controlUsuario A con permiso core.modules.create1. Abrir creacion de modulo. 2. Elegir tipo. 3. Guardar.El modulo se crea con el tipo correcto.AltaPendiente
ACL-07Eliminar modulo desde Panel de controlUsuario A con permiso core.modules.delete1. Eliminar un modulo permitido.El modulo desaparece del listado y backend confirma la operacion.AltaPendiente
ACL-08Crear permiso desde Panel de controlUsuario A con permiso core.permissions.create1. Abrir creacion de permiso. 2. Elegir tipo. 3. Guardar.El permiso se crea con el tipo correcto.AltaPendiente
ACL-09Eliminar permiso desde Panel de controlUsuario A con permiso core.permissions.delete1. Eliminar un permiso permitido.El permiso desaparece del listado y backend confirma la operacion.AltaPendiente
ACL-10Confirmar ausencia de CRUD de permisos y modulos en negocioUsuario con acceso a negocio1. Revisar UI de permisos y modulos dentro del negocio.No existen acciones de crear, editar o eliminar.AltaPendiente

7. Negocios y planes

IDObjetivoPrecondicionPasosResultado esperadoPrioridadEstado
BP-01Listar negocios desde Panel de controlUsuario A con core.bussinesses.list1. Ir a /control-panel/businesses.Se listan negocios conforme a permisos.AltaPendiente
BP-02Crear, editar y eliminar negocio con permisos globalesUsuario A con permisos completos de negocios1. Crear negocio. 2. Editarlo. 3. Eliminarlo.Todas las operaciones globales funcionan segun permiso.AltaPendiente
BP-03Bloquear acceso a negocios sin permisoUsuario B sin permisos de negocios1. Intentar abrir /control-panel/businesses.La UI o el guard bloquean el acceso.AltaPendiente
BP-03APermitir nombres repetidos con slug unicoUsuario A con permisos de negocio1. Crear negocio Barberia Final. 2. Crear otro negocio con el mismo nombre.El segundo negocio se crea y recibe un slug distinto, por ejemplo con sufijo corto.AltaPendiente
BP-03BMantener slug estable tras editar negocioNegocio ya creado con slug conocido1. Abrir edicion del negocio. 2. Revisar nombre e identificador.El nombre/slug no se editan libremente y el identificador publico se conserva.AltaPendiente
BP-04Listar planes desde Panel de controlUsuario A con core.plan.list1. Ir a /control-panel/plans.Se listan planes conforme a permisos.AltaPendiente
BP-05Crear, editar y eliminar plan con permisos globalesUsuario A con permisos completos de planes1. Crear plan. 2. Editarlo. 3. Eliminarlo.Todas las operaciones globales funcionan segun permiso.AltaPendiente
BP-06Bloquear acceso a planes sin permisoUsuario B sin permisos de planes1. Intentar abrir /control-panel/plans.La UI o el guard bloquean el acceso.AltaPendiente

8. Membresias y operaciones sensibles

IDObjetivoPrecondicionPasosResultado esperadoPrioridadEstado
MEM-01Cambiar estado de membresia en negocio con permisos validosUsuario autorizado dentro del negocio1. Ejecutar toggle-status sobre una membresia del mismo negocio.La operacion funciona.AltaPendiente
MEM-02Bloquear cambio de estado sin permisoUsuario sin permiso suficiente1. Intentar toggle-status.Backend responde error de autorizacion.AltaPendiente
MEM-03Cambiar isEmployee con permisos validosUsuario autorizado dentro del negocio1. Ejecutar toggle-employee.La operacion funciona solo para membresias del negocio correspondiente.AltaPendiente
MEM-04Asignar branch con permisos validosUsuario autorizado dentro del negocio1. Ejecutar assign-branch.La operacion funciona solo si la membresia pertenece a ese negocio.AltaPendiente
MEM-05Asignar rol global a membresia globalUsuario A con permisos sobre membresias y roles1. Asignar rol a una membresia sin businessId.Solo acepta roles GLOBAL.AltaPendiente
MEM-06Asignar rol de negocio a membresia de negocioUsuario autorizado en un negocio1. Asignar rol a una membresia con businessId.Solo acepta roles BUSINESS o CROSS_BUSINESS.AltaPendiente
MEM-07Bloquear mutaciones cruzadas por businessIdUsuario autenticado en negocio A1. Intentar mutar membresia del negocio B.Backend rechaza la operacion.AltaPendiente
MEM-08Eliminar logicamente una membresia de negocioUsuario autorizado con permiso core.memberships.delete1. Ejecutar PATCH /business-memberships/:id/delete.La membresia queda DELETED, sin branchId, sin isEmployee, y desaparece del acceso operativo del usuario.AltaPendiente
MEM-09Bloquear borrado de empleado con citas activasMembresia de empleado con citas CREATED o IN_PROGRESS1. Intentar eliminar la membresia.Backend rechaza la eliminacion para no romper agenda activa.AltaPendiente
MEM-10Reactivar membresia admin por superadmin globalUsuario A con rol global SUPER_ADMIN y membresia admin restaurable en negocio1. Consultar negocios restaurables. 2. Ejecutar POST /business-memberships/reactivate-admin.La membresia queda ACTIVE, con rol admin y acceso al negocio restaurado.AltaPendiente

9. Rutas y guards

IDObjetivoPrecondicionPasosResultado esperadoPrioridadEstado
ROUTE-01Bloquear rutas globales sin membresia globalUsuario C sin membresia global1. Navegar manualmente a /control-panel/home.Redirige fuera del panel o muestra acceso denegado.AltaPendiente
ROUTE-02Bloquear rutas globales sin permiso especificoUsuario B con acceso parcial1. Navegar manualmente a un modulo no permitido del panel.Redirige a /control-panel/home o muestra acceso denegado.AltaPendiente
ROUTE-03Bloquear rutas de negocio sin membresia activa de ese negocioUsuario autenticado sin acceso al negocio consultado1. Navegar a una ruta privada de negocio.Redirige a seleccion de negocio.AltaPendiente
ROUTE-04Confirmar que la membresia global no sustituye membresia de negocioUsuario A con membresia global pero sin membresia en cierto negocio1. Intentar entrar a ese negocio.No obtiene acceso operativo solo por tener membresia global.AltaPendiente

10. Reservas publicas, plan y disponibilidad

IDObjetivoPrecondicionPasosResultado esperadoPrioridadEstado
PUB-01Mostrar indisponibilidad publica si el negocio esta inactivoNegocio con status = INACTIVE1. Abrir /book/:slug.La pantalla no deja reservar y muestra indisponibilidad del negocio.AltaPendiente
PUB-02Mostrar indisponibilidad publica si la suscripcion no esta operativaNegocio con suscripcion inactiva o vencida1. Abrir /book/:slug.La pantalla no deja reservar y muestra indisponibilidad del negocio.AltaPendiente
PUB-03Permitir gestion publica de booking ya creado aunque el plan no este operativoBooking creado previamente para negocio hoy no operativo1. Abrir /booking/:bookingId. 2. Editar una cita existente.El flujo publico permite editar o cancelar citas existentes si las validaciones operativas pasan.AltaPendiente
PUB-04Bloquear agregar nuevas citas en gestion publicaBooking existente1. Abrir /booking/:bookingId. 2. Intentar agregar una nueva cita.La UI no ofrece la accion y el backend no la acepta.AltaPendiente
PUB-05Mantener bloqueo privado por plan no operativoNegocio con plan vencido o inactivo1. Entrar al panel privado. 2. Intentar editar booking desde /admin.La operacion privada sigue bloqueada por la validacion del plan.AltaPendiente
PAY-01Sobrescribir monto pagado en bookingBooking CREATED con total mayor a cero1. Ejecutar edicion privada con nuevo total pagado. 2. Revisar PUT /bookings/:id/paid-amount.paidAmount queda exactamente en el valor enviado y paymentStatus se recalcula.AltaPendiente
PAY-02Bloquear paidAmount mayor al totalBooking con totalAmount conocido1. Intentar declarar paidAmount superior a totalAmount.UI y backend rechazan el valor.AltaPendiente

11. Agenda, sedes y servicios

IDObjetivoPrecondicionPasosResultado esperadoPrioridadEstado
OPS-01Bloquear cambio de horario de sede si deja citas activas por fueraSede con citas CREATED o IN_PROGRESS en rangos que quedarian invalidos1. Editar horario de la sede. 2. Guardar un horario mas corto.Backend rechaza el cambio.AltaPendiente
OPS-02Permitir cambio de horario de sede si no afecta citas activasSede sin conflictos de horario1. Editar horario de la sede. 2. Guardar.El cambio se persiste correctamente.MediaPendiente
OPS-03Bloquear inactivacion de servicio con citas activasServicio asociado a citas CREATED o IN_PROGRESS1. Intentar poner el servicio en INACTIVE.Backend rechaza la operacion.AltaPendiente
OPS-04Permitir inactivacion de servicio sin citas activasServicio sin citas activas asociadas1. Intentar poner el servicio en INACTIVE.La operacion se completa.MediaPendiente
OPS-05Bloquear agendamiento con servicio inactivoServicio INACTIVE conocido1. Enviar creacion o edicion de booking usando ese serviceId.Backend rechaza la operacion.AltaPendiente
OPS-06Validar que el editor de horario guarde horas correctasSede editable con al menos un dia abierto1. Editar horas con TimePickerField. 2. Guardar. 3. Reabrir la sede.Los horarios persisten sin desfase, formato invalido ni perdida de dias abiertos.MediaPendiente

12. Regresiones visuales y UX

IDObjetivoPrecondicionPasosResultado esperadoPrioridadEstado
UI-01Verificar separacion visual entre negocio y Panel de controlUsuario A con acceso a ambos contextos1. Entrar a negocio. 2. Entrar a panel.Layout, navegacion y percepcion de contexto se sienten claramente distintos.MediaPendiente
UI-02Verificar perfil desde ambos contextosUsuario autenticado1. Abrir Ver perfil desde negocio. 2. Abrir Ver perfil desde panel.La vista funciona en ambos contextos.MediaPendiente
UI-03Verificar funcionamiento de cambio de negocioUsuario con multiples negocios1. Cambiar de negocio.El flujo sigue funcionando como antes del cambio.AltaPendiente
UI-04Verificar que la PWA no sirva assets viejosEntorno local o staging con build reciente1. Refrescar. 2. Hacer hard refresh si hace falta.La UI refleja los cambios mas recientes sin inconsistencias.BajaPendiente
UI-05Evitar borrado de archivos de otro bucketURL de Storage perteneciente a otro ambiente1. Intentar eliminar una imagen referenciada por URL externa al bucket actual.El frontend omite el borrado y no afecta recursos de otro ambiente.AltaPendiente
UI-06Validar recorte de imagen en carga individual y galeriaImagen grande para negocio o sede1. Subir imagen. 2. Ajustar recorte. 3. Guardar.La imagen final se carga correctamente y los rollbacks limpian solo archivos del bucket actual.MediaPendiente

13. Seguridad manual

IDObjetivoPrecondicionPasosResultado esperadoPrioridadEstado
SEC-01Confirmar eliminacion de hardcodes rootUsuario no privilegiado1. Intentar acceder a modulos globales sin permisos reales.No accede por documento, email o rol quemado; solo por permisos.AltaPendiente
SEC-02Confirmar 403 en endpoints globales sin permisoUsuario autenticado sin permiso requerido1. Consumir endpoint global protegido.Backend responde 403.AltaPendiente
SEC-03Confirmar 403 o 400 en mutaciones cruzadas de membresiasUsuario con contexto de negocio distinto1. Intentar mutar membresia ajena al negocio.Backend rechaza la solicitud.AltaPendiente
SEC-04Confirmar token interno en outboxRequest sin token o con token invalido1. Consumir GET /outbox y POST /outbox/process.Backend responde no autorizado aunque la ruta no exija Firebase Auth.AltaPendiente
SEC-05Validar /health publicoSin sesion1. Consumir GET /health.Responde 200 con estado basico del proceso.MediaPendiente