Skip to content
RocioMenardi edited this page Mar 17, 2025 · 5 revisions

Modelo Color

El modelo Color representa una entidad de un color en el sistema. A continuación, se describen sus atributos y métodos.

Atributos

  • id (Integer):

    • Clave primaria del color.
    • Se genera automáticamente con la estrategia GenerationType.IDENTITY.
  • nombre (String):

    • Nombre del color.
    • 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 el color fue eliminado (si es que lo fue).
    • Puede ser null si el color no está eliminado.

Endpoints

1. Crear un Color

  • Endpoint: POST /products/color
  • Descripción: Crea un nuevo color en el sistema.
  • Cuerpo de la Solicitud:
    • nombre: string (obligatorio, máximo 100 caracteres)
{
  "nombre": "nombre color" //String
}
  • Respuestas:
  • 201 Created: Color creado exitosamente (Esto aplica tanto para cuando se crea una color, o cuando se quiere crear una color con el mismo nombre que un color eliminado, en ese caso lo que se hace es recuperar dicho color).
{
  "status": 201,
  "message": "Created.",
  "data": {
    "id": 1,
    "nombre": "Azul"
  },
  "errors": null
}
  • 400 Bad Request:
    • No se envió un nombre para el color.
{
  "status": 400,
  "message": "Error: Bad Request.",
  "data": null,
  "errors": "No se envió un nombre para el color."
}
    • 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 un color 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 un Color

  • Endpoint: PUT /products/color
  • Descripción: Actualiza un color existente en el sistema.
  • Cuerpo de la Solicitud:
    • id: integer (obligatorio)
    • nombre: string (obligatorio, máximo 100 caracteres)
{
  "id": 1, //int
  "nombre": "nombre color" //String
}
  • Respuestas:
  • 201 Created: Color actualizado exitosamente.
{
  "status": 200,
  "message": "OK",
  "data": {
    "id": 1,
    "nombre": "Azul"
  },
  "errors": null
}
  • 404 Not Found: El ID no corresponde a ningun color.
{
  "status": 404,
  "message": "Error: Not Found",
  "data": null,
  "errors": "No se encontró el color con el ID."
}
  • 400 Bad Request:
    • El color no se puede modificar porque está eliminado.
{
  "status": 400,
  "message": "Error: Bad Request.",
  "data": null,
  "errors": "No se puede modificar un objeto que está eliminado."
}
    • El color debe tener un nombre.
{
  "status": 400,
  "message": "Error: Bad Request.",
  "data": null,
  "errors": "El color 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 un color con este nombre.
{
  "status": 400,
  "message": "Error: Bad Request.",
  "data": null,
  "errors": "Ya existe un color 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 un Color

  • Endpoint: DELETE /products/color/{id}
  • Descripción: Eliminar un color.
  • Parámetros de Ruta:
    • id: integer (obligatorio)
  • Respuestas:
  • 200 OK: Color eliminado exitosamente.
{
  "status": 200,
  "message": "OK.",
  "data": {
    "id": 1,
    "nombre": "Azul",
    "fechaEliminacion": "2024-09-28T12:34:56" 
  },
  "errors": null
}
  • 400 Bad Request:
    • El color ya está eliminado.
{
  "status": 400,
  "message": "Error: Bad Request.",
  "data": null,
  "errors": "El color ya se encuentra eliminado, se debe enviar el id de un color no eliminado."
}
    • 404 Not Found: El ID no corresponde a ningún color.
{
  "status": 404,
  "message": "Error: Not Found.",
  "data": null,
  "errors": "El id no corresponde a ningun color, se debe enviar el id de un color 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 un Color Eliminado

  • Endpoint: PUT /products/color/recuperar/{id}
  • Descripción: Recupera un color que ha sido eliminado.
  • Parámetros de Ruta:
    • id: integer (obligatorio)
  • Respuestas:
  • 200 OK: Color recuperado exitosamente.
{
  "status": 200,
  "message": "OK",
  "data": {
    "id": 1,
    "nombre": "Azul"
  },
  "errors": null
}
  • 400 Bad Request:
    • El color no está eliminado.
{
  "status": 400,
  "message": "Error: Bad Request.",
  "data": null,
  "errors": "El color no está eliminado."
}
    • 404 Not Found: El ID no corresponde a ningun color.
{
  "status": 404,
  "message": "Error: Not Found",
  "data": null,
  "errors": "No se encontró el color 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 Todos los Colores

  • Endpoint: GET /products/colors
  • Descripción: Obtiene una lista de todos los colores.
  • Respuestas:
  • 200 OK: Lista de colores devuelta exitosamente.
{
  "status": 200,
  "message": "OK",
  "data": [
    {
      "id": 1,
      "nombre": "Azul"
    },
    {
      "id": 2,
      "nombre": "Amarillo"
    }
  ],
  "errors": null
}
  • 400 Bad Request:
    • No existen colors.
{
  "status": 400,
  "message": "Bad request",
  "data": null,
  "errors": "No hay colores creados."
}

6. Obtener Color por ID

  • Endpoint: GET /products/color/{id}
  • Descripción: Obtiene un color específico por su ID.
  • Parámetros de Ruta: ** id: integer (obligatorio)
  • Respuestas:
  • 200 OK: Color devuelto exitosamente.
{
  "status": 200,
  "message": "OK",
  "data": {
    "id": 1,
    "nombre": "Azul"
  },
  "errors": null
}
  • 400 Bad Request:
    • No se encontró el color con el ID.
{
  "status": 404,
  "message": "Error: Not Found",
  "data": null,
  "errors": "No se encontró el color 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 un color

Feature: Crear un color

Como administrador, quiero crear un color para que esté disponible en el sistema.

Background:

  • Given El servicio de colores está disponible

Escenarios:

  • Scenario: Enviar un color válido
    • Given Que el cuerpo del request contiene un nombre válido
    • When Realizo un POST a /products/color con los datos
    • Then La respuesta debe ser un código 201
    • And La respuesta debe contener un objeto de color 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/color
    • Then La respuesta debe ser un código 400
    • And El mensaje de respuesta debe ser "No se envió un nombre para el color."

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/color
    • 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 un color eliminado
    • When Realizo un POST a /products/color
    • Then La respuesta debe ser un código 201
    • And El color debe ser recuperado
    • 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 un color existente no eliminado
    • When Realizo un POST a /products/color
    • Then La respuesta debe ser un código 400
    • And El mensaje de respuesta debe ser "Ya existe un color 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/color
    • 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 color falla inesperadamente
    • When Realizo un POST a /products/color
    • 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/color
    • 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 un color

Feature: Actualizar un color

Como administrador, quiero actualizar un color existente para mantener los datos actualizados en el sistema.

Background:

  • Given El servicio de colores está disponible

Escenarios:

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

Probado

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

Probado

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

Probado

  • Scenario: Enviar un color sin nombre
    • Given Que el cuerpo del request contiene un ID válido pero sin nombre
    • When Realizo un PUT a /products/color
    • Then La respuesta debe ser un código 400
    • And El mensaje de respuesta debe ser "El color 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/color
    • 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 un color que ya existe
    • Given Que el cuerpo del request contiene un ID válido y un nombre de un color existente
    • When Realizo un PUT a /products/color
    • Then La respuesta debe ser un código 400
    • And El mensaje de respuesta debe ser "Ya existe un color con este nombre, no puede haber dos colores 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/color
    • Then La respuesta debe ser un código 400
    • And El mensaje de respuesta debe ser "Error: Error inesperado."

Probado


3. DELETE: Recuperar un color eliminado

Feature: Recuperar un color eliminado

Como administrador, quiero recuperar un color eliminado para reutilizarlo en el sistema.

Background:

  • Given El servicio de colores está disponible

Escenarios:

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

Probado

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

Probado

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

Probado

  • Scenario: Error inesperado durante la recuperación
    • Given Que el servicio de colores falla inesperadamente
    • When Realizo un PUT a /products/color/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/color/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 todos los colores

Feature: Obtener todos los colores

Como cliente, quiero obtener todos los colores para ver las disponibles en el sistema.

Escenarios:

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

Probado

  • Scenario: Obtener todos los colores exitosamente
    • Given Soy un cliente
    • And No existe ningún color
    • When Envío un GET a /products/color/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 colores creados."

Probado


5. GET: Obtener color por ID

Feature: Obtener color por ID

Como cliente, quiero obtener un color por su ID para ver los detalles del color específico.

Escenarios:

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

Probado

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

Probado

  • Scenario: Obtener color eliminado
    • Given Soy un cliente
    • And Existe un color con el ID 2 pero está marcada como eliminado
    • When Envío un GET a /products/color/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 color con ID inválido
    • Given Soy un cliente
    • When Envío un GET a /products/color/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