Pruebas realizadas - rBaku/Proyecto-LogisticaGlobal.com GitHub Wiki

Pruebas de Entrega 1

La documentación de las pruebas realizadas hasta la entrega 1 se encuentran:

  • 35 pruebas de Backend, realizando pruebas de integración, pruebas de peticiones HTTP de GET, POST, PUT y DELETE de las distintas APIs que se tiene en el sistema (robots, incidentes y técnicos). Cada prueba tiene una descripción de la petición HTTP realizada, los datos de entrada, el resultado esperado y el resultado obtenido. Se comprueba tanto la respuesta HTTP, como los cambios realizados en la base de datos PostgreSQL.

  • 12 pruebas de Frontend, realizando pruebas unitarias manuales con los botones, formularios y registros que están disponibles en el sistema. La documentación de la pruebas detalla una descripción de la prueba realizada, los pasos realizados en la prueba, el resultado esperado y el resultado obtenido. Se revisa componente por componente (render, estado, eventos) directamente en el navegador.

Pruebas de Backend

Herramientas utilizadas

  • mocha
  • chai (assertions)
  • supertest (cliente HTTP)
  • pgAdmin (base de Datos).

Alcance y cobertura

  • Módulos cubiertos: /api/robots, /api/incidentes, /api/tecnicos.

  • Cobertura: 26 casos ❯ 100 % de las rutas CRUD; incluye escenarios felices y errores por duplicados, claves foráneas y validaciones de dominio.

Detalle de las pruebas

1- Suite de pruebas de robots

Caso de prueba Datos de entrada (método+ruta+body) Resultado esperado Resultado obtenido
GET / debería devolver lista de robots GET /api/robots 200 OK, array ⊇ RBT-TestGet1, RBT-TestGet2 200 OK, array contiene IDs sembrados
GET /:id debería devolver un robot existente GET /api/robots/RBT-TestGet1 200 OK, objeto con id, name, is_operational 200 OK, objeto correcto
POST / debería crear un nuevo robot correctamente POST /api/robots { id:'RBT-TestCreate', name:'Robot Gamma', is_operational:true } 201 Created + body ⊇ payload 201 Created + body coincide
POST / debería fallar si se intenta insertar un robot con un ID duplicado POST mismo id que ya existe 4 xx (409/400) + error 409 Conflicto + error
POST / debería fallar si falta el campo id POST { name:'Faltante de ID', is_operational:true } 400 Bad Request 400 Bad Request
POST / debería fallar si falta el campo name POST { id:'RBT-SinName', is_operational:true } 400 Bad Request 400 Bad Request
PUT /:id debería actualizar un robot existente PUT /api/robots/RBT-TestGet1 { name:'Robot Beta', is_operational:false } 200 OK + cambios reflejados 200 OK + cambios aplicados
PUT /:id debería devolver 404 si el robot no existe PUT /api/robots/NO-EXISTE … 404 Página No encontrada 404 Página No encontrada
DELETE /:id debería eliminar un robot existente DELETE /api/robots/RBT-TestDelete 204 No Content 204 No Content + GET posterior no lo encuentra
DELETE /:id debería devolver 404 si el robot no existe DELETE /api/robots/NO-EXISTE 404 Página No encontrada 404 Página No encontrada

2- Suite de pruebas de los incidentes

Caso de prueba Datos de entrada (método+ruta+body) Resultado esperado Resultado obtenido
GET / debería devolver una lista de incidentes GET /api/incidentes 200 OK, array ⊇ INC-Test-001 200 OK, array incluye registro
GET /:id debería devolver el incidente por UUID GET /api/incidentes/{uuid_existente} 200 OK, objeto con campos clave 200 OK
GET /:id debería devolver 404 si no existe GET /api/incidentes/{uuid_fake} 404 Página No encontrada 404 Página No encontrada
POST / debería crear un nuevo incidente correctamente POST /api/incidentes { robot_id:'RBT-X', assigned_technician_id:'TECH-X', gravity:5, … } 201 Created, devuelve company_report_id 201 Created + id devuelto
POST / debería rechazar si faltan campos obligatorios POST (payload incompleto) 400 Bad Request 400 Bad Request
POST / gravedad inválida < 1 gravity:-2 400 Bad Request 400 Bad Request
POST / gravedad inválida > 10 gravity:11 400 Bad Request 400 Bad Request
POST / gravedad inválida (no numérico) gravity:'alto' 400 Bad Request 400 Bad Request
PUT /:id debería actualizar un incidente existente PUT /api/incidentes/{uuid} { status:'Resuelto', gravity:3 } 200 OK + cambios 200 OK
PUT /:id debería devolver 404 si no existe PUT /api/incidentes/{uuid_fake} … 404 Página No encontrada 404 Página No encontrada
DELETE /:id debería eliminar el incidente si existe DELETE /api/incidentes/{uuid} 200/204, GET posterior → 404 204 Sin contenido + verificación ok
DELETE /:id debería devolver 404 si no existe DELETE /api/incidentes/{uuid_fake} 404 Página No encontrada 404 Página No encontrada

3- Suite de pruebas de los técnicos

Caso de prueba Datos de entrada (método+ruta+body) Resultado esperado Resultado obtenido
GET / debería devolver lista de técnicos GET /api/tecnicos 200 OK, array ⊇ TECH-TestGet1 200 OK
GET /:id debería devolver el técnico solicitado GET /api/tecnicos/TECH-TestGet1 200 OK, objeto con id, full_name 200 OK
GET /:id debería devolver 404 si no existe GET /api/tecnicos/NO-EXISTE 404 Página No encontrada 404 Página No encontrada
POST / debería crear un nuevo técnico POST { id:'TECH-Create', full_name:'Técnico Nuevo' } 201 Created + body 201 Created
POST / debería retornar 400 si faltan campos POST { id:'TECH-Bad' } 400 Bad Request 400 Bad Request
POST / debería retornar 409 si el id ya existe POST id duplicado (TECH-TestGet1) 409 Conflicto + error 409 Conflicto + error
PUT /:id debería actualizar el nombre PUT /api/tecnicos/TECH-TestGet1 { full_name:'Técnico Beta' } 200 OK + cambio 200 OK
PUT /:id debería devolver 400 si falta full_name PUT {} 400 Bad Request 400 Bad Request
PUT /:id debería devolver 404 si no existe PUT /api/tecnicos/NO-EXISTE … 404 Página No encontrada 404 Página No encontrada
PUT /:id debería devolver 409 si el nombre ya existe PUT → full_name:'Nombre Duplicado' existente 409 Conflicto 409 Conflicto
DELETE /:id debería eliminar un técnico existente DELETE /api/tecnicos/TECH-TestDelete 200 OK (o 204) 200 OK, GET posterior → 404
DELETE /:id debería devolver 404 si no existe DELETE /api/tecnicos/NO-EXISTE 404 Página No encontrada 404 Página No encontrada
DELETE /:id debería devolver 409 si tiene incidentes asociados DELETE /api/tecnicos/TECH-TestInUse (referenciado en Incidents) 409 Conflicto 409 Conflicto
Pruebas de Frontend

Herramientas utilizadas

  • Herramientas de desarrollo del navegador.
  • Checklist de casos de uso.

Alcance y cobertura

  • Enfoque Pruebas: Enfoque inicial en formularios y tablas clave;

Detalle de las pruebas

Caso de prueba Entrada / Acción (pasos) Resultado esperado Resultado obtenido
Registro de Incidente – datos válidos 1.Desde Landing pulsa “Registrar Incidente”. 2.Completa todos los campos del formulario:  • Robot ID: RBT-UI-01  • Gravedad: 5  • Ubicación: “Bodega 2” … 3.Pulsa Guardar. -Snackbar verde “Incidente creado con éxito”. -Redirección a “/incidentes”. -El nuevo incidente aparece en la tabla con mismo company_report_id. OK
Registro de Incidente – campo obligatorio vacío Repite Caso 1, pero deja location en blanco. Se bloquea el envío. -Aparece helper-text en rojo “Ubicación requerida”. -Botón Guardar sigue deshabilitado. OK
Lista de Incidentes – filtrado por texto En “/incidentes” escribe RBT-UI-01 en el cuadro de búsqueda global. La tabla muestra solo las filas cuyo robot_id contiene RBT-UI-01. OK
Edición de Incidente (Supervisor) 1.En la fila del incidente creado abre menú … → Editar. 2.Cambia status a En progreso, gravity a 4. 3.Pulsa Guardar. -Modal se cierra. -Snackbar verde “Actualizado”. -La fila refleja En progreso y gravedad 4. OK
Eliminación de Incidente En la misma fila menú … → Eliminar → confirmar. -Snackbar Naranja “Incidente Eliminado”. -La fila desaparece de la tabla. OK
Registro de Robot – datos válidos 1.Navega a “Estado de Robots”. 2.Pulsa Registrar robot. 3.Completa id: RBT-NEW, name: Robot Nuevo, ¿Esta operativo?: ✓. 4.Guardar. -Snackbar “Robot creado”. -Tabla de robots incluye RBT-NEW con icono verde. OK
Registro de Robot – ID duplicado Repite Caso 6 con el mismo id: RBT-NEW. -Snackbar/error rojo “ID duplicado (409)”. -El Dialog permanece abierto para corregir. -Snackbar/error rojo “Conflict”. -El Dialog permanece abierto para corregir.
Vista Técnico – sólo sus incidentes 1.Simula login como Tecnico. 2.Abre “Mis Incidentes”. Tabla muestra exclusivamente incidentes no resueltos Tabla muestra todos los incidentes.
Actualización por Técnico En “Ver incidentes”: 1.Selecciona un incidente → Actualizar. 2.Cambia status a En revisión y escribe comentario. 3.Guardar. -Modal cierra. -Snackbar verde. -Fila refleja nuevo status; columna comentario actualizada. OK
Restricción de permisos Estando como Tecnico, intenta Eliminar un incidente desde menú …. Opción “Eliminar” no está visible o devuelve Snackbar rojo “Acceso denegado”. OK (Opcion no visible)
UI / Responsive (tablet) Reduce viewport a 768 px, visita “/robots-estado”. -Tabla pasa a scroll horizontal o columnas colapsan sin desbordes. -Botón FAB “Registrar robot” sigue visible. OK
Traza completa (flujo E2E manual) 1.Supervisor crea incidente (Caso 1). 2.Supervisor asigna técnico TECH-alph(Editar). 3.TECH-alpha cambia status a Resuelto (Caso 9). 4.Supervisor filtra por Resuelto y cierra incidente (Editar → Cerrado). -Cada transición muestra Snackbar éxito. -Historial/bitácora (si existe) registra los cambios de estado con timestamp y usuario. OK

Pruebas de Entrega 3

Hay nuevas pruebas unitarias, las cuales son las siguientes:

Pruebas nuevas y Pruebas modificadas

Pruebas de robots

Hay cambios en la suite, pero se eliminan los casos (POST) en que faltan name o ID y se compila en la prueba de que falte un campo obligatorio. Por otro lado, se separa el caso (PUT) en que se actualiza un robot existente a pruebas de actualizar name y estado; y un caso que falla si estado entregado no es valido

Caso de prueba Datos de entrada (método+ruta+body) Resultado esperado Resultado obtenido
POST debería fallar si faltan campos obligatorios POST /api/robots 400 Bad Request 400 Bad Request
PUT /:id debería actualizar un robot (name y state) PUT /api/incidentes/${incidenteId} 200 nombre nuevo es Bot Actualizado y estado nuevo es Mantenimiento 200 nombre="Bot actualizado" y estado=¨Mantenimiento¨
PUT /:id debería fallar si el estado no es string válido PUT /api/incidentes/${incidenteId} 400 Bad Request 400 Bad Request

Pruebas de incidentes

Nuevas pruebas relacionadas a incidentes

Caso de prueba Datos de entrada (método+ruta+body) Resultado esperado Resultado obtenido
PUT /:id debería asignar updated_by y updated_at al actualizar PUT /api/incidentes/${incidenteId} 200 status es En revisión, update_at es un string y updated_by es el usuario con ID=9992 200 status=´En revisión´, update_at es una fecha en formato string y updated_by=9992
PUT /:id con status "Firmado" debería asignar signed_by_user_id y signed_at PUT /api/incidentes/${incidenteId} 200 status es Firmado signed_at es un string y * signed_by_user_id* es el usuario con ID=9992 200 status=´Firmado´, signed_at es una fecha en formato string y signed_by_user_id=9992
PUT /:id con status "Resuelto" hecho por técnico debería asignar finished_by y finished_at PUT /api/incidentes/${incidenteId} 200 status es Resuelto, finished_at es un string y finished_by es el usuario con ID=10001 200 status=´Resuelto´, finished_at es una fecha en formato string y finished_by=10001

Pruebas de usuarios del Sistema

11 nuevas pruebas unitarias de la API de usuarios

Caso de prueba Datos de entrada (método+ruta+body) Resultado esperado Resultado obtenido
GET / debería devolver lista de usuarios GET /api/users 200 y una lista de usuarios 200 y la lista correctamente
GET /:id debería devolver un usuario existente GET /api/users/{usuario} 200 y la información del usuario con ID=9991 200 y toda la información del usuario
GET /username/:username debería devolver usuario por username GET /api/users/username/{nombre de usuario} 200 y la información del usuario con username=testuser1 200 e información parcial del usuario
GET /username/:username debería devolver 404 si no existe GET /api/users/username/{username inexistente en BD} 404 Página No encontrada 404 Página No encontrada
POST / debería crear un nuevo usuario correctamente POST /api/users (body con info de usuario) 201 Creado 201 Creado
POST / debería fallar si falta username POST /api/users (body con email y contraseña) 400 Bad Request 400 Bad Request
POST / debería fallar si el username o email ya existen POST /api/users (body con username ya usado) 409 Conflict 409 Conflict
PUT /:id debería actualizar un usuario PUT /api/users{ID} 200 200
PUT /:id debería devolver 404 si no existe PUT /api/users/{ID inexistente} 404 Página No encontrada 404 Página No encontrada
DELETE /:id debería eliminar un usuario DELETE /api/users/{ID} 204 Sin Contenido y se elimina el usuario en BD 204 Sin Contenido y se elimina correctamente
DELETE /:id debería devolver 404 si el usuario no existe DELETE /api/users/{ID inexistente} 404 Página No encontrada 404 Página No encontrada

Pruebas de login

5 nuevas pruebas unitarias de la API de login

Caso de prueba Datos de entrada (método+ruta+body) Resultado esperado Resultado obtenido
POST /login debería autenticar con credenciales válidas POST /login (body: usuario y clave) 200, el body contiene el token y la información del usuario 200 el body contiene toda la información
POST /login debería fallar con contraseña incorrecta POST /login (body: usuario y clave erronea) 401 No autorizado 401 No autorizado
POST /login debería fallar con usuario no existente POST /login (body: usuario erroneo y clave) 401 No autorizado 401 No autorizado
POST /login debería fallar si faltan campos POST /login (body: solo clave) 400 Bad Request 400 Bad Request
POST /logout debería limpiar la cookie POST /logout 200 200

La documentación de las pruebas realizadas en Selenium para la entrega 3 son las siguientes:

Pruebas Selenium

Se agregarán las pruebas próximamente, se pueden revisar en el codigo

⚠️ **GitHub.com Fallback** ⚠️