Pruebas de API: Creación de Categorías con Roles y Tokens

Clase 20 de 25Curso de End to End Testing para APIs REST con Node.js

Resumen

¿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!