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)); }
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); }
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")); } }
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); }