Skip to content

Categoria

Juan Pablo Dealbera edited this page Sep 29, 2024 · 17 revisions

Modelo Categoria

El modelo Categoria representa una entidad de una categoría en el sistema. A continuación, se describen sus atributos y métodos.

Atributos

  • id (Integer):

    • Clave primaria de la categoría.
    • Se genera automáticamente con la estrategia GenerationType.IDENTITY.
  • nombre (String):

    • Nombre de la categoría.
    • Tiene una longitud mínima de 1 carácter y máxima de 100 caracteres.
    • No puede ser nulo.
  • fechaEliminacion (LocalDateTime):

    • Representa la fecha en la que la categoría fue eliminada (si es que lo fue).
    • Puede ser null si la categoría no está eliminada.

Endpoints

1. Crear una Categoría

  • Endpoint: POST /products/categoria
  • Descripción: Crea una nueva categoría en el sistema.
  • Cuerpo de la Solicitud:
    • nombre: string (obligatorio, máximo 100 caracteres)
{
  "nombre": "nombre categoria" //String
}
  • Respuestas:
  • 201 Created: Categoría creada exitosamente (Esto aplica tanto para cuando se crea una categoria, o cuando se quiere crear una categoria con el mismo nombre que una categoria eliminada, en ese caso lo que se hace es recuperar dicha categoria).
{
  "status": 201,
  "message": "Created.",
  "data": {
    "id": 1,
    "nombre": "Electrónica"
  },
  "errors": null
}
  • 400 Bad Request:
    • No se envió un nombre para la categoría.
{
  "status": 400,
  "message": "Error: Bad Request.",
  "data": null,
  "errors": "No se envió un nombre para la categoría."
}
    • El nombre contiene caracteres no permitidos.
{
  "status": 400,
  "message": "Error: Bad Request.",
  "data": null,
  "errors": "El nombre debe estar formado únicamente por letras y números."
}
    • Ya existe una categoría con este nombre.
{
  "status": 400,
  "message": "Error: Bad Request.",
  "data": null,
  "errors": "Ya existe una categoría con este nombre."
}
  • 400 Error inesperado: Error en el servicio.
{
  "status": 400,
  "message": "Error: Error inesperado.",
  "data": null,
  "errors": "Descripción del errors inesperado"
}
  • 400 Error de tipo de argumento: Cuando el dto enviado no tiene el formato correspondiente.
{
  "status": 400,
  "message": "Error de tipo de argumento",
  "data": null,
  "errors": "El parámetro 'id' debe ser un número entero válido."
}

2. Actualizar una Categoría

  • Endpoint: PUT /products/categoria
  • Descripción: Actualiza una categoría existente en el sistema.
  • Cuerpo de la Solicitud:
    • id: integer (obligatorio)
    • nombre: string (obligatorio, máximo 100 caracteres)
{
  "id": 1, //int
  "nombre": "nombre categoria" //String
}
  • Respuestas:
  • 201 Created: Categoría actualizada exitosamente.
{
  "status": 200,
  "message": "OK",
  "data": {
    "id": 1,
    "nombre": "Electrónica"
  },
  "errors": null
}
  • 404 Not Found: El ID no corresponde a ninguna categoría.
{
  "status": 404,
  "message": "Error: Not Found",
  "data": null,
  "errors": "No se encontró la categoría con el ID."
}
  • 400 Bad Request:
    • La categoría no se puede modificar porque está eliminada.
{
  "status": 400,
  "message": "Error: Bad Request.",
  "data": null,
  "errors": "No se puede modificar un objeto que está eliminado."
}
    • La categoría debe tener un nombre.
{
  "status": 400,
  "message": "Error: Bad Request.",
  "data": null,
  "errors": "La categoria debe de tener un nombre."
}
    • El nombre contiene caracteres no permitidos.
{
  "status": 400,
  "message": "Error: Bad Request.",
  "data": null,
  "errors": "El nombre debe estar formado únicamente por letras y números."
}
    • Ya existe una categoría con este nombre.
{
  "status": 400,
  "message": "Error: Bad Request.",
  "data": null,
  "errors": "Ya existe una categoría con este nombre."
}
  • 400 Error inesperado: Error en el servicio.
{
  "status": 400,
  "message": "Error: Error inesperado.",
  "data": null,
  "errors": "Descripción del errors inesperado"
}
  • 400 Error de tipo de argumento: Cuando el dto enviado no tiene el formato correspondiente.
{
  "status": 400,
  "message": "Error de tipo de argumento",
  "data": null,
  "errors": "El parámetro 'id' debe ser un número entero válido."
}

3. Eliminar una Categoría

  • Endpoint: DELETE /products/categoria/{id}
  • Descripción: Eliminar una categoria.
  • Parámetros de Ruta:
    • id: integer (obligatorio)
  • Respuestas:
  • 200 OK: Categoría eliminada exitosamente.
{
  "status": 200,
  "message": "OK.",
  "data": {
    "id": 1,
    "nombre": "Electrónica",
    "fechaEliminacion": "2024-09-28T12:34:56" 
  },
  "errors": null
}
  • 400 Bad Request:
    • La categoría ya está eliminada.
{
  "status": 400,
  "message": "Error: Bad Request.",
  "data": null,
  "errors": "La categoría ya se encuentra eliminada, se debe enviar el id de una categoría no eliminada."
}
    • 404 Not Found: El ID no corresponde a ninguna categoría.
{
  "status": 404,
  "message": "Error: Not Found.",
  "data": null,
  "errors": "El id no corresponde a ninguna categoría, se debe enviar el id de una categoría existente."
}
  • 500 Error inesperado: Error en el servicio.

{ "status": 400, "message": "Error: Error inesperado.", "data": null, "errors": "Descripción del errors inesperado" }

  • 400 Error de tipo de argumento: Cuando el id enviado no es un int.
{
  "status": 400,
  "message": "Error de tipo de argumento",
  "data": null,
  "errors": "El parámetro 'id' debe ser un número entero válido."
}

4. Recuperar una Categoría Eliminada

  • Endpoint: PUT /products/categoria/recuperar/{id}
  • Descripción: Recupera una categoría que ha sido eliminada.
  • Parámetros de Ruta:
    • id: integer (obligatorio)
  • Respuestas:
  • 200 OK: Categoría recuperada exitosamente.
{
  "status": 200,
  "message": "OK",
  "data": {
    "id": 1,
    "nombre": "Electrónica"
  },
  "errors": null
}
  • 400 Bad Request:
    • La categoría no está eliminada.
{
  "status": 400,
  "message": "Error: Bad Request.",
  "data": null,
  "errors": "La categoría no está eliminada."
}
    • 404 Not Found: El ID no corresponde a ninguna categoría.
{
  "status": 404,
  "message": "Error: Not Found",
  "data": null,
  "errors": "No se encontró la categoría con el ID."
}
  • 500 Error inesperado: Error en el servicio.

{ "status": 400, "message": "Error: Error inesperado.", "data": null, "errors": "Descripción del errors inesperado" }

  • 400 Error de tipo de argumento: Cuando el id enviado no es un int.
{
  "status": 400,
  "message": "Error de tipo de argumento",
  "data": null,
  "errors": "El parámetro 'id' debe ser un número entero válido."
}

5. Obtener Todas las Categorías

  • Endpoint: GET /products/categorias
  • Descripción: Obtiene una lista de todas las categorías.
  • Respuestas:
  • 200 OK: Lista de categorías devuelta exitosamente.
{
  "status": 200,
  "message": "OK",
  "data": [
    {
      "id": 1,
      "nombre": "Electrónica"
    },
    {
      "id": 2,
      "nombre": "Ropa"
    }
  ],
  "errors": null
}
  • 400 Bad Request:
    • No existen categorias.
{
  "status": 400,
  "message": "Bad request",
  "data": null,
  "errors": "No hay categorías creadas."
}

6. Obtener Categoría por ID

  • Endpoint: GET /products/categoria/{id}
  • Descripción: Obtiene una categoría específica por su ID.
  • Parámetros de Ruta: ** id: integer (obligatorio)
  • Respuestas:
  • 200 OK: Categoría devuelta exitosamente.
{
  "status": 200,
  "message": "OK",
  "data": {
    "id": 1,
    "nombre": "Electrónica"
  },
  "errors": null
}
  • 400 Bad Request:
    • No se encontró la categoría con el ID.
{
  "status": 404,
  "message": "Error: Not Found",
  "data": null,
  "errors": "No se encontró la categoría con el ID."
}
    • No se puede traer un objeto que está eliminado.
{
  "status": 400,
  "message": "Error: Bad Request.",
  "data": null,
  "errors": "No se puede traer un objeto que esté eliminado."
}
  • 400 Error inesperado: Error en el servicio.
{
  "status": 400,
  "message": "Error: Error inesperado.",
  "data": null,
  "errors": "Descripción del errors inesperado"
}
  • 400 Error de tipo de argumento: Cuando el id pasado no es un int.
{
  "status": 400,
  "message": "Error de tipo de argumento",
  "data": null,
  "errors": "El parámetro 'id' debe ser un número entero válido."
}

Testing

1. POST: Crear una categoría

Feature: Crear una categoría

Como administrador, quiero crear una categoría para que esté disponible en el sistema.

Background:

  • Given El servicio de categorías está disponible

Escenarios:

  • Scenario: Enviar una categoría válida
    • Given Que el cuerpo del request contiene un nombre válido
    • When Realizo un POST a /products/categoria con los datos
    • Then La respuesta debe ser un código 201
    • And La respuesta debe contener un objeto de categoría creado
    • And El mensaje de respuesta debe ser "Created."

Probado

  • Scenario: Enviar un cuerpo sin un nombre
    • Given Que el cuerpo del request no contiene un nombre
    • When Realizo un POST a /products/categoria
    • Then La respuesta debe ser un código 400
    • And El mensaje de respuesta debe ser "No se envió un nombre para la categoría."

Probado

  • Scenario: Enviar un nombre con caracteres no válidos
    • Given Que el cuerpo del request contiene un nombre con caracteres no permitidos (comas, puntos, signos matemáticos, caracteres especiales)
    • When Realizo un POST a /products/categoria
    • Then La respuesta debe ser un código 400
    • And El mensaje de respuesta debe ser "El nombre debe estar formado únicamente por letras y números."

Probado

  • Scenario: Enviar un nombre que ya existe y está eliminado
    • Given Que el cuerpo del request contiene un nombre de una categoría eliminada
    • When Realizo un POST a /products/categoria
    • Then La respuesta debe ser un código 201
    • And La categoría debe ser recuperada
    • And El mensaje de respuesta debe ser "Created."

Probado

  • Scenario: Enviar un nombre que ya existe y no está eliminado
    • Given Que el cuerpo del request contiene un nombre de una categoría existente no eliminada
    • When Realizo un POST a /products/categoria
    • Then La respuesta debe ser un código 400
    • And El mensaje de respuesta debe ser "Ya existe una categoría con este nombre."

Probado

  • Scenario: Enviar una categoría sin formato correcto en el nombre
    • Given Que el cuerpo del request contiene un nombre con formato incorrecto (espacios extra)
    • When Realizo un POST a /products/categoria
    • Then La respuesta debe ser un código 200
    • And El nombre debe ser capitalizado y corregido
    • And El mensaje de respuesta debe ser "Created."

Probado

  • Scenario: Error inesperado durante la creación
    • Given Que el servicio de categorías falla inesperadamente
    • When Realizo un POST a /products/categoria
    • Then La respuesta debe ser un código 400
    • And El mensaje de respuesta debe ser "Error: Error inesperado."

Probado

  • Scenario: Enviar un argumento de tipo incorrecto
    • Given Que el nombre no es del tipo correcto en el cuerpo del request
    • When Realizo un POST a /products/categoria
    • Then La respuesta debe ser un código 400
    • And El mensaje de respuesta debe ser "El parámetro debe ser un número entero válido."

Probado


2. PUT: Actualizar una categoría

Feature: Actualizar una categoría

Como administrador, quiero actualizar una categoría existente para mantener los datos actualizados en el sistema.

Background:

  • Given El servicio de categorías está disponible

Escenarios:

  • Scenario: Actualizar una categoría válida
    • Given Que el cuerpo del request contiene un ID válido y un nombre válido
    • When Realizo un PUT a /products/categoria con los datos
    • Then La respuesta debe ser un código 201
    • And La respuesta debe contener un objeto de categoría actualizado
    • And El mensaje de respuesta debe ser "Created."

Probado

  • Scenario: Enviar una categoría sin ID
    • Given Que el cuerpo del request no contiene un ID
    • When Realizo un PUT a /products/categoria
    • Then La respuesta debe ser un código 404
    • And El mensaje de respuesta debe ser "El ID no corresponde a ninguna categoría."

Probado

  • Scenario: Enviar una categoría con ID de una categoría eliminada
    • Given Que el cuerpo del request contiene un ID de una categoría eliminada
    • When Realizo un PUT a /products/categoria
    • Then La respuesta debe ser un código 400
    • And El mensaje de respuesta debe ser "La categoría no se puede modificar debido a que se encuentra eliminada."

Probado

  • Scenario: Enviar una categoría sin nombre
    • Given Que el cuerpo del request contiene un ID válido pero sin nombre
    • When Realizo un PUT a /products/categoria
    • Then La respuesta debe ser un código 400
    • And El mensaje de respuesta debe ser "La categoría debe tener un nombre."

Probado

  • Scenario: Enviar un nombre con caracteres no válidos
    • Given Que el cuerpo del request contiene un ID válido y un nombre con caracteres no permitidos
    • When Realizo un PUT a /products/categoria
    • Then La respuesta debe ser un código 400
    • And El mensaje de respuesta debe ser "El nombre debe estar formado únicamente por letras y numeros."

Probado

  • Scenario: Enviar un nombre de una categoría que ya existe
    • Given Que el cuerpo del request contiene un ID válido y un nombre de una categoría existente
    • When Realizo un PUT a /products/categoria
    • Then La respuesta debe ser un código 400
    • And El mensaje de respuesta debe ser "Ya existe una categoría con este nombre, no puede haber dos categorías con el mismo nombre."

Probado

  • Scenario: Error inesperado durante la actualización
    • Given Que el servicio de categorías falla inesperadamente
    • When Realizo un PUT a /products/categoria
    • Then La respuesta debe ser un código 400
    • And El mensaje de respuesta debe ser "Error: Error inesperado."

Probado


3. DELETE: Recuperar una categoría eliminada

Feature: Recuperar una categoría eliminada

Como administrador, quiero recuperar una categoría eliminada para reutilizarla en el sistema.

Background:

  • Given El servicio de categorías está disponible

Escenarios:

  • Scenario: Recuperar una categoría eliminada correctamente
    • Given Que la categoría con el ID proporcionado está eliminada
    • When Realizo un PUT a /products/categoria/recuperar/{id}
    • Then La respuesta debe ser un código 200
    • And El mensaje de respuesta debe ser "OK."

Probado

  • Scenario: Recuperar una categoría que no está eliminada
    • Given Que la categoría con el ID proporcionado no está eliminada
    • When Realizo un PUT a /products/categoria/recuperar/{id}
    • Then La respuesta debe ser un código 400
    • And El mensaje de respuesta debe ser "La categoría ya no se encuentra eliminada, se debe enviar el ID de una categoría eliminada."

Probado

  • Scenario: Recuperar una categoría con un ID inexistente
    • Given Que no existe una categoría con el ID proporcionado
    • When Realizo un PUT a /products/categoria/recuperar/{id}
    • Then La respuesta debe ser un código 404
    • And El mensaje de respuesta debe ser "El ID no corresponde a ninguna categoría."

Probado

  • Scenario: Error inesperado durante la recuperación
    • Given Que el servicio de categorías falla inesperadamente
    • When Realizo un PUT a /products/categoria/recuperar/{id}
    • Then La respuesta debe ser un código 400
    • And El mensaje de respuesta debe ser "Error: Error inesperado."

Probado

  • Scenario: Enviar un parámetro de tipo incorrecto para el ID
    • Given Que el ID proporcionado no es un entero
    • When Realizo un PUT a /products/categoria/recuperar/{id}
    • Then La respuesta debe ser un código 400
    • And El mensaje de respuesta debe ser "El parámetro '{id}' debe ser un número entero válido."

Probado


4. GET: Obtener todas las categorías

Feature: Obtener todas las categorías

Como cliente, quiero obtener todas las categorías para ver las disponibles en el sistema.

Escenarios:

  • Scenario: Obtener todas las categorías exitosamente.
    • Given Soy un cliente
    • When Envío un GET a /products/categorias
    • Then La respuesta debe ser un código 200
    • And El cuerpo de la respuesta debe contener una lista de categorías
    • And Cada categoría debe tener atributos válidos como "id" y "nombre."

Probado

  • Scenario: Obtener todas las categorías exitosamente
    • Given Soy un cliente
    • And No existe ninguna categoría
    • When Envío un GET a /products/categoria/1
    • Then La respuesta debe ser un código 200
    • And El cuerpo de la respuesta debe contener una lista vacía
    • And El cuerpo de la respuesta debe contener el mensaje "No hay categorías creadas."

Probado


5. GET: Obtener categoría por ID

Feature: Obtener categoría por ID

Como cliente, quiero obtener una categoría por su ID para ver los detalles de la categoría específica.

Escenarios:

  • Scenario: Obtener categoría por ID exitosamente
    • Given Soy un cliente
    • And Existe una categoría con el ID 1
    • When Envío un GET a /products/categoria/1
    • Then La respuesta debe ser un código 200
    • And El cuerpo de la respuesta debe contener la categoría con ID 1
    • And La categoría debe tener un atributo válido "nombre."

Probado

  • Scenario: Obtener categoría con ID inexistente
    • Given Soy un cliente
    • And No existe una categoría con el ID 999
    • When Envío un GET a /products/categoria/999
    • Then La respuesta debe ser un código 400
    • And El cuerpo de la respuesta debe contener el mensaje "No se encontró la categoría con el ID."

Probado

  • Scenario: Obtener categoría eliminada
    • Given Soy un cliente
    • And Existe una categoría con el ID 2 pero está marcada como eliminada
    • When Envío un GET a /products/categoria/2
    • Then La respuesta debe ser un código 400
    • And El cuerpo de la respuesta debe contener el mensaje "No se puede traer un objeto que esté eliminado."

Probado

  • Scenario: Obtener categoría con ID inválido
    • Given Soy un cliente
    • When Envío un GET a /products/categoria/abc
    • Then La respuesta debe ser un código 400
    • And El cuerpo de la respuesta debe contener el mensaje "El parámetro 'id' debe ser un número entero válido."

Probado

Clone this wiki locally