| A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z | AA | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | NEXUS DIGITAL | ||||||||||||||||||||||||||
2 | ID # | Título | HU relacionada | Descripción | Precondiciones | Datos de Prueba | Pasos | Resultado Esperado | Status | Prioridad | #Etiquetas (Tipos de Pruebas) | Evidencia | Diseñado por | Ejecutado por | Fecha de Ejecución | Resultado Obtenido | Comentarios | Criterio de aceptación | Tipo de testing | Capa | ¿Automatizable? | ID del test automatizado | |||||
3 | Nro | Objetivo del test case (Que se desea probar) | Explicar brevemente que es lo que se va a probar | Todo lo que necesito previamente para poder ejecutar estos test cases | Alguna Query necesaria, Credenciales, etc | Paso a paso de como probar este caso de prueba | Que es lo que debería hacer el sistema al ejecutar los pasos | NOT RUN | Crítica | Tags para filtrar los test cases | Captura de pantalla, gif, video demostrando que la prueba fue ejecutada | Diseñado por | Persona que ejecutó el caso de prueba | Fecha en la que se ejecutó este caso de prueba | Lo que realmente ocurre al ejecutar la prueba | En caso de que falle el test case, colocar una breve descripción explicando el porque falló y el ID del bug reportado | El criterio de la HU que verifica el caso. | Funcional, negativo, integración, etc. | Unit, API/Integración o UI. | Sí o No | El identificador del test cuando lo implementen. | ||||||
4 | CP-01A | Registro de usuario | HU-01 | Verificar que un nuevo usuario pueda registrarse exitosamente en la aplicación móvil completando el formulario con datos válidos. | La aplicación Android se encuentra instalada y abierta en el dispositivo o emulador. El backend (API Django) está activo, accesible y con la base de datos conectada. La pantalla de Registro (RegisterActivity) está visible y accesible desde el Login.El correo o nombre de usuario ingresado no debe existir previamente en la base de datos. | Nombre: Juan | Apellido: Alonso | Usuario: juan_test | Email: juan.test@ejemplo.com | Contraseña: Password123! | Confirmar Contraseña: Password123! | 1. Abrir la aplicación e ir a la opción "Registrarse" o "Crear cuenta". 2. Ingresar el nombre y apellido en los campos correspondientes. 3. Ingresar un correo electrónico válido y no registrado. Ingresar una contraseña válida y confirmarla en el campo correspondiente. 4.Presionar el botón "Registrarse". | La aplicación envía los datos vía POST a la API de Django; el servidor responde exitosamente (código 201 Created), se almacena el nuevo registro en la base de datos, la app muestra un mensaje de confirmación/éxito y redirige al usuario a la pantalla de Login o a la pantalla principal. | NOT RUN | Crítica | Funcional - Seguridad, RF01 | Juan Ignacio Alonso | PENDIENTE | PENDIENTE | PENDIENTE | Funcional | UI instrumentada | Sí | |||||||||
5 | CP-01B | Registro y posterior inicio de sesión con la cuenta creada | HU-01 | Verificar que una cuenta recién registrada queda almacenada y puede usarse para iniciar sesión. | Backend activo con base de datos conectada. La app está en RegisterActivity. El email a usar no existe en la base de datos. | Nombre: Juan | Apellido: Alonso | Email: juan.nuevo@ejemplo.com | Contraseña: Password123! | Confirmar: Password123! | 1. Completar el formulario de registro con datos válidos y presionar "Registrarse". 2. Verificar que el registro finaliza con éxito. 3. Ir a la pantalla de Login. 4. Ingresar el email y la contraseña recién registrados y presionar "Ingresar". | El registro responde 201 Created y el usuario queda almacenado. Con esas mismas credenciales el login es exitoso y la app navega a la pantalla principal. | NOT RUN | Crítica | Integración - Registro/Login, RF01 | Juan Ignacio Alonso | PENDIENTE | PENDIENTE | PENDIENTE | El usuario registrado puede autenticarse con las credenciales creadas. | Integración | UI instrumentada | Sí | ||||||||
6 | CP-01C | Contraseña oculta en el formulario de registro | HU-01 | Verificar que los campos de contraseña no muestran el texto en claro mientras el usuario escribe (protección de datos sensibles). | La app está en RegisterActivity. | Contraseña: Password123! | Confirmar contraseña: Password123! | 1. Abrir la pantalla de Registro. 2. Escribir una contraseña en el campo "Contraseña". 3. Escribir la misma contraseña en "Confirmar contraseña". 4. Observar cómo se muestran los caracteres. | Los caracteres de ambos campos se muestran enmascarados (puntos o asteriscos) y no en texto plano. | NOT RUN | Alta | Funcional - Seguridad, UI, RF01 | Diseñado por | PENDIENTE | PENDIENTE | PENDIENTE | Los datos sensibles ingresados no se exponen en pantalla. | Funcional | UI instrumentada | Sí | ||||||||
7 | CP-01D | Registro con servidor no disponible | HU-01 | Verificar que si el backend no responde, la app informa el error al usuario sin cerrarse ni dejar la pantalla en estado inconsistente. | La app está en RegisterActivity con el formulario completo con datos válidos. El backend está detenido o sin conexión (modo avión). | Nombre: Juan | Apellido: Alonso | Email: juan.test2@ejemplo.com | Contraseña: Password123! | Confirmar: Password123! | 1. Detener el backend o desactivar la conexión de red. 2. Completar el formulario con datos válidos. 3. Presionar "Registrarse". 4. Observar la respuesta de la app. | La app muestra un mensaje de error de conexión, no se cierra inesperadamente y no indica que el registro fue exitoso. El formulario permite reintentar. | NOT RUN | Alta | Negativa - Resiliencia, RF01 | Diseñado por | PENDIENTE | PENDIENTE | PENDIENTE | La app maneja la falla de conexión sin romperse. | Negativa | UI instrumentada | No | ||||||||
8 | CP-02A | Validación del registro | Verificar que la aplicación impida el registro y muestre los mensajes de error adecuados ante campos obligatorios vacíos, formatos de correo inválidos o contraseñas que no coinciden. | La aplicación Android se encuentra en la pantalla de Registro (RegisterActivity). El backend y los servicios de red están activos. | Caso 1 (Campos vacíos): Formulario en blanco. Caso 2 (Email inválido): Email = correo_invalido@sinformato. Caso 3 (Discrepancia de clave): Contraseña = Password123!, Confirmación = Password456! Caso 4 (Usuario existente): Email ya registrado en la base de datos (juan.test@ejemplo.com). | 1. Intentar presionar el botón "Registrarse" dejando los campos obligatorios vacíos y observar las advertencias. 2. Ingresar un email con formato incorrecto y presionar "Registrarse". 3. Ingresar contraseñas diferentes en los campos "Contraseña" y "Confirmar Contraseña" y presionar ,"Registrarse". 4. Ingresar un correo o usuario ya existente en la base de datos con contraseñas coincidentes y presionar "Registrarse". | La aplicación bloquea el envío o el servidor rechaza la solicitud (código 400 Bad Request / 409 Conflict). La interfaz muestra alertas visuales claras indicando qué campo contiene el error, no se produce ningún cierre inesperado (crash) y no se crea ningún registro erróneo en la base de datos. | NOT RUN | Crítica | PENDIENTE | Diseñado por | PENDIENTE | PENDIENTE | PENDIENTE | Negativa | Unitaria local (JVM) | Sí | AUT-UNIT-03 · AUT-UNIT-04 | |||||||||
9 | CP-02B | Registro con campos obligatorios vacíos | HU-01 | Verificar que no se puede registrar un usuario dejando campos obligatorios vacíos. | La app está en RegisterActivity. El backend está activo. | Formulario completamente en blanco (y variante: un solo campo vacío a la vez). | 1. Dejar todos los campos vacíos. 2. Presionar "Registrarse". 3. Repetir completando todos los campos excepto uno. | La app no envía la solicitud (o el servidor responde 400) e indica qué campo es obligatorio. No se crea ningún usuario. | PASS | Crítica | Negativa - Validación, RF01 | testing succesful.jpg, Test results - Test Summary.html | Laura Molina | Laura Molina | 11/10/26 | El sistema impidió el registro y los validadores rechazaron las entradas vacías (""), cadenas compuestas solo por espacios en blanco (" ") y valores nulos (null), arrojando estado inválido según lo esperado. | Se crearon dos tests en JUnit: uno negativo que rechaza valores vacíos, nulos o con espacios (testCampoObligatorioVacio_retornaFalso), y otro positivo que valida el ingreso con texto (testCampoConContenido_retornaVerdadero). Ambos aprobaron. | Los campos obligatorios no pueden quedar vacíos. | Negativa | Unitaria local (JVM) | Sí | AUT-UNIT-02 | |||||
10 | CP-02C | Registro con email de formato inválido | HU-01 | Verificar que el registro se rechaza cuando el email no tiene un formato válido. | La app está en RegisterActivity. El backend está activo. | Email: correo_invalido@sinformato | Contraseña: Password123! | Confirmar: Password123! | 1. Completar nombre, apellido y contraseñas válidas. 2. Ingresar un email sin formato válido. 3. Presionar "Registrarse". | La app muestra un mensaje de error en el campo email y no registra al usuario. | NOT RUN | Alta | Negativa - Validación, RF01 | imagenes de nexus | Andres Raffaeli | Augusto Andres Raffaeli | 12/10/26 | El validador debe retornar false (o lanzar excepción de formato inválido) y rechazar la contraseña. | Exitoso (PASS). La prueba unitaria en JUnit con @ParameterizedTest validó correctamente los casos borde de contraseñas mal formadas sin errores en la ejecución. | Solo se aceptan emails con formato válido. | Negativa | Unitaria local (JVM) | Sí | AUT-UNIT-04 | |||||
11 | CP-02D | Registro con contraseñas que no coinciden | HU-01 | Verificar que el registro se rechaza si la contraseña y su confirmación son distintas. | La app está en RegisterActivity. El backend está activo. | Contraseña: Password123! | Confirmar: Password456! | 1. Completar los datos con email válido. 2. Ingresar contraseñas distintas en "Contraseña" y "Confirmar contraseña". 3. Presionar "Registrarse". | La app informa que las contraseñas no coinciden y no envía el registro. | NOT RUN | Alta | Negativa - Validación, RF01 | Diseñado por | PENDIENTE | PENDIENTE | PENDIENTE | La confirmación de contraseña debe coincidir con la contraseña. | Negativa | UI instrumentada | Sí | ||||||||
12 | CP-02E | Registro con email ya registrado | HU-01 | Verificar que no se puede crear un segundo usuario con un email existente. | Existe un usuario registrado con el email juan.test@ejemplo.com. La app está en RegisterActivity. | Email ya registrado: juan.test@ejemplo.com | Contraseña: Password123! | Confirmar: Password123! | 1. Completar el formulario usando el email ya registrado. 2. Presionar "Registrarse". 3. Observar la respuesta. | El servidor rechaza la solicitud (400 Bad Request / 409 Conflict), la app informa que el email ya existe y no se duplica el usuario. | NOT RUN | Alta | Negativa - Integridad de datos, RF01 | Diseñado por | PENDIENTE | PENDIENTE | PENDIENTE | No se permiten cuentas duplicadas. | Negativa | Integración de red | No | ||||||||
13 | CP-02F | Registro con dato por debajo del límite mínimo | HU-01 | Verificar el valor límite: un dato con longitud inferior al mínimo permitido es rechazado. | La app está en RegisterActivity. Se conoce la longitud mínima definida para el campo (según la regla de validación implementada). | Valor con longitud mínima − 1 caracteres y valor con exactamente la longitud mínima. | 1. Ingresar un valor un carácter más corto que el mínimo. 2. Presionar "Registrarse" y observar. 3. Repetir con un valor de exactamente el mínimo. | El valor inferior al mínimo es rechazado con mensaje de error; el valor de longitud mínima exacta es aceptado. | PASS | Media | Negativa - Valor límite, RF01 | test 3.jpg - Google Drive, test 3.html | Laura Molina | Laura Molina | 11/10/26 | El validador retornó false al ingresar un dato con longitud inferior al límite requerido (5 caracteres frente al umbral mínimo de 6) y true al ingresar exactamente la cantidad mínima requerida (6 caracteres), cumpliendo con la regla de negocio. | Se crearon dos tests en JUnit: uno negativo que rechaza si tiene menos del mínimo (testLongitudInferiorAlLimite_retornaFalso), y otro positivo en el límite exacto de 6 caracteres (testLongitudExactaAlLimite_retornaVerdadero). Ambos aprobaron. | Se respetan los límites de longitud definidos. | Negativa | Unitaria local (JVM) | Sí | AUT-UNIT-03 | |||||
14 | CP-03A | Inicio de sesión | HU-02 | Verificar que un usuario con credenciales válidas puede iniciar sesión correctamente. | Existe al menos un usuario registrado con credencialesválidas en la base de datos. El servidor Django esta activo y accesible . La app muestra LoginActivity. | Email: juan.test@ejemplo.com Password: Password123! | 1. Abrir la app. 2. Ingresar usuario en el campo correspondiente. 3. Ingresar contraseña. 4. Presionar el botón "Ingresar". | El sistema valida las credenciales contra la API de Django, recibe el token de autenticación y navega a la pantalla principal mostrando un mensaje de bienvenida. | NOT RUN | Crítica | Funcional - Seguridad | Diseñado por | PENDIENTE | PENDIENTE | PENDIENTE | PENDIENTE | Funcional | Unitaria local (JVM) | Sí | AUT-UNIT-02 | |||||||
15 | CP-03B | Inicio de sesión con credenciales inválidas | HU-02 | Verificar que el sistema rechase el login cuando el email o la contraseña son incorrectas | Existe al menos un usuario registrado con credencialesválidas en la base de datos. El servidor Django esta activo y accesible . La app muestra LoginActivity. | Email: juan.test@ejemplo.com Password incorrecta : clave-equivocad999 | 1. Abrir la app. 2. Ingresar el email válido(juan.test@ejemplo.com. 3. Ingresar una contraseña incorrecta. 4. Presionar "Ingresar". | La app muestra el mensaje "Email o contraseña incorrectos", no navega a ninguna otra pantalla, y no guarda ninguna sesión. | NOT RUN | Critica | Funcional - Seguridad, Negativa | Diseñado por | PENDIENTE | PENDIENTE | PENDIENTE | PENDIENTE | Negativa | UI instrumentada | Sí | AUT-UI-03 | |||||||
16 | CP-03C | Inicio de sesión con campos vacíos | HU-02 | Verificar que no se puede iniciar sesión dejando email y/o contraseña vacíos. | La app muestra LoginActivity. | Email vacío y contraseña vacía (y variantes con uno solo de los campos vacío). | 1. Abrir la app en la pantalla de Login. 2. Dejar los campos vacíos. 3. Presionar "Ingresar". | La app muestra un mensaje indicando que los campos son obligatorios, no envía la solicitud, no navega y no guarda sesión. | PASS | Alta | Negativa - Validación, Seguridad | Reporte HTML de connectedDebugAndroidTest y capturas (link de Drive de AUT-UI-01) | Griselda Aguirre | Aguirre Griselda | 12/10/2026 | : Con email y contraseña vacíos, al presionar “Ingresar” la app muestra el mensaje “Completá email y contraseña”, no navega a otra pantalla y no guarda sesión. | Test de UI con Espresso y ActivityScenarioRule: LoginFlowTest.mostrarErrorCuandoLosCamposEstanVacios. Ejecutado con .\gradlew connectedDebugAndroidTest en Android 11: 2 tests, 0 fallos. Cubre el caso de ambos campos vacíos. | Los campos obligatorios no pueden quedar vacíos al iniciar sesión. | Negativa | UI instrumentada | Sí | AUT-UI-01 · AUT-UNIT-02 | |||||
17 | CP-03D | Inicio de sesión con email de formato inválido | HU-02 | Verificar que el login rechaza un email con formato incorrecto antes de consultar al servidor. | La app muestra LoginActivity. | Email: correo_invalido@sinformato | Contraseña: Password123! | 1. Ingresar un email sin formato válido. 2. Ingresar una contraseña cualquiera. 3. Presionar "Ingresar". | La app indica que el email no es válido, no navega y no guarda sesión. | NOT RUN | Media | Negativa - Validación | Diseñado por | PENDIENTE | PENDIENTE | El email debe tener formato válido. | Negativa | Unitaria local (JVM) | Sí | AUT-UNIT-04 | ||||||||
18 | CP-03E | Inicio de sesión con usuario inexistente | HU-02 | Verificar que el login falla de forma controlada con un email que no está registrado. | El backend está activo. El email a usar no existe en la base de datos. | Email: noexiste@ejemplo.com | Contraseña: Password123! | 1. Ingresar el email inexistente y una contraseña. 2. Presionar "Ingresar". 3. Observar el mensaje. | La app muestra un mensaje de error de credenciales, no navega y no guarda sesión. La app no se cierra inesperadamente. | NOT RUN | Alta | Negativa - Seguridad | Diseñado por | PENDIENTE | PENDIENTE | PENDIENTE | Un usuario inexistente no puede autenticarse. | Negativa | Unitaria local (JVM) | Sí | AUT-UNIT-06 | |||||||
19 | CP-03F | Almacenamiento de sesión tras login exitoso | HU-02 | Verificar que luego de un login exitoso la app guarda el token y los datos del usuario. | Existe un usuario registrado. El backend está activo. | Email: juan.test@ejemplo.com | Contraseña: Password123! | 1. Iniciar sesión con credenciales válidas. 2. Verificar que la app navega a la pantalla principal. 3. Confirmar que la sesión (token y usuario) quedó guardada, por ejemplo accediendo al Perfil. | Se guardan el token de autenticación y los datos del usuario, y están disponibles para las demás pantallas. | NOT RUN | Alta | Funcional - Sesión, Seguridad | Diseñado por | PENDIENTE | PENDIENTE | PENDIENTE | Tras autenticarse, la sesión queda disponible para la app. | Funcional | Unitaria local (JVM) | Sí | AUT-UNIT-05 | |||||||
20 | CP-03G | Inicio de sesión con falla del servidor (error 500) | HU-02 | Verificar que ante un error del servidor el login informa el problema sin cerrar la app ni guardar sesión. | Servidor simulado (MockWebServer) respondiendo 500, o backend con falla controlada. | Respuesta HTTP 500 Internal Server Error. | 1. Configurar la respuesta 500. 2. Intentar iniciar sesión con credenciales válidas. 3. Observar el resultado. | La app devuelve un error controlado, no se cierra, no navega y no guarda sesión. | NOT RUN | Alta | Negativa - Resiliencia | Diseñado por | PENDIENTE | PENDIENTE | PENDIENTE | El login maneja errores del servidor sin romperse. | Negativa | Integración de red | Sí | AUT-NET-02 | |||||||
21 | CP-04A | Navegación desde Login | HU-07 | Verificar que tras un login exitoso la app redirige correctamente a la pantalla principal. | El usuario ya completó un login exitoso(depende de CP_03). MainActivity (u otra pantalla destino) ya esta implementada. | Mismas credenciales válidas usadas en CP_03 | 1. Realizar login exitoso (pasos de CP_03). 2. Observar la pantalla que se muestra inmediatamente después. | La app abre la pantalla principal(HomeActivity) sin errores ni cierres inesperados, mostrando el catálogo de productos. | NOT RUN | Alta | Funcional - Navegación | Diseñado por | PENDIENTE | PENDIENTE | PENDIENTE | Si CP-03 falla ,este caso pasa automáticamente a estado BLOCKED - no debe ejecutarse con credenciales inválidas. | Funcional | UI instrumentada | Sí | AUT-UI-02 | |||||||
22 | CP-04B | Login fallido no navega a la pantalla principal | HU-07 | Verificar que con credenciales inválidas la app permanece en Login y no abre la pantalla principal. | Existe un usuario registrado. La app muestra LoginActivity. | Email: juan.test@ejemplo.com | Contraseña incorrecta: clave-equivocada999 | 1. Ingresar email válido y contraseña incorrecta. 2. Presionar "Ingresar". 3. Observar la pantalla mostrada. | La app permanece en LoginActivity con el mensaje de error y no abre HomeActivity. | NOT RUN | Alta | Funcional - Navegación, Seguridad, Negativa | Diseñado por | PENDIENTE | PENDIENTE | PENDIENTE | No se accede a la pantalla principal sin autenticarse. | Negativa | UI instrumentada | Sí | AUT-UI-03 | |||||||
23 | CP-05A | Visualización del catálogo | HU-03 | Verificar que la aplicación muestre correctamente el listado de productos disponibles en la pantalla de catálogo. | El usuario inició sesión correctamente. Existe al menos un producto cargado. La pantalla HomeActivity está implementada. | Listado de productos de ejemplo: "Notebook Lenovo" ($350000, stock 5), "Bicicleta Rodado 29" ($180000, stock 2), "Silla Gamer" ($95000, stock 8). | 1. Iniciar sesión con credenciales válidas. 2. Esperar a que la app navegue a la pantalla de catálogo (HomeActivity). 3. Observar el listado de productos mostrado en pantalla. | La pantalla de catálogo muestra el listado de productos con nombre, precio, stock y vendedor, sin errores ni cierres inesperados. | PENDIENTE | Crítica | Funcional - UI | Por completar | Yohana Grosso | PENDIENTE | PENDIENTE | PENDIENTE | El catálogo muestra el listado de productos disponibles sin errores ni cierres | Funcional | UI instrumentada | si | |||||||
24 | CP-05B | Imagen genérica en cada producto | HU-03 | Verificar que cada producto del catálogo muestre la imagen genérica (ic_product_placeholder). | La aplicación está instalada y abierta. El usuario inició sesión y está en la pantalla de catálogo (HomeActivity). | Productos de ejemplo: Notebook Lenovo ($350000), Bicicleta Rodado 29 ($180000), Silla Gamer ($95000). | 1. Abrir el catálogo. 2. Observar cada ítem del listado. | Cada producto muestra la imagen genérica, con el mismo tamaño y sin imágenes rotas. | NOT RUN | Media | Funcional - UI | Por completar | Yohana Grosso | PENDIENTE | PENDIENTE | PENDIENTE | Cada ítem del catálogo muestra una imagen. | Funcional | UI instrumentada | si | |||||||
25 | CP-05C | Catálogo sin productos | HU-03 | Verificar que la pantalla no falle cuando no hay productos para mostrar. | La aplicación está abierta en el catálogo con la lista de productos vacía (por ejemplo, quitando temporalmente los datos de ejemplo). | Lista de productos vacía. | 1. Abrir el catálogo con la lista vacía. 2. Observar la pantalla. | La pantalla se muestra vacía o con un aviso, sin errores ni cierres inesperados. | NOT RUN | Alta | Negativa - UI | Por completar | Yohana Grosso | PENDIENTE | PENDIENTE | PENDIENTE | La app no se cierra ante una lista vacía. | Negativa | UI instrumentada | si | |||||||
26 | CP-05D | Búsqueda por nombre de producto | HU-11 | Verificar que la barra de búsqueda filtre los productos por nombre. | La aplicación está instalada y abierta. El usuario inició sesión y está en la pantalla de catálogo (HomeActivity). | Texto de búsqueda: notebook | 1. Tocar la barra de búsqueda. 2. Escribir notebook. 3. Observar el listado. | Solo se muestra Notebook Lenovo; los demás productos desaparecen del listado. | NOT RUN | Alta | Funcional - Búsqueda | Yohana Grosso | PENDIENTE | PENDIENTE | PENDIENTE | La búsqueda filtra el catálogo por nombre. | Funcional | UI instrumentada | si | ||||||||
27 | CP-05E | Búsqueda sin distinguir mayúsculas y minúsculas | HU-11 | Verificar que la búsqueda dé el mismo resultado con mayúsculas o minúsculas. | La aplicación está instalada y abierta. El usuario inició sesión y está en la pantalla de catálogo (HomeActivity). | Texto de búsqueda: NOTEBOOK | 1. Escribir NOTEBOOK en la barra de búsqueda. 2. Observar el listado. | Se muestra Notebook Lenovo, igual que al buscar notebook. | NOT RUN | Media | Funcional - Búsqueda | Yohana Grosso | PENDIENTE | PENDIENTE | PENDIENTE | La búsqueda no distingue mayúsculas de minúsculas. | Funcional | UI instrumentada | si | ||||||||
28 | CP-05F | Búsqueda sin coincidencias | HU-11 | Verificar que, si ningún producto coincide con el texto, la app no falle. | La aplicación está instalada y abierta. El usuario inició sesión y está en la pantalla de catálogo (HomeActivity). | Texto de búsqueda: zzzz | 1. Escribir zzzz en la barra de búsqueda. 2. Observar la pantalla. | El listado queda vacío, sin errores ni cierres inesperados. | NOT RUN | Alta | Funcional - Búsqueda | Yohana Grosso | PENDIENTE | PENDIENTE | PENDIENTE | La app no se cierra cuando no hay resultados. | Negativa | UI instrumentada | si | ||||||||
29 | CP-05G | Borrar la búsqueda restaura el listado | HU-11 | Verificar que al borrar el texto de búsqueda se muestre otra vez el catálogo completo. | La aplicación está instalada y abierta. El usuario inició sesión y está en la pantalla de catálogo (HomeActivity). | Texto de búsqueda: notebook, luego borrado. | 1. Escribir notebook. 2. Borrar el texto de la barra de búsqueda. 3. Observar el listado. | Se muestran de nuevo todos los productos. | NOT RUN | Media | Funcional - Búsqueda | Yohana Grosso | PENDIENTE | PENDIENTE | PENDIENTE | Sin texto de búsqueda, el catálogo muestra todos los productos. | Funcional | UI instrumentada | si | ||||||||
30 | CP-06A | Selección de un producto | HU-10 | Verificar que al seleccionar un producto del catálogo, la aplicación navegue correctamente hacia la pantalla de detalle. | El usuario se encuentra en la pantalla de catálogo (HomeActivity). Existe al menos un producto listado. La pantalla DetailActivity está implementada. | Producto de ejemplo: id_producto = 1, nombre = "Notebook Lenovo". | 1. Ingresar a la pantalla de catálogo. 2. Tocar sobre un producto del listado. 3. Observar la pantalla que se abre. | La aplicación abre la pantalla de detalle del producto seleccionado (DetailActivity), enviando correctamente el id_producto, sin errores ni cierres inesperados. | PENDIENTE | Crítica | Funcional - Navegación, RF04 | Por completar | Yohana Grosso | PENDIENTE | PENDIENTE | PENDIENTE | Al tocar un producto se abre DetailActivity con el id_producto correcto | Funcional | UI instrumentada | si | |||||||
31 | CP-06B | Selección de un producto que no es el primero | HU-10 | Verificar que al tocar el segundo o tercer producto se abra el que corresponde y no siempre el primero. | La aplicación está instalada y abierta. El usuario inició sesión y está en la pantalla de catálogo (HomeActivity). | Productos de ejemplo: Notebook Lenovo ($350000), Bicicleta Rodado 29 ($180000), Silla Gamer ($95000). | 1. Tocar Silla Gamer (tercer producto). 2. Observar el detalle. 3. Volver y tocar Bicicleta Rodado 29. 4. Observar el detalle. | Cada toque abre el detalle del producto tocado: Silla Gamer y luego Bicicleta Rodado 29. | NOT RUN | Alta | Funcional - Navegación | Por completar | Yohana Grosso | PENDIENTE | PENDIENTE | PENDIENTE | El detalle abierto corresponde al producto tocado. | Funcional | UI instrumentada | si | |||||||
32 | CP-06C | Selección de un producto después de filtrar | HU-10 | Verificar que, con la búsqueda aplicada, el producto tocado abra su propio detalle y no el de otra posición de la lista original. | La aplicación está instalada y abierta. El usuario inició sesión y está en la pantalla de catálogo (HomeActivity). | Texto de búsqueda: silla. Producto esperado: Silla Gamer. | 1. Escribir silla en la barra de búsqueda. 2. Tocar el único resultado. 3. Observar el detalle. | Se abre el detalle de Silla Gamer, no el de Notebook Lenovo. | NOT RUN | Crítica | Funcional - Navegación, Búsqueda | Por completar | Yohana Grosso | PENDIENTE | PENDIENTE | PENDIENTE | Con la lista filtrada, el detalle corresponde al producto tocado. | Funcional | UI instrumentada | si | |||||||
33 | CP-07 | Acceso al detalle del producto | HU-04 | Verificar que el usuario pueda acceder a la pantalla de detalle seleccionando un ítem del catálogo. | El usuario debe encontrarse en el catálogo de productos y existir al menos un producto. | Producto disponible en el catálogo con stock activo. | 1. Ingresar al catálogo. 2. Seleccionar un producto. 3. Acceder al detalle. | Se muestra la información detallada del producto seleccionado incluyendo nombre, precio, descripción, stock e imagen. | NOT RUN | Media | Funcional, UI, R4 | PENDIENTE | Griselda Aguirre | PENDIENTE | PENDIENTE | PENDIENTE | PENDIENTE | Verificar que el usuario pueda acceder al detalle de un producto seleccionado desde el catálogo. | Funcional / UI | UI instrumentada | si | ||||||
34 | CP-07B | Intento de acceso a un producto no disponible o eliminado | HU-04 | Verificar el manejo de errores cuando se intenta acceder a un producto que fue dado de baja concurrentemente en el backend. | El usuario se encuentra en el catálogo. El producto seleccionado fue dado de baja en el backend. | ID de producto inexistente o inactivo. | 1. Seleccionar un producto de la lista cuyo registro fue eliminado previamente en el servidor. 2. Intentar acceder a su pantalla de detalle. | La aplicación no debe generar un error de tipo NullPointerException ni crashear. Debe mostrar un mensaje claro al usuario (ej. "El producto seleccionado ya no está disponible") y retornar o refrescar el catálogo. | NOT RUN | Media | Funcional, Negativo, | Griselda Aguirre | PENDIENTE | PENDIENTE | PENDIENTE | PENDIENTE | El sistema debe manejar de forma controlada el intento de acceso a un producto inactivo. | Funcional / Negativo | UI instrumentada | si | |||||||
35 | CP-07C | Pérdida de conexión al backend durante la carga del detalle | HU-04 | Verificar el comportamiento de la interfaz ante un fallo de red al solicitar el detalle del producto vía API REST. | El usuario se encuentra en el catálogo con la conexión a red deshabilitada o interrumpida. | Red desconectada / Modo avión activo. | 1. Seleccionar un producto del catálogo sin conexión de red. 2. Esperar la respuesta de la petición GET. | Se muestra un estado de error amigable (Empty State / Snackbar) indicando el fallo de red, permitiendo reintentar la acción sin congelar la UI. | NOT RUN | Alta | Funcional, Negativo, | Griselda Aguirre | PENDIENTE | PENDIENTE | PENDIENTE | PENDIENTE | La aplicación debe informar al usuario si ocurre un fallo de red al realizar la petición de datos | Funcional / Negativo | Red / UI | si | |||||||
36 | CP-08 | Retorno desde el detalle del producto | HU-08 | Verificar que el usuario pueda regresar desde la pantalla de detalle a la pantalla anterior. | El usuario debe enontrarse en la pantalla de algún producto. | Producto seleccionado | 1. Ingresar al detalle de un producto. 2. Utilizar la opción de volver. | La aplicación debe regresar correctamente a la Activity padre correspondiente, manteniendo la navegación definida. | NOT RUN | Media | Funcional, UI, R8 | Griselda Aguirre | PENDIENTE | PENDIENTE | PENDIENTE | PENDIENTE | Verificar que el usuario pueda regresar desde la pantalla de detalle a la pantalla anterior. | Funcional / UI | UI / Navegación (Android) | si | |||||||
37 | CP-08B | Retorno con pérdida de contexto en la Activity padre (Process Death) | HU-08 | Validar la gestión de la navegación hacia atrás cuando el sistema operativo liberó los recursos de la Activity padre por baja memoria. | El usuario está en la pantalla de detalle y el sistema operativo mató el proceso de la app en segundo plano. | Estado de actividad destruido por el sistema (Process Death). | Presionar el botón de retroceso (Back) tras la aniquilación del proceso por parte del SO. | La aplicación no crashea ni genera excepciones, recargando de forma limpia el flujo o restaurando el estado con seguridad. | NOT RUN | Alta | Funcional / Negativo | Griselda Aguirre | PENDIENTE | PENDIENTE | PENDIENTE | PENDIENTE | La aplicación debe gestionar correctamente la navegación hacia atrás incluso ante pérdida de contexto. | Funcional / UI | si | ||||||||
38 | CP-09A | Acceso al perfil | HU-05 | Verificar que el usuario autenticado pueda acceder correctamente a la pantalla de perfil (ProfileActivity) y visualizar sus datos almacenados en la sesión. | El usuario debe estar autenticado en la aplicación. Debe existir una sesión activa almacenada en SharedPreferences. | Credenciales / Datos en SharedPreferences: Nombre: "Andrés Raffaelli", Email: "araffaeli@ejemplo.com" | 1. Iniciar sesión exitosamente en la aplicación. 2. Navegar hacia la sección / opción "Perfil" desde el menú o pantalla principal. 3. Observar la pantalla "ProfileActivity" y la información desplegada en los campos. | La aplicación abre la pantalla ProfileActivity sin errores ni cierres inesperados. Se muestra correctamente la información del usuario (nombre, correo electrónico) obtenida desde SharedPreferences. | NOT RUN | Crítica | Soledad Scarlata | PENDIENTE | PENDIENTE | ||||||||||||||
39 | CP-09B | El perfil muestra los datos del usuario autenticado | HU-05 | Verificar que el perfil muestra los datos del usuario que inició sesión y no los de otro. | Existen dos usuarios registrados. Se inicia sesión con uno de ellos. | Usuario 1: Andrés Raffaelli / araffaeli@ejemplo.com. Usuario 2: otro usuario registrado. | 1. Iniciar sesión con el usuario 1 y abrir el Perfil; anotar nombre y email. 2. Cerrar sesión. 3. Iniciar sesión con el usuario 2 y abrir el Perfil. | Cada perfil muestra únicamente el nombre y email del usuario autenticado en ese momento. | NOT RUN | Alta | Funcional - Seguridad, Datos personales | PENDIENTE | | PENDIENTE | PENDIENTE | El perfil refleja la sesión activa. | Funcional | UI instrumentada | si | ||||||||
40 | CP-09C | Acceso al perfil sin sesión activa | HU-05 | Verificar que sin sesión iniciada no se muestran datos personales en el perfil. | No hay sesión: SharedPreferences sin datos de usuario (app recién instalada o sesión cerrada). | Sin credenciales. | 1. Asegurar que no hay sesión activa. 2. Intentar abrir ProfileActivity (por la navegación disponible). 3. Observar el resultado. | La app no muestra datos de ningún usuario, no se cierra inesperadamente y redirige a Login o informa que se requiere iniciar sesión. | NOT RUN | Alta | Negativa - Seguridad, Control de acceso | PENDIENTE | | PENDIENTE | PENDIENTE | No se exponen datos personales sin autenticación. | Negativa | UI instrumentada | si | ||||||||
41 | CP-10A | Cierre de sesión | HU-06 | Verificar que el usuario pueda cerrar la sesión activa de forma segura, limpiando los datos persistidos en la app y siendo redirigido a la pantalla de Login. | El usuario se encuentra autenticado y dentro de la pantalla de Perfil (ProfileActivity). Existen datos de sesión activos en SharedPreferences. | Sesión activa del usuario. Acción de clic sobre el botón "Cerrar Sesión" / "Logout". | 1. Acceder a la pantalla de Perfil (ProfileActivity). 2. Presionar el botón "Cerrar Sesión". 3. Observar la navegación realizada por la app y verificar el estado de la sesión | La aplicación elimina/limpia los datos guardados en SharedPreferences, destruye el stack de actividades previo y redirige al usuario a la pantalla de inicio de sesión (LoginActivity). Al presionar el botón "Atrás", no se debe poder reingresar a la pantalla de Perfil sin autenticarse nuevamente. | NOT RUN | Crítica | Diseñado por | PENDIENTE | PENDIENTE | ||||||||||||||
42 | CP-10B | Botón Atrás tras cerrar sesión no vuelve al perfil | HU-06 | Verificar que luego de cerrar sesión no se puede regresar a pantallas protegidas con el botón Atrás. | Usuario autenticado en ProfileActivity. | Sesión activa. | 1. Presionar "Cerrar Sesión" y llegar a Login. 2. Presionar el botón Atrás del dispositivo. | La app no regresa al perfil ni a pantallas con datos del usuario (se cierra la app o permanece en Login). | NOT RUN | Crítica | Funcional - Seguridad, Sesión | | PENDIENTE | PENDIENTE | PENDIENTE | El stack de pantallas se limpia al cerrar sesión. | Funcional | UI instrumentada | Sí | ||||||||
43 | CP-10C | Cierre de sesión elimina los datos guardados | HU-06 | Verificar que al cerrar sesión se borran el token y los datos del usuario de SharedPreferences. | Usuario autenticado con sesión guardada. | Sesión activa. | 1. Confirmar que existe la sesión guardada. 2. Presionar "Cerrar Sesión". 3. Verificar que los datos de sesión ya no existen. | SharedPreferences no conserva token ni datos del usuario. | NOT RUN | Crítica | Funcional - Seguridad, Sesión | | PENDIENTE | PENDIENTE | PENDIENTE | Cerrar sesión limpia la información persistida. | Funcional | Unitaria local (JVM) | Sí | ||||||||
44 | CP-10D | Nuevo inicio de sesión sin datos residuales | HU-06 | Verificar que tras cerrar sesión e ingresar con otra cuenta no quedan datos de la cuenta anterior. | Dos usuarios registrados. Se cerró la sesión del primero. | Usuario 1 y Usuario 2 distintos. | 1. Cerrar sesión del usuario 1. 2. Iniciar sesión con el usuario 2. 3. Abrir el Perfil. | Se muestran solo los datos del usuario 2, sin rastros del usuario 1. | NOT RUN | Alta | Funcional - Seguridad, Sesión | | PENDIENTE | PENDIENTE | PENDIENTE | Las sesiones consecutivas no se mezclan. | Funcional | UI instrumentada | Sí | ||||||||
45 | CP-11 | Navegación desde la pantalla inicial | HU-07 | Verificar que al iniciar la aplicación desde la pantalla inicial, la navegación funciona correctamente hacia las secciones disponibles. | La aplicación está instalada y abierta en la pantalla inicial. El usuario no está autenticado previamente | No requiere credenciales, solo interacción con la pantalla inicial. | 1. Abrir la aplicación y permanecer en la pantalla inicial. 2. Seleccionar las opciones de navegación disponibles. 3. Observar la pantalla a la que redirige cada opción. | La aplicación permite navegar desde la pantalla inicial hacia las secciones correspondientes sin errores ni cierres inesperados. | PENDIENTE | Media | Funcional - Navegación | Por completar | Diseñado por | PENDIENTE | PENDIENTE | PENDIENTE | |||||||||||
46 | CP-11B | Cada opción de navegación abre su pantalla | HU-07 | Verificar una por una que cada opción de la pantalla inicial lleva a su destino correcto. | La app está abierta en la pantalla inicial. | Opciones de navegación disponibles en la pantalla inicial. | 1. Seleccionar la primera opción y observar el destino. 2. Volver a la pantalla inicial. 3. Repetir con cada opción restante. | Cada opción abre la pantalla que le corresponde, sin errores ni cierres inesperados. | NOT RUN | Media | Funcional - Navegación | | PENDIENTE | PENDIENTE | PENDIENTE | Todas las opciones de navegación llevan a su destino. | Funcional | UI instrumentada | Sí | ||||||||
47 | CP-11C | Retorno a la pantalla inicial desde una sección | HU-07 | Verificar que desde una sección se puede volver a la pantalla inicial. | El usuario navegó desde la pantalla inicial a una sección. | No requiere credenciales. | 1. Desde la pantalla inicial, abrir una sección. 2. Presionar el botón Atrás. | La app regresa a la pantalla inicial sin errores. | NOT RUN | Media | Funcional - Navegación | | PENDIENTE | PENDIENTE | PENDIENTE | El retorno mantiene la navegación definida. | Funcional | UI instrumentada | Sí | ||||||||
48 | CP-12 | Acceso a la pantalla de Contacto | HU-08 | Verificar que al seleccionar la opción de “Contacto” desde la pantalla inicial, la aplicación abre correctamente la pantalla de contacto. | La aplicación está abierta en la pantalla inicial. La pantalla de contacto ya está implementada. | No requiere credenciales, solo interacción con la opción “Contacto”. | 1. Abrir la aplicación y permanecer en la pantalla inicial. 2. Seleccionar la opción “Contacto”. 3. Observar la pantalla que se muestra inmediatamente después. | La aplicación abre la pantalla de contacto sin errores ni cierres inesperados, mostrando los campos y la información esperada. | NOT RUN | Alta | Funcional - Navegación | Por completar | Diseñado por | PENDIENTE | PENDIENTE | PENDIENTE | |||||||||||
49 | CP-12B | Contenido de la pantalla de Contacto | HU-08 | Verificar que la pantalla de Contacto muestra los campos e información esperados. | La app está en la pantalla inicial y la pantalla de contacto está implementada. | No requiere credenciales. | 1. Abrir "Contacto" desde la pantalla inicial. 2. Revisar los campos y la información mostrados. | Se visualizan todos los campos y datos de contacto definidos, sin textos cortados ni elementos superpuestos. | NOT RUN | Media | Funcional - UI | | PENDIENTE | PENDIENTE | PENDIENTE | La pantalla de Contacto presenta la información prevista. | Funcional | UI instrumentada | Sí | ||||||||
50 | CP-12C | Retorno desde Contacto | HU-08 | Verificar que desde Contacto se puede volver a la pantalla anterior. | El usuario está en la pantalla de Contacto. | No requiere credenciales. | 1. Abrir "Contacto". 2. Presionar el botón Atrás (o la flecha de retorno). | La app regresa a la pantalla inicial sin errores ni cierres inesperados. | NOT RUN | Media | Funcional - Navegación | | PENDIENTE | PENDIENTE | PENDIENTE | El retorno desde Contacto funciona. | Funcional | UI instrumentada | Sí | ||||||||
51 | CP-13 | Consumo de API con MockWebServer (200 y 500) | Verificar parseo de JSON en respuesta 200 y manejo de error 500 sin romper la app. | Servidor MockWebServer configurado localmente sin red real. | JSON simulado 200 OK y error HTTP 500 Internal Server Error. | 1. Enqueue respuesta 200 en MockWebServer y ejecutar llamada. 2. Enqueue respuesta 500 y ejecutar llamada. | En 200 se mapean los objetos Java; en 500 se captura el error sin crashear. | PASS | Crítica | CP-13_reporte_tests.html.pdf LoginRepositoryNetTest.jpg | Yohana Grosso | Yohana Grosso | 12/10/2026 | 2/2 tests pasaron: 200 convierte el JSON en LoginResponse y 500 devuelve error sin romper la app | Integración | Integración de red | Sí | AUT-NET-01 · AUT-NET-02 | |||||||||
52 | CP-13B | Respuesta 200 con JSON malformado o vacío | Verificar que un cuerpo inválido en una respuesta 200 no rompe la app. | MockWebServer configurado localmente sin red real. | Respuesta 200 con cuerpo vacío y con JSON incompleto. | 1. Encolar la respuesta 200 con cuerpo vacío y ejecutar la llamada. 2. Encolar la respuesta 200 con JSON incompleto y ejecutar la llamada. | La app captura el error de parseo, devuelve un error controlado y no se cierra. | NOT RUN | Alta | Negativa - Integración de red | Yohana Grosso | PENDIENTE | PENDIENTE | PENDIENTE | El error de parseo se maneja sin crashear. | Negativa | Integración de red | Sí | |||||||||
53 | CP-13C | Falla de red o servidor sin respuesta | Verificar el comportamiento ante corte de conexión o timeout. | MockWebServer configurado localmente. | Servidor que corta la conexión o demora más que el timeout. | 1. Configurar la desconexión o el retraso en MockWebServer. 2. Ejecutar la llamada. | La app devuelve un error de conexión controlado, sin bloquearse ni cerrarse. | NOT RUN | Alta | Negativa - Resiliencia | Yohana Grosso | PENDIENTE | PENDIENTE | PENDIENTE | Los fallos de red se manejan sin romper la app. | Negativa | Integración de red | Sí | |||||||||
54 | CP-14 | Inicio de sesión con credenciales inválidas | HU-02 | Verificar que el sistema rechase el login cuando el email o la contraseña son incorrectas | Existe al menos un usuario registrado con credencialesválidas en la base de datos. El servidor Django esta activo y accesible . La app muestra LoginActivity. | Email: juan.test@ejemplo.com Password incorrecta : clave-equivocad999 | 1. Abrir la app. 2. Ingresar el email válido(juan.test@ejemplo.com. 3. Ingresar una contraseña incorrecta. 4. Presionar "Ingresar". | La app muestra el mensaje "Email o contraseña incorrectos", no navega a ninguna otra pantalla, y no guarda ninguna sesión. | NOT RUN | Crítica | Funcional - Seguridad, Negativa | Por completar | Soledad Scarlata | PENDIENTE | PENDIENTE | PENDIENTE | PENDIENTE | Negativa | UI instrumentada | Sí | AUT-UI-03 | ||||||
55 | CP-15 | Control de acceso: un usuario no puede agregar ítems al carrito ni a la orden de otro usuario | Verificar que un usuario autenticado no pueda crear detalles de carrito o de orden sobre recursos que pertenecen a otro usuario. El backend debe rechazar la solicitud con 403 Forbidden. | Backend Django en ejecución local, en la rama develop. Usuarios A y B registrados. B tiene un carrito y una orden propios. A tiene un token de sesión válido. | Usuario A y usuario B (compradores). id_carrito e id_orden de B. Un producto existente y cantidad 1. | 1. Iniciar sesión como A y obtener su token. 2. Enviar POST /api/detalle-carrito/ con el token de A y el id_carrito de B. 3. Enviar POST /api/detalle-orden/ con el token de A y el id_orden de B. 4. Repetir el paso 2 sin token. 5. Control positivo: POST /api/detalle-carrito/ con el token de A y el id_carrito de A. | Paso 2 (carrito de B): el servidor responde 403 Forbidden y no se crea ningún ítem. Paso 3 (orden de B): se espera 403 Forbidden; si el servidor lo acepta (201), el caso queda en FAIL y se documenta como mejora pendiente (control de pertenencia en DetalleOrdenViewSet). Paso 4: rechaza por falta de autenticación (401). Paso 5: crea el ítem (201), lo que confirma que el bloqueo solo afecta a recursos ajenos. | NOT RUN | Crítica | Seguridad - Autorización, OWASP A01 | Yohana Grosso | PENDIENTE | PENDIENTE | PENDIENTE | Se ejecuta para confirmar el estado real. Si el paso 3 falla, ver 'Mejoras de seguridad pendientes' en la documentación de Ciberseguridad. | Un usuario no puede consultar, modificar ni eliminar información de otra persona. | Negativa | API/Integración | No | ||||||||
56 | CP-16 | Control de acceso por ID: un usuario no puede consultar la orden de otro usuario | Verificar que, al cambiar el ID de la orden en la URL, un usuario autenticado no pueda ver ni modificar una orden ajena. | Backend Django en ejecución local. Usuarios A y B registrados, cada uno con al menos una orden. A tiene un token de sesión válido. | Usuario A y usuario B (compradores). id de una orden de A y de una orden de B. | 1. Iniciar sesión como A y obtener su token. 2. Enviar GET /api/ordenes/{id de una orden de B}/ con el token de A. 3. Enviar GET /api/ordenes/{id de una orden de A}/ con el token de A (control positivo). | Paso 2: el servidor responde 403 Forbidden o 404 Not Found y no devuelve datos de la orden. Paso 3: responde 200 OK con los datos de la orden propia. | NOT RUN | Crítica | Seguridad - Autorización, OWASP A01 | Yohana Grosso | PENDIENTE | PENDIENTE | PENDIENTE | En develop las consultas de órdenes se filtran por usuario, por lo que se espera 404 para una orden ajena. Verificar al ejecutar. | Un usuario no puede consultar, modificar ni eliminar información de otra persona. | Negativa | API/Integración | No | ||||||||
57 | TC-ACC-01 | Accesibilidad de los campos del login | HU-02 | Verificar que los campos de la pantalla de login cumplen los chequeos automáticos de accesibilidad (etiquetas, áreas táctiles, contraste). | App instalada, LoginActivity visible, dispositivo Android 11 conectado, AccessibilityChecks habilitado. | No requiere credenciales. | 1. Conectar el dispositivo. 2. Ejecutar .\gradlew connectedDebugAndroidTest. 3. Revisar el resultado de LoginAccessibilityTest#camposDelLogin_cumplenChequeosDeAccesibilidad. | El test pasa y AccessibilityChecks no reporta errores en los campos del login. | PASS | Alta | Accesibilidad, UI, Login | Reporte HTML de connectedDebugAndroidTest (capturas) | Griselda Aguirre | Griselda Aguirre | 13/10/26 | El test pasó (passed). La pantalla de login cumple los chequeos de accesibilidad. | Ejecutado en celular con Android 11. No usa red ni Thread.sleep(). Issue #73. | Los elementos del login son accesibles. | Accesibilidad | UI instrumentada | Si | ACC-01A | |||||
58 | TC-ACC-02 | Accesibilidad del mensaje de error del login | HU-02 | Verificar que el mensaje de error del login (campos vacíos) cumple los chequeos de accesibilidad. | App instalada, LoginActivity visible, dispositivo Android 11 conectado, AccessibilityChecks habilitado. | Email y contraseña vacíos. | Ejecutar .\gradlew connectedDebugAndroidTest. 2. Revisar el resultado de LoginAccessibilityTest#mensajeDeError_cumpleChequeosDeAccesibilidad. | Con el mensaje de error visible, AccessibilityChecks no reporta problemas. | PASS | Alta | Accesibilidad, UI, Login, Negativa | Reporte HTML de connectedDebugAndroidTest (capturas) | Griselda Aguirre | Griselda Aguirre | 13/10/26 | El test pasó (passed) en 1,147 s. | Ejecutado en celular con Android 11. No usa red ni Thread.sleep(). Issue #73. | Los mensajes de error son accesibles. | Accesibilidad | UI instrumentada | Si | ACC-01B | |||||
59 | TC-ACC-03 | Contraste de texto en Catálogo y Registro | “Transversal (accesibilidad)” | Verificar que los textos de Catálogo (descripción y precios) y de Registro (etiquetas y textos secundarios) cumplen el contraste mínimo de WCAG. | App instalada en el dispositivo, Accessibility Scanner instalado y habilitado. | No requiere. | 1. Activar Accessibility Scanner. 2. Abrir Catálogo y capturar con el Scanner. 3. Abrir Registro y capturar con el Scanner. 4. Revisar las sugerencias de contraste. | El Scanner no reporta problemas de contraste en ninguna de las dos pantallas. | FAIL | Media | Accesibilidad, Manual, Scanner | https://github.com/Nexus-Proyecto/Nexus-Digital-App-Movil/issues/70 | Griselda Aguirre | Griselda Aguirre | 12/10/26 | El Scanner reporta contraste de texto insuficiente en Catálogo (descripción y precios) y en Registro (etiquetas y textos secundarios). | Falla. Bug reportado en Issue #70. | Los textos cumplen los ratios de contraste de WCAG. | Accesibilidad | UI / Manual asistido | No | ACC-02 | |||||
60 | TC-ACC-04 | Tamaño de áreas táctiles en Catálogo y Registro | “Transversal (accesibilidad)” | Verificar que los elementos interactivos de Catálogo y Registro tienen un área táctil de al menos 48x48 dp. | App instalada en el dispositivo, Accessibility Scanner instalado y habilitado. | No requiere. | 1. Activar Accessibility Scanner. 2. Capturar Catálogo. 3. Capturar Registro. 4. Revisar las sugerencias de tamaño de elementos táctiles. | Todos los elementos interactivos cumplen el tamaño mínimo y el Scanner no reporta sugerencias. | FAIL | Media | Accesibilidad, Manual, Scanner | https://github.com/Nexus-Proyecto/Nexus-Digital-App-Movil/issues/71 | Griselda Aguirre | Griselda Aguirre | 12/10/26 | El Scanner reporta elementos táctiles por debajo del tamaño mínimo recomendado en ambas pantallas. | Falla. Bug reportado en Issue #71. | Los elementos interactivos tienen al menos 48x48 dp. | Accesibilidad | UI / Manual asistido | No | ACC-02 | |||||
61 | TC-ACC-05 | Ajuste de texto en Catálogo y Login | “Transversal (accesibilidad)” | Verificar que Catálogo y Login se adaptan al cambio de escala de tipografía del sistema sin perder información ni funcionalidad. | App instalada en el dispositivo, Accessibility Scanner instalado y habilitado. | No requiere. | 1. Activar Accessibility Scanner. 2. Capturar Catálogo. 3. Capturar Login. 4. Revisar las sugerencias de ajuste de texto. | El texto se adapta correctamente y el Scanner no reporta problemas. | FAIL | Media | Accesibilidad, Manual, Scanner | https://github.com/Nexus-Proyecto/Nexus-Digital-App-Movil/issues/72 | Griselda Aguirre | Griselda Aguirre | 12/10/26 | El Scanner reporta problemas de ajuste de texto en Catálogo y Login. | Falla. Bug reportado en Issue #72. | La interfaz se adapta a diferentes escalas de texto sin perder información. | Accesibilidad | UI / Manual asistido | No | ACC-02 | |||||
62 | |||||||||||||||||||||||||||
63 | |||||||||||||||||||||||||||
64 | |||||||||||||||||||||||||||
65 | |||||||||||||||||||||||||||
66 | |||||||||||||||||||||||||||
67 | |||||||||||||||||||||||||||
68 | |||||||||||||||||||||||||||
69 | |||||||||||||||||||||||||||
70 | |||||||||||||||||||||||||||
71 | |||||||||||||||||||||||||||
72 | |||||||||||||||||||||||||||
73 | |||||||||||||||||||||||||||
74 | |||||||||||||||||||||||||||
75 | |||||||||||||||||||||||||||
76 | |||||||||||||||||||||||||||
77 | |||||||||||||||||||||||||||
78 | |||||||||||||||||||||||||||
79 | |||||||||||||||||||||||||||
80 | |||||||||||||||||||||||||||
81 | |||||||||||||||||||||||||||
82 | |||||||||||||||||||||||||||
83 | |||||||||||||||||||||||||||
84 | |||||||||||||||||||||||||||
85 | |||||||||||||||||||||||||||
86 | |||||||||||||||||||||||||||
87 | |||||||||||||||||||||||||||
88 | |||||||||||||||||||||||||||
89 | |||||||||||||||||||||||||||
90 | |||||||||||||||||||||||||||
91 | |||||||||||||||||||||||||||
92 | |||||||||||||||||||||||||||
93 | |||||||||||||||||||||||||||
94 | |||||||||||||||||||||||||||
95 | |||||||||||||||||||||||||||
96 | |||||||||||||||||||||||||||
97 | |||||||||||||||||||||||||||
98 | |||||||||||||||||||||||||||
99 | |||||||||||||||||||||||||||
100 | |||||||||||||||||||||||||||