public Response <Credito> Abonar(AbonoRequest request)
        {
            Credito credito = Buscar(x => x.Id == request.CreditoId).FirstOrDefault();

            if (credito == null)
            {
                return(new Response <Credito>
                {
                    Mensaje = "Crédito no encontrado."
                });
            }
            List <string> errores = credito.PuedeAbonar(request.Monto);

            if (errores.Any())
            {
                return(new Response <Credito>
                {
                    Mensaje = string.Join("|", errores)
                });
            }
            string mensaje = credito.Abonar(request.Monto);

            _unitOfWork.CreditoRepository.Edit(credito);
            _unitOfWork.Commit();
            credito.Abonos = null; // Eliminar las listas internas por problemas de ciclos en Json
            credito.Cuotas = null;
            return(new Response <Credito>
            {
                Mensaje = mensaje,
                Entity = credito
            });
        }
        public void AbonoInferiorCuotaCredito()
        {
            Credito credito    = service.Buscar(x => x.Id == 4).FirstOrDefault();
            double  valorAbono = 100000;

            Assert.IsNotNull(credito);
            AbonoRequest request = new AbonoRequest
            {
                Monto     = valorAbono,
                CreditoId = credito.Id
            };
            Response <Credito> response = service.Abonar(request);

            Assert.Contains($"El valor del abono debe ser mínimo de ${credito.ValorCuota}.", response.Mensaje.Split(','));
        }
        public void AbonoSuperiorCuotaCredito()
        {
            Credito credito       = service.Buscar(x => x.Id == 4, include: "Cuotas").FirstOrDefault();
            double  valorAbono    = 631000;
            double  valorEsperado = credito.Saldo - valorAbono;

            Assert.IsNotNull(credito);
            AbonoRequest request = new AbonoRequest
            {
                Monto     = valorAbono,
                CreditoId = credito.Id
            };
            Response <Credito> response = service.Abonar(request);

            Assert.AreEqual($"Abono registrado correctamente. Su nuevo saldo es: ${valorEsperado}.", response.Mensaje);
        }
        public ActionResult <Response <Credito> > Abonar(AbonoRequest abono)
        {
            var response = _service.Abonar(abono);

            return(Ok(response));
        }