Skip to content

Sucursal

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

Modelo Sucursal

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

Atributos

  • id (Integer):

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

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

Endpoints

1. Crear una Sucursal

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

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

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

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

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

6. Obtener Sucursal por ID

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

Feature: Crear una sucursal

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

Background:

  • Given El servicio de sucursales está disponible

Escenarios:

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

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

Probado

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

Feature: Actualizar una sucursal

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

Background:

  • Given El servicio de sucursales está disponible

Escenarios:

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

Probado

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

Probado

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

Probado

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

Probado

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

Probado


3. DELETE: Recuperar una sucursal eliminada

Feature: Recuperar una sucursal eliminada

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

Background:

  • Given El servicio de sucursales está disponible

Escenarios:

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

Probado

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

Probado

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

Probado

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

Feature: Obtener todas las sucursales

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

Escenarios:

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

Probado

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

Probado


5. GET: Obtener sucursal por ID

Feature: Obtener sucursal por ID

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

Escenarios:

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

Probado

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

Probado

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