public async Task ReturnSuccessfulCurrencyResponseOnConversionForUsdToEur()
        {
            var currencyRequest = new CurrencyRequest
            {
                Amount         = 24,
                SourceCurrency = "USD",
                TargetCurrency = "EUR"
            };

            var currencyExchangeResponse = new CurrencyExchangeResponse
            {
                Base            = currencyRequest.SourceCurrency,
                Date            = DateTime.Now,
                TimeLastUpdated = DateTime.Now.Ticks,
                Rates           = new Dictionary <string, decimal>
                {
                    { "GBP", 0.722077M },
                    { "EUR", 0.844712M },
                    { "USD", 1 }
                }
            };

            _exchangeRateServiceMock.Setup(x => x.GetExchangeRatesAsync(currencyRequest.SourceCurrency))
            .Returns(Task.FromResult(currencyExchangeResponse));

            var response = await currencyConversionService.ConvertAsync(currencyRequest);

            response.Should().NotBeNull();
            response.ConvertedAmount.Should().Be(20.16M);
            response.TargetCurrency.Should().Be("EUR");
        }
        public async Task ReturnSuccessfulConversionOnLowerCaseCurrencies()
        {
            var currencyRequest = new CurrencyRequest
            {
                Amount         = 24,
                SourceCurrency = "gbp",
                TargetCurrency = "eur"
            };

            var currencyExchangeResponse = new CurrencyExchangeResponse
            {
                Base            = currencyRequest.SourceCurrency,
                Date            = DateTime.Now,
                TimeLastUpdated = DateTime.Now.Ticks,
                Rates           = new Dictionary <string, decimal>
                {
                    { "GBP", 1 },
                    { "EUR", 1.168852M },
                    { "USD", 1.384935M }
                }
            };

            _exchangeRateServiceMock.Setup(x => x.GetExchangeRatesAsync(currencyRequest.SourceCurrency.ToUpper()))
            .Returns(Task.FromResult(currencyExchangeResponse));

            var response = await currencyConversionService.ConvertAsync(currencyRequest);

            response.Should().NotBeNull();
            response.ConvertedAmount.Should().Be(28.08M);
            response.TargetCurrency.Should().Be("EUR");
        }
        public HttpResponseMessage GetCurrencyExchange([FromUri] string source = "", string target = "")
        {
            var query = _currencyService.GetCurrencyExchange(source, target);

            if (query.ModelState.HttpStatusCode != HttpStatusCode.OK)
            {
                return(ResponseHelper.HttpResponseMessage(this, new StandardResponse(), query.ModelState));
            }

            var response = new CurrencyExchangeResponse
            {
                CurrencyExchange =
                {
                    Source = query.SourceCurrency,
                    Target = query.TargetCurrency,
                    Rate   = query.Rate
                }
            };

            return(ResponseHelper.HttpResponseMessage(this, response, query.ModelState));
        }