Skip to content
Juan Pablo Dealbera edited this page Sep 29, 2024 · 2 revisions

Modelo Talle

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

Atributos

  • id (Integer):

  • Clave primaria de la talle.

  • Se genera automáticamente con la estrategia GenerationType.IDENTITY.

  • nombre (String):

  • Nombre de la talle.

  • 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 talle fue eliminada (si es que lo fue).

  • Puede ser null si la talle no está eliminada.

Endpoints

1. Crear una Talle

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

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

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

  • Endpoint: PUT /products/talle/recuperar/{id}
  • Descripción: Recupera una talle que ha sido eliminada.
  • Parámetros de Ruta:
  • id: integer (obligatorio)
  • Respuestas:
  • 200 OK: Talle recuperada exitosamente.
{
  "status": 200,
  "message": "OK",
  "data": {
    "id": 1,
    "nombre": "Azul"
  },
  "errors": null
}
  • 400 Bad Request:
  • La talle no está eliminada.
{
  "status": 400,
  "message": "Error: Bad Request.",
  "data": null,
  "errors": "La talle no está eliminada."
}
  • 404 Not Found: El ID no corresponde a ninguna talle.
{
  "status": 404,
  "message": "Error: Not Found",
  "data": null,
  "errors": "No se encontró la talle 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 Talles

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

6. Obtener Talle por ID

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

Feature: Crear una talle

Como administrador, quiero crear una talle para que esté disponible en el sistema.

Background:

  • Given El servicio de talles está disponible

Escenarios:

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

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/talle
  • 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 talle eliminada
  • When Realizo un POST a /products/talle
  • Then La respuesta debe ser un código 201
  • And La talle 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 talle existente no eliminada
  • When Realizo un POST a /products/talle
  • Then La respuesta debe ser un código 400
  • And El mensaje de respuesta debe ser "Ya existe una talle con este nombre."

Probado

  • Scenario: Enviar una talle 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/talle
  • 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 talles falla inesperadamente
  • When Realizo un POST a /products/talle
  • 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/talle
  • 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 talle

Feature: Actualizar una talle

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

Background:

  • Given El servicio de talles está disponible

Escenarios:

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

Probado

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

Probado

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

Probado

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

Probado

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

Probado

3. DELETE: Recuperar una talle eliminada

Feature: Recuperar una talle eliminada

Como administrador, quiero recuperar una talle eliminada para reutilizarla en el sistema.

Background:

  • Given El servicio de talles está disponible

Escenarios:

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

Probado

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

Probado

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

Probado

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

Feature: Obtener todas las talles

Como cliente, quiero obtener todas las talles para ver las disponibles en el sistema.

Escenarios:

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

Probado

  • Scenario: Obtener todas las talles exitosamente
  • Given Soy un cliente
  • And No existe ninguna talle
  • When Envío un GET a /products/talle/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 talles creadas."

Probado

5. GET: Obtener talle por ID

Feature: Obtener talle por ID

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

Escenarios:

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

Probado

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

Probado

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