Exemplo n.º 1
0
        public async Task <IActionResult> ReturnRates([FromQuery] string firstCoin, [FromQuery] string secondCoin)
        {
            var command       = new GetCryptoRatesCommand(firstCoin, secondCoin);
            var commandReturn = await _coinService.GetCryptoRates(command);

            return(commandReturn.Success ? Ok(commandReturn) : BadRequest(commandReturn));
        }
Exemplo n.º 2
0
        public async Task Must_Return_Error_In_GetCryptoRates_When_Informing_Wrong_parameters()
        {
            //Arrange
            var command = new GetCryptoRatesCommand(It.IsAny <string>(), It.IsAny <string>());
            var service = new CoinService(_apiSetup.Object, _client.Object, _logger.Object);

            //Act
            var commandReturn = await service.GetCryptoRates(command);

            //Assert
            Assert.NotNull(commandReturn);
            Assert.False(commandReturn.Success);
        }
Exemplo n.º 3
0
        public async Task <CommandReturn> GetCryptoRates(GetCryptoRatesCommand command)
        {
            string methodName = nameof(GetCryptoRates);

            if (!command.IsValid())
            {
                var errors = command.Errors();
                _logger.Error(errors, methodName);

                return(new CommandReturn(false, errors, ""));
            }


            try
            {
                _client.DefaultRequestHeaders.Add("X-CoinAPI-Key", _apiUrl.GetCoinApiKey());
                var response = await _client.GetAsync($"{_apiUrl.GetCoinApiUrl()}exchangerate/{command.FirstCoin}/{command.SecondCoin}");

                var jsonContent = await response.Content.ReadAsStringAsync();

                var responseApiObj = JsonConvert.DeserializeObject <ApiCoinResponse>(jsonContent);

                var exchanges = responseApiObj.src_side_base.OrderBy(x => x.rate).ToList();

                for (int i = 0; i < 3; i++)
                {
                    exchanges[i].spotlight = "purple";
                }

                var resultObj = new
                {
                    requestDate = DateTime.Now.ToString(""),
                    coinRate    = responseApiObj.rate,
                    exchanges
                };


                _logger.Info(resultObj, methodName);
                return(new CommandReturn(true, "Consulta realizada com sucesso!", resultObj));
            }
            catch (Exception ex)
            {
                _logger.Error(ex, methodName);
                return(new CommandReturn(false, "Erro na consulta, favor tentar novamente"));
            }
        }
Exemplo n.º 4
0
        public async Task Must_Return_Success_In_GetCryptoRates_When_Informing_Ok_parameters()
        {
            //Arrange
            var param = new
            {
                fisrtCoin  = "BTC",
                secondCoin = "ETH"
            };

            var command = new GetCryptoRatesCommand(param.fisrtCoin, param.secondCoin);
            var service = new CoinService(_apiSetup.Object, _client.Object, _logger.Object);

            _apiSetup.Setup(x => x.GetCoinApiKey()).Returns("62EC2F71-A84A-4F0E-8722-E1C3BB844D88");
            _apiSetup.Setup(x => x.GetCoinApiUrl()).Returns("https://rest.coinapi.io/v1/");

            //Act
            var commandReturn = await service.GetCryptoRates(command);

            //Assert
            Assert.NotNull(commandReturn);
            Assert.True(commandReturn.Success);
        }