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

Modelo Marca

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

Atributos

  • id (Integer):

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

    • Nombre de la marca.
    • 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 marca fue eliminada (si es que lo fue).
    • Puede ser null si la marca no está eliminada.

Endpoints

1. Crear una Marca

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

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

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

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

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

6. Obtener Marca por ID

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

Feature: Crear una marca

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

Background:

  • Given El servicio de marcas está disponible

Escenarios:

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

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

Probado

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

Feature: Actualizar una marca

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

Background:

  • Given El servicio de marcas está disponible

Escenarios:

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

Probado

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

Probado

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

Probado

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

Probado

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

Probado


3. DELETE: Recuperar una marca eliminada

Feature: Recuperar una marca eliminada

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

Background:

  • Given El servicio de marcas está disponible

Escenarios:

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

Probado

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

Probado

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

Probado

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

Feature: Obtener todas las marcas

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

Escenarios:

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

Probado

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

Probado


5. GET: Obtener marca por ID

Feature: Obtener marca por ID

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

Escenarios:

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

Probado

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

Probado

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