Pruebas de API: Creación de Categorías con Roles y Tokens
Clase 20 de 25 • Curso de End to End Testing para APIs REST con Node.js
Contenido del curso
- 2

Exploración y Configuración de APIs con Insomnia y Postman
10:37 - 3

Pruebas en Node.js con Jest y Clean Architecture
10:06 - 4

Configuración y uso de Jest para pruebas end-to-end en JavaScript
08:04 - 5

Pruebas End-to-End con Supertest y Node.js
13:47 - 6

Buenas prácticas en pruebas con Jest y manejo de ciclos abiertos
08:30
- 7

Configuración de Entorno de Pruebas para Aplicaciones Node.js con Twen.js
11:25 - 8

Generación de Reporte de Cobertura con Pruebas End to End
07:32 - 9

Pruebas de Integridad de Datos con DTOs y Joy en APIs REST
20:16 - 10

Pruebas End-to-End con Base de Datos en API REST
17:21 - 11

Pruebas de Autenticación en Login con JavaScript
16:26 - 12

Pruebas de Rutas Protegidas con API Key en Node.js
07:03 - 13

Pruebas End-to-End con Access Token en API REST
14:16 - 14

Pruebas Efectivas de Creación de Usuarios en POS con Bases de Datos
09:03
- 15

Pruebas End-to-End: Gestión de Datos con Semillas Automatizadas
10:26 - 16

Configuración de Bases de Datos para Pruebas End-to-End con Docker
17:57 - 17

Creación de Sets de Datos Manuales para Pruebas End-to-End
15:49 - 18

Sets de Datos en SQLite: Creación y Gestión Efectiva
14:58 - 19

Uso de Unsook para Migraciones Programáticas en Pruebas
10:53 - 20

Pruebas de API: Creación de Categorías con Roles y Tokens
10:28 - 21

Pruebas End-to-End para API de Productos sin Autenticación
06:01 - 22

Pruebas de Paginación en Endpoints de Productos con Limit y Offset
04:38
¿Cómo crear una categoría con un token de acceso?
A lo largo de este contenido, exploraremos cómo implementar pruebas en un sistema donde la autenticación y los permisos son esenciales. Específicamente, hablaremos sobre cómo crear categorías solo cuando se presenta un token de acceso adecuado.
Primero y principal, es importante señalar que este procedimiento está protegido; es decir, no todos los usuarios están habilitados para realizar esta acción. Solo aquellos que poseen un token con el rol de administrador pueden crear categorías. Así que, para empezar, intentaremos crear una categoría sin enviar el token de acceso. Esto debería devolver un error 401, lo que indica que no tenemos autorización.
¿Cuál es el endpoint y cómo alistamos los datos de prueba?
El endpoint que vamos a utilizar es /v1/categories. Necesitaremos preparar nuestros datos de prueba de tal manera que el nombre, como "categoría nueva", y la imagen estén listos para ser enviados. También es útil utilizar librerías que generen datos ficticios, por ejemplo, FakeJS, para facilitar la creación de datos de prueba.
const data = {
name: "categoría nueva",
image: "url_de_imagen"
};
¿Cómo se gestiona el acceso con token?
Para proceder con la creación, es esencial acompañar nuestro solicitud POST con un access token. Este token debe ser de un usuario con rol de administrador. Podemos lograr esto al autenticar primero al usuario y guardar el token para usarlo en pruebas posteriores.
beforeAll(async () => {
const adminUser = await authenticateAdminUser();
accessToken = adminUser.accessToken;
});
// Envío de la solicitud con el token
const response = await request(app)
.post('/v1/categories')
.set('Authorization', `Bearer ${accessToken}`)
.send(data);
Al incorporar el access token, esperamos una respuesta con código de estado 201, indicando que la categoría fue creada exitosamente. Para verificar, podemos comparar el dato retornado con el de nuestra base de datos utilizando la llave primaria del nuevo registro.
¿Qué ocurre si un usuario sin permisos intenta crear una categoría?
En el contexto de pruebas, es fundamental asegurarnos de que un usuario sin el rol apropiado no pueda crear categorías. Por ello, creamos un usuario tipo "customer" (cliente) para validar este escenario. Al intentar realizar la misma acción con un access token de "customer", el resultado debe ser un error 401.
beforeAll(async () => {
const customerUser = await authenticateCustomerUser();
customerToken = customerUser.accessToken;
});
// Probar creación de categoría con token de "customer"
const response = await request(app)
.post('/v1/categories')
.set('Authorization', `Bearer ${customerToken}`)
.send(data);
// Debe devolver 401
expect(response.status).toBe(401);
Implementación de pruebas end-to-end
Es esencial correr pruebas continuas a fin de garantizar que tanto las configuraciones de permisos como las funcionalidades básicas del sistema estén en orden. Ejecutamos nuestras pruebas utilizando comandos como npm run end-to-end y observamos que todo se ejecute correctamente.
Con cada prueba, estamos asegurando no solo la robustez de nuestro sistema sino también que este se comporte como se espera bajo diferentes condiciones y roles de usuario. A medida que avanzas en el aprendizaje de la implementación de pruebas, recuerda que cada test suma a la confiabilidad y seguridad de tu aplicación.
Reflexión final
Experimentar con roles y accesos dentro del entorno de pruebas no solo permite identificar posibles vulnerabilidades, sino que también mejora la experiencia del usuario. A medida que perfecciones estas técnicas, estarás más preparado para enfrentar desafíos complejos en el desarrollo de sistemas seguros y eficientes. ¡Sigue adelante y no dejes de aprender!