Credit Card Module
Credit Card Module
26/11/2024
Indice
¡Bienvenido a la wiki del proyecto de Tarjetas de Crédito! Este módulo forma parte de un sistema bancario y se enfoca en proporcionar funcionalidades
avanzadas para la gestión de tarjetas de crédito.
🔄 Separación de responsabilidades.
🧪 Mejora de la testabilidad.
📈 Estructura escalable y mantenible.
📚 Secciones Principales
Explora las distintas secciones de esta wiki para descubrir información detallada sobre el diseño, desarrollo y pruebas del módulo.
🏗️ Architectural Pattern
📝 User Stories
🎯 4P's
📄 Casos de Uso
🧩 Design Patterns
🌐 Epics
📝 Meeting Notes
🚀 Pipeline
💡 Prueba de Concepto
✅ Unit Test
💡 Sigue explorando para descubrir cómo estamos llevando este proyecto al éxito!
Architectural Pattern
En el diagrama se observa cómo las capas externas interactúan unidireccionalmente con las internas. Esta estructura mantiene el núcleo protegido de
3.
🧩 Capa de Dominio (Domain Layer)
La Capa de Dominio es el núcleo de la aplicación y contiene las entidades, objetos de valor y reglas de negocio. Esta capa es completamente
independiente y no tiene dependencias hacia otras capas o frameworks externos.
🌐
🌐 Capa de Infraestructura (Infrastructure Layer)
La Capa de Infraestructura implementa las dependencias externas de la aplicación, como la persistencia de datos y la interacción con APIs
4.
💡 Nota: El módulo commons proporciona funcionalidades base, como se observa en el diagrama. Este módulo hereda e implementa funciones clave
5.
🔧 Inversión de Dependencias: La Infraestructura implementa interfaces del Dominio, garantizando que las dependencias externas no afecten el
núcleo de la aplicación.
📏 Separación de Responsabilidades: Cada capa tiene una función clara, promoviendo modularidad y claridad en el código.
🧪 Testabilidad: La arquitectura permite pruebas unitarias en el núcleo sin depender de servicios externos, gracias al uso de interfaces para
📘 Conclusión y Buenas Prácticas
manejar dependencias.
6.
La Arquitectura Onion garantiza que el núcleo de la aplicación permanezca independiente de frameworks y herramientas externas, facilitando la
escalabilidad y el mantenimiento a largo plazo.
✅ Buenas Prácticas:
Aplicar los principios SOLID.
Respetar la separación estricta entre capas.
Asegurar que las dependencias siempre apunten hacia el núcleo.
Criterios de Aceptación:
Dependencias:
Sub Tareas:
Mockup
Criterios de Aceptación:
El sistema debe mostrar una pantalla de "en revisión" mientras se revisa la solicitud enviada preciamente
El sistema debe enviar una notificación de aceptación o rechazo de la solicitud por correo.
El sistema debe notificar al solicitante por correo electrónico cuando su solicitud haya sido aprobada o rechazada.
En caso de aprobación, el correo debe contener detalles sobre los siguientes pasos, incluyendo la activación y envío de la tarjeta.
En caso de rechazo, el correo debe detallar los motivos del rechazo y, si es posible, ofrecer recomendaciones para futuras solicitudes.
Dependencias:
Se debe tener la US1.1 realizada y funcional.
Sub Tareas:
Mockups*
Criterios de Aceptación:
Dependencias:
Subtareas:
Mockup
US1.4 - Creación de Base de Datos para la Gestión de Solicitudes y
Transacciones de Tarjetas de Crédito
Como desarrollador, quiero crear una base de datos para gestionar las solicitudes de tarjetas de crédito y registrar las transacciones de los usuarios,
para almacenar la información de manera estructurada y segura.
Criterios de aceptación:
La base de datos debe tener una tabla para almacenar la información de los solicitantes (nombre, correo, teléfono, dirección, ingresos mensuales).
La base de datos debe incluir una tabla para las solicitudes, que registre el estado (pendiente, aprobada, rechazada) y los archivos adjuntos.
Debe haber una tabla para almacenar las transacciones realizadas con las tarjetas de crédito.
Las transacciones deben incluir detalles como la fecha, monto, descripción de la transacción y el ID de la tarjeta.
Debe haber relaciones adecuadas entre las tablas de usuarios, solicitudes y transacciones.
El sistema debe permitir la consulta y modificación de los registros por parte de administradores y usuarios autenticados.
Subtareas:
Diseñar el esquema de la base de datos, incluyendo las tablas necesarias para almacenar la información de los solicitantes, las solicitudes y las
transacciones.
Crear una tabla para almacenar los datos del solicitante: nombre completo, correo electrónico, teléfono de contacto, dirección, ingresos mensuales.
Crear una tabla para gestionar las solicitudes de tarjeta de crédito: estado de la solicitud, fecha de creación, archivos adjuntos.
Crear una tabla de transacciones que registre la fecha, monto, descripción de la transacción y el ID de la tarjeta de crédito.
Establecer relaciones entre las tablas de usuarios, solicitudes y transacciones de tarjetas de crédito.
Implementar la lógica para insertar, actualizar y eliminar registros en la base de datos.
Criterios de Aceptación:
El sistema debe permitir asignar una tarjeta de crédito a un usuario previamente aprobado.
El sistema debe almacenar los datos de la tarjeta (número, límite de crédito, fecha de expiración).
Se debe enviar una notificación al usuario con la información de la tarjeta asignada.
Dependencias:
Sub Tareas:
Criterios de Aceptación:
El cliente puede visualizar una lista de todas las transacciones de su tarjeta de crédito en la pantalla.
Las transacciones están ordenadas de la más reciente a la más antigua por defecto.
La lista de transacciones se actualiza automáticamente con nuevas transacciones.
Dependencia:
Sub Tareas:
Mackup
Criterios de Aceptación:
Al aplicar el filtro, solo se muestran las transacciones que caen dentro del rango de fechas seleccionado.
El usuario puede restablecer el filtro para volver a ver todas las transacciones.
Si no existen transacciones en el rango de fechas especificado, se muestra un mensaje informativo indicando que no hay resultados.
Dependencia:
Sub Tareas:
Mackup
US2.3 - Visualización del límite de la tarjeta de crédito:
Como cliente bancario, quiero ver el límite total de mi tarjeta de crédito, para planificar mis compras.
Criterios de Aceptación:
El cliente puede ver el límite total de su tarjeta de crédito en una sección de la pantalla, de manera grafica.
El límite se muestra de manera destacada y junto al saldo actual de crédito y el crédito disponible.
El límite total es preciso y se actualiza si hay cambios en el límite de crédito del usuario.
Dependencia:
Sub Tareas:
Crear el diseño de la sección en la pantalla donde se mostrará el límite total de la tarjeta de crédito.
Desarrollar la funcionalidad que permite, que el limite total, el saldo actual de credio y el credito disponible se actualice automaticamente cuando
haya modifiacciones.
Optimizar el porceso de consultas y visualización de datos para minimizar la carga de la base de datos y mejorar l avelocidad de respuesta de la
interfaz.
Crear mensajes de error y notificaciones que se muestren si hay algun problema la momento de obtener los datos del límite de crédito, saldo actual,
o crédito disponible.
Mackup
Criterios de Aceptación:
El usuario puede ver el saldo actual y el crédito disponible en una sección de la pantalla.
El saldo actual y el crédito disponible se actualizan en tiempo real con las transacciones.
Dependencia:
Sub tareas:
Crear una representacion grafica (como una barra o gráfico circular) para mostrar el saldo actual y el crédito disponible de la tarjeta.
Desarrollar la logica para calcular el crédito disponible en tiempo real.
Configurar una conexión para el saldo actual y el crédito disponible se actualicen en tiempo real a medida que se procesen nuevas transacciones.
Mackup
Criterios de Aceptación:
El reporte incluye el monto total de las transacciones, el balance inicial y final, y un desglose detallado de cada transacción (fecha, descripción,
monto).
El reporte cubre todas las transacciones del mes y está disponible el primer día del mes siguiente.
El usuario recibe un reporte mensual en formato PDF o a través de un enlace de descarga en la aplicación.
Dependencia:
Sub Tareas
Implementar la lógica para generar reportes mensuales con el monto total de transacciones, balance inicial y final, y un desglose detallado de cada
transacción.
Crear la funcionalidad para generar el reporte en formato PDF.
Asegurar que el acceso a los reportes esté protegido mediante autenticación segura.
Mackup
US2.6 Envio de reporte al correo electronico del usuario
Como cliente bancario, quiero recibir un reporte de mi tarjeta cuando esté disponible, para poder visualizar de manera clara mi historial de
transacciones, así como el saldo actual, el monto límite y el crédito disponible de mi tarjeta.
Criterios de Aceptación
Cuando el reporte este listo este se enviara de manera automatica al correo del usuario.
El reporte debe incluir el historial de transacciones, el saldo actual, el monto límite de la tarjeta y el crédito disponible.
El reporte debe reflejar las transacciones y datos más recientes de la tarjeta hasta el momento de su generación.
Sub Tareas
Crear la funcionalidad para enviar notificaciones (correo electronico) cuando el reporte de la tarjeta este disponible
Mackup
Criterios de Aceptación:
El sistema debe requerir autenticación del cliente antes de permitir cambios en el estado de la tarjeta.
El sistema debe bloquear intentos de activación o desactivación si la autenticación falla más de 3 veces.
El cliente debe ser notificado si se bloquea la opción de cambiar el estado de la tarjeta debido a intentos fallidos de autenticación.
Dependencias
Sub Tasks
Crear un formulario de inicio de sesión que permita al cliente ingresar sus credenciales antes de realizar cambios en el estado de la tarjeta.
Si el cliente falla más de 3 veces, bloquear la opción de activar o desactivar la tarjeta durante un período de 30 minutos
Mockup:
Criterios de Aceptación:
El sistema debe permitir al cliente desactivar su tarjeta desde la plataforma de manera sencilla
El sistema debe impedir cualquier transacción con la tarjeta mientras esté desactivada.
El sistema debe registrar el cambio en el estado de la tarjeta, incluyendo la fecha y hora en que fue desactivada.
Dependencias
Sub Tasks
Integrar con la base de datos para actualizar el estado de la tarjeta (de "activa" a "desactivada").
Al finalizar la desactivación, mostrar un mensaje de confirmación al cliente que indique que la tarjeta ha sido desactivada exitosamente y darle la
opcion de evita el comprobante al email.
Agregar una sección donde el cliente pueda ver claramente si su tarjeta está activa o desactivada.
Mockup
US3.3 - Activar Tarjeta de Crédito
Como cliente con una tarjeta de crédito desactivada, quiero poder reactivar mi tarjeta de crédito para volver a utilizarla para transacciones cuando lo
necesite.
Criterios de Aceptación:
El sistema debe permitir transacciones con la tarjeta una vez que esté activada.
El sistema debe registrar el cambio en el estado de la tarjeta, incluyendo la fecha y hora en que fue activada.
Dependencias:
Sub Tasks
Integrar con la base de datos para actualizar el estado de la tarjeta (de "activa" a "desactivada").
Al finalizar la activacion, mostrar un mensaje de confirmación al cliente que indique que la tarjeta ha sido activada exitosamente y darle la opcion de
evita el comprobante al email.
Agregar una sección donde el cliente pueda ver claramente si su tarjeta está activa o desactivada.
Mockup:
Criterios de Aceptación:
El sistema debe permitir al cliente acceder a un historial de las transacciones aun cuando la tarjeta esté desactivada.
El historial debe incluir detalles relevantes para el historial de transacciones, deudas pendientes y fechas de creación y cierre, asegurando la
integridad y precisión de la información asociada.
El cliente debe poder ver al menos los últimos 10 cambios en el estado de su tarjeta.
Dependencias:
Sub Tasks
Crear una sección donde el cliente pueda acceder al historial de transacciones de su tarjeta de crédito.
Monto de la transacción.
Fecha y hora de la transacción.
Estado actual de la deuda (pagada o pendiente)
Implementar una funcionalidad que permita al cliente visualizar los últimos 10 cambios en el estado de su tarjeta (activación, desactivación, etc.).
Mockup:
Criterios de Aceptación:
El sistema debe enviar una notificación cuando la tarjeta de crédito sea activada o desactivada.
La notificación debe incluir detalles como la fecha, hora, y acción realizada (activación o desactivación).
Dependencias
Sub Tasks
Establecer los formatos y plantillas para las notificaciones, debe incluir minimo la fecha, hora y la acción realizada (activación o desactivación).
Desarrollar la funcionalidad en el backend que envíe notificaciones cuando se active o desactive una tarjeta de crédito
Criterios de Aceptación:
El cliente puede elegir entre diferentes opciones de pago: mínimo, total o personalizado.
El sistema verificará la cuenta bancaria del cliente antes de procesar el pago, asegurando que esté activa y tenga fondos.
Se enviará una notificación al cliente para confirmar el éxito o el fallo del pago.
Los detalles del pago manual quedarán registrados en el historial de transacciones de la tarjeta.
Dependencias:
Modulo Cuenta
Modulo Transacción
Mockup
Subtareas:
Criterios de Aceptación:
El cliente podrá definir la frecuencia del pago automático y si desea pagar el mínimo, el total o un monto personalizado.
Dependencias:
Modulo Cuenta
Modulo Transacción
Mockup
Subtareas:
Criterios de Aceptación:
El cliente recibirá notificaciones cuando se procese un pago manual o automático (pop up).
Las notificaciones indicarán si el pago fue exitoso o fallido, y mostrarán detalles como monto y fecha.
Dependencias:
Modulo Cuenta
Modulo Transacción
Mockup
Subtareas:
Criterios de Aceptación:
El cliente podrá ver una lista completa de los pagos y cargos realizados.
Dependencias:
Mockups
Subtareas:
Criterios de Aceptación:
Esta validación será aplicada tanto para pagos automáticos como manuales.
Dependencias:
Subtareas:
REQ-1
REQ-2
REQ-3
REQ-4
REQ-5
Design Patterns
🧠 Introducción a los Patrones de Diseño
Last edited by Edwin Arias 3 days ago
Los patrones de diseño son soluciones reutilizables a problemas comunes en el desarrollo de software. Ayudan a:
📚 Estandarizar la arquitectura.
⚡ Mejorar la flexibilidad y escalabilidad del sistema.
🛠️ Simplificar el mantenimiento y la comprensión del código.
🗂️ Lista de Patrones de Diseño
En este proyecto, hemos implementado varios patrones de diseño clave para garantizar que nuestro sistema sea eficiente, modular y fácil de extender.
🧩: Un patrón que asegura que una clase tenga solo una instancia y proporcione un punto global de acceso a ella.
[Link]
[Link]🎭: Proporciona una interfaz simplificada para un conjunto de interfaces en un subsistema, haciendo que el sistema sea más fácil de usar.
[Link]🏭: Un patrón para crear objetos sin especificar la clase exacta de objeto que se creará, promoviendo el principio de inversión de
dependencias.
[Link]🖌️: Permite la creación de objetos basados en un prototipo existente, clonándolo en lugar de crear nuevas instancias desde cero.
Singleton Pattern
🧩 Singleton Pattern
Last edited by Edwin Arias 3 days ago
El patrón de diseño Singleton se utiliza para gestionar el inicio de sesión y garantizar que solo haya una instancia activa durante la sesión. Esto permite
Instancia Única: Garantiza que solo exista un objeto que represente al usuario autenticado.
Acceso Global: Facilita el acceso al usuario actual desde cualquier parte de la aplicación.
Se define la clase CurrentUserSingleton , que asegura que solo exista una instancia activa del usuario. Esta clase incluye:
Utilizamos el patrón de diseño Facade para simplificar la interacción entre el controlador y las diversas clases de servicio y mapeo relacionadas con la
solicitud y seguimiento de tarjetas de crédito. Este patrón surgió de la necesidad de centralizar la lógica, permitiendo que los controladores se enfoquen
solo en la lógica de la interfaz de usuario (UI). Con Facade, reducimos la complejidad en los controladores, haciendo que el código sea más limpio y fácil
de mantener.
En esta primera sección, definimos la clase CreditCardFacade, que actúa como una fachada. Esta clase contiene referencias a las dependencias
principales (UserService y UserMapper), necesarias para realizar operaciones relacionadas con los usuarios. En lugar de que los controladores
gestionen directamente estos servicios y mapeadores, delegamos la responsabilidad al Facade. Esto asegura que cualquier operación relacionada con la
solicitud o seguimiento de una tarjeta de crédito esté centralizada aquí.
En esta parte, definimos los métodos handleRequestCreditCardView() y showTrackRequestView() en la fachada. Estos métodos simplifican el flujo de
interacción para el controlador:
showTrackRequestView() verifica si el usuario actual es un administrador y, en función de ello, selecciona la vista adecuada de seguimiento de
solicitud de tarjeta de crédito.
Gracias a esta estructura, el controlador solo necesita llamar a estos métodos sin preocuparse por la lógica o detalles de implementación. Esto permite
una interacción limpia y sencilla desde el controlador, sin necesidad de manejar servicios y validaciones complejas.
La clase RequestFactory es la responsable de crear y gestionar una instancia de RequestService . La intención de la clase Factory es que otras partes
del código puedan obtener una instancia de la clase RequestService sin que las clases tengan detalles de su creación o configuración. Este es un
patrón de Factory Method, ya que encapsula la lógica de creación dentro de un método estático.
package [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
private RequestFactory() {
El método requestService es donde estamos implementando el patrón de diseño. La función verifica si la instancia de requestService es nula. En
caso de que lo sea, crea y configura todos los objetos necesarios para luego instanciar la clase RequestServiceImpl . Después de esto, devuelve la
instancia de RequestService , lo que permite al cliente o usuario obtener una instancia sin la necesidad de conocer los detalles de cómo se crea.
La clave del patrón se encuentra en el método requestService() , ya que este oculta el proceso de creación del objeto de la clase
RequestServiceImpl , agregando todas las dependencias como EntityManager y RequestRepository .
En el caso de las demás clases, es igual, ya que se implementa la misma lógica para todas. Lo único que cambia es que cada clase hace referencia a las
clases con las que trabaja. A continuación, se adjuntan las demás clases, en donde se evidencia que tienen la misma lógica; por lo tanto, estas clases
también implementan el patrón de diseño Factory.
CreditCardFactory
package [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
private CreditCardFactory() {
TransactionFactory
package [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
private TransactionFactory() {
}
return transactionService;
}
}
UserFactory
package [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
private UserFactory() {
}
PaymentFactory
package [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
private PaymentFactory() {
return paymentService;
}
}
Prototype
Last edited by Catriel21 3 weeks ago
Clase CreditCardDTO
La clase CreditCardDTO se define en el paquete [Link] y está estructurada de la siguiente manera:
package [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
@Data
@Builder
public class CreditCardDTO implements Cloneable {
private Long id;
private String cardNumber;
private LocalDateTime expirationDate;
private int cvc;
private BigDecimal creditLimit;
private BigDecimal currentBalance;
private LocalDateTime createdAt;
private StatusCreditCard status;
private Long userId;
@Override
public CreditCardDTO clone() {
try {
return (CreditCardDTO) [Link](); // Clonación superficial
} catch (CloneNotSupportedException e) {
throw new RuntimeException("Error al clonar CreditCardDTO", e);
}
}
}
Atributos
id : Identificador único de la tarjeta de crédito.
cardNumber : Número de la tarjeta de crédito.
expirationDate : Fecha de expiración de la tarjeta.
cvc : Código de verificación de la tarjeta.
creditLimit : Límite de crédito asignado a la tarjeta.
currentBalance : Saldo actual de la tarjeta.
createdAt : Fecha de creación de la tarjeta.
status : Estado actual de la tarjeta de crédito.
userId : Identificador del usuario asociado con la tarjeta.
Consideraciones al Clonar
Clonación Superficial: La clonación se realiza de manera superficial. Si se tiene atributos mutables, se debe considerar la implementación de una
clonación profunda para evitar efectos indeseados.
Gestión de IDs: Es recomendable establecer el id en null al crear un nuevo DTO que se persistirá en la base de datos.
Conclusión
La implementación del patrón Prototype en CreditCardDTO simplifica la creación de nuevas instancias de este objeto, mejorando la eficiencia y la
claridad del código en la capa de aplicación. Este enfoque respeta la arquitectura Onion al mantener separadas las preocupaciones de creación y
transporte de datos.
Epics
Last edited by Cristian Galeano 1 month ago
Descripción: Desarrollar una funcionalidad que permita a los clientes acceder y gestionar todo el ciclo de vida de sus tarjetas de crédito. Esto incluirá la
solicitud de nuevas tarjetas, el seguimiento del proceso de aprobación de la tarjeta Los usuarios podrán solicitar una tarjeta de crédito a través del
sistema, gestionar sus preferencias de uso y monitorear su actividad financiera.
Criterios de Éxito:
Los clientes pueden solicitar una tarjeta de crédito a través de la plataforma digital.
El sistema notifica a los clientes si se aprobó o no su solicitud.
Toda la información de la tarjeta está actualizada y es accesible en cualquier momento.
Dependencias:
Estimación
L (Large)
User Storys.
Descripción: Desarrollar una funcionalidad que permita a los clientes acceder y gestionar el historial de transacciones de su tarjeta de crédito.
Criterios de Éxito:
Los usuarios pueden visualizar todas las transacciones realizadas con la tarjeta.
Los clientes pueden especificar un rango de fechas para filtrar las transacciones.
Los usuarios pueden ver su límite de crédito, saldo actual y su crédito disponible.
Dependencias:
Esta épica se basa en aquellos usuarios que cumplen la primera épica es decir que tienen una tarjeta de crédito.
Sistemas de autenticación de usuarios.
Base de datos de transacciones de tarjetas de crédito.
Estimación:
User Storys.
Descripción: Esta épica permitirá a los clientes activar o desactivar temporalmente sus tarjetas de crédito a través de la plataforma bancaria. La
funcionalidad asegurará que los clientes tengan control sobre el uso de sus tarjetas en cualquier momento, previniendo transacciones no autorizadas y
brindando tranquilidad. Manteniendo el historial de las tarjetas aun si están desactivadas.
Criterios de Exito:
Esta épica se basa en aquellos usuarios que cumplen la primera épica es decir que tienen una tarjeta de crédito.
Estimacion:
User Storys.
Epic 4: Gestión de Pagos y Cargos Automáticos Descripción: Esta epic permitirá brindar a los clientes la capacidad de efectuar pagos de las deudas
acumuladas en su tarjeta de crédito, tanto de forma manual como automática. Este proceso se diseñará con transparencia y eficiencia, otorgando a los
usuarios un control total sobre sus pagos y facilitando la gestión de sus obligaciones financieras. Criterios de Éxito:
El sistema permite a los usuarios realizar pagos manuales de su deuda acumulada en la tarjeta de crédito, ofreciendo opciones como el pago
mínimo, el pago total o un monto específico ingresado por el usuario.
El sistema valida que la cuenta bancaria del usuario esté activa y tenga suficientes fondos antes de realizar un cargo automático o un pago manual.
Los usuarios reciben notificaciones sobre el estado de los pagos automáticos y manuales (éxito, fallo, fondos insuficientes).
Los registros de pagos y cargos automáticos están disponibles para que los usuarios los consulten en su historial de transacciones.
Estimación:
Users Storys.
Sprint 0
Meeting: 04/10/2024
Retrospective: 11/10/2024
Sprint 1
Una pipeline (o "tubería") en el contexto del desarrollo de software es un conjunto de pasos automatizados que permiten la integración y entrega
continua (CI/CD) del código. Estas secuencias de pasos suelen incluir tareas como la compilación del código, la ejecución de pruebas, la revisión de
calidad del código, el despliegue en entornos de prueba y producción, entre otros.
El objetivo de una pipeline es garantizar que los cambios en el código se integren y se entreguen de manera eficiente y sin errores. Al automatizar estas
tareas, se mejora la productividad, se reduce el riesgo de errores manuales y se acelera el ciclo de desarrollo.
Pagina 1
Linter
Pagina 2
UnitTests
Pagina 3
Artefacts
Pagina 4
Coverage
Artefactos
Last edited by Cristian Galeano 1 week ago
Publicación de artefactos:
El bloque artifacts guarda los artefactos generados en la carpeta target :
paths: target/*.jar : Especifica que solo se guarden los archivos JAR generados.
expire_in: 1 week : Define que los artefactos estarán disponibles por una semana en GitLab, tras lo cual serán eliminados automáticamente.
build:
stage: build
script:
- mvn $MAVEN_CLI_OPTS clean package
artifacts:
paths:
- target/*.jar
expire_in: 1 week
tags:
- gitlab-org
Coverage
Last edited by Cristian Galeano 1 week ago
El bloque coverage en el archivo de CI/CD está diseñado para automatizar la generación y publicación de informes de cobertura de código utilizando
JaCoCo, una herramienta de cobertura popular en proyectos basados en Java.
El campo coverage: '/Total.*?([0-9]{1,3})%/' utiliza una expresión regular para buscar el porcentaje de cobertura total en los resultados de la
ejecución de pruebas.
Este valor puede ser usado por GitLab CI para monitorear y mostrar la cobertura directamente en la interfaz del pipeline.
3. Publicación de resultados:
guardarUsuario_shouldGuardarUsuarioExitosamente .
Ejemplo:
Clases de Prueba:
Cada módulo (DTO, Entidad, Servicio) tendrá su propia clase de prueba que incluirá las pruebas específicas:
DTOs: Incluir entre 3-4 pruebas para validar conversiones y restricciones.
Entidades: Incluir al menos 7 pruebas para probar persistencia, integridad de datos y validaciones.
Servicios: Incluir al menos 6 pruebas que validen la lógica del servicio y los resultados de los métodos.
4. Manejo de Mockings
Mockito:
Utilizamos Mockito para simular dependencias externas o servicios que no se deseen llamar directamente en pruebas unitarias.
Configuración de Mock:
Configurar los mocks en el método @BeforeEach , para que cada prueba comience con un estado limpio.
Usar métodos como when().thenReturn() para definir los comportamientos esperados de los mocks.
5. Cobertura de Código
Porcentaje Mínimo de Cobertura:
El porcentaje de cobertura es superior al 80%, con el fin de garantizar una prueba robusta del sistema.
Herramientas de Cobertura:
Con herramientas como JaCoCo podemos medir y analizar la cobertura de código.