Example #1
0
        public async Task <IActionResult> Calcular(
            [FromServices] CalculadoraJurosHandler handler,
            [SwaggerParameter(Required = true)][FromQuery] CalculoCommand command)
        {
            var result = await handler.Calcular(command);

            return(Ok(result));
        }
Example #2
0
        public void Calcular_QuandoValorForZeroOuNegativo_DeveLancarException(double valorInicial, int meses)
        {
            //Arrange
            var command = new CalculoCommand
            {
                ValorInicial = valorInicial,
                Meses        = meses
            };

            //Act // Assert
            handler
            .Invoking(x => x.Calcular(command))
            .Should()
            .ThrowExactly <ArgumentOutOfRangeException>()
            .WithMessage($"{ValidationErrors.MaiorOuIgualZero}*");
        }
Example #3
0
        public async void Calcular_QuandoValoresEstiveremValidos_DeveRetornarValorCalculado(int valorInicial, int meses, double taxaJuros, double valorEsperado)
        {
            //Arrange
            jurosClient.Setup(x => x.GetJuros()).Returns(Task.FromResult(taxaJuros));

            var command = new CalculoCommand
            {
                ValorInicial = valorInicial,
                Meses        = meses
            };

            //Act
            var result = await handler.Calcular(command);

            //Assert
            result.Should().Be(valorEsperado);
        }
Example #4
0
        public async Task <double> Calcular(CalculoCommand command)
        {
            if (command == null)
            {
                throw new ArgumentNullException(nameof(command));
            }
            if (command.ValorInicial <= 0)
            {
                throw new ArgumentOutOfRangeException("valorInicial", ValidationErrors.MaiorOuIgualZero);
            }
            if (command.Meses <= 0)
            {
                throw new ArgumentOutOfRangeException("meses", ValidationErrors.MaiorOuIgualZero);
            }

            logger.LogInformation("Obtendo júros da API 1");
            var juros = await jurosClient.GetJuros();

            logger.LogInformation("Júros carregado com uma taxa de {0}", juros);

            var valor = command.ValorInicial * Math.Pow(1 + juros, command.Meses);

            return((double)decimal.Round((decimal)valor, 2));
        }