public async Task RegisterExchangeRateReturnsSuccessFalseGivenTargetCurrencyIsDisabled()
        {
            //Arrange
            var context = CreateEmptyContext();

            context.CurrencySymbols.Add(new CurrencySymbol("USD")
            {
                Enabled = true
            });
            context.CurrencySymbols.Add(new CurrencySymbol("EUR")
            {
                Enabled = false
            });
            await context.SaveChangesAsync();

            var appService = new ExchangeRateWriteService(context);
            var request    = new RegisterExchangeRateRequest()
            {
                Base = "USD", Rate = 1.1m, Target = "EUR", UserId = "fake"
            };

            //Act
            var response = await appService.RegisterExchangeRate(request);

            //Assert
            Assert.IsNotNull(response);
            Assert.IsFalse(response.Success);
        }
        public async Task RegisterExchangeRateReturnsSuccessTrueGivenValidRequest()
        {
            //Arrange
            const string  baseCurrency   = "USD";
            const string  targetCurrency = "EUR";
            const decimal rate           = 1.1m;
            var           context        = CreateEmptyContext();

            context.CurrencySymbols.Add(new CurrencySymbol(baseCurrency));
            context.CurrencySymbols.Add(new CurrencySymbol(targetCurrency));
            await context.SaveChangesAsync();

            var appService = new ExchangeRateWriteService(context);
            var request    = new RegisterExchangeRateRequest()
            {
                Base = baseCurrency, Rate = rate, Target = targetCurrency, UserId = "fake"
            };

            //Act
            var response = await appService.RegisterExchangeRate(request);

            var exchangeRate = await context.ExchangeRates
                               .FirstAsync(x => x.BaseSymbol == baseCurrency && x.TargetSymbol == targetCurrency);

            //Assert
            Assert.IsNotNull(response);
            Assert.IsTrue(response.Success);
            Assert.IsNotNull(exchangeRate);
            Assert.AreEqual(rate, exchangeRate.Rate);
        }
 public ExchangeRateController(
     ExchangeRateReadingService exchangeRateReadingService,
     ExchangeRateWriteService exchangeRateWriteService)
 {
     _exchangeRateReadingService = exchangeRateReadingService;
     _exchangeRateWriteService   = exchangeRateWriteService;
 }
        public async Task RegisterExchangeRateReturnsSuccessFalseGivenBaseCurrencyDoesntExist()
        {
            //Arrange
            var context    = CreateEmptyContext();
            var request    = new RegisterExchangeRateRequest();
            var appService = new ExchangeRateWriteService(context);
            //Act
            var response = await appService.RegisterExchangeRate(request);

            //Assert
            Assert.IsNotNull(response);
            Assert.IsFalse(response.Success);
        }