public async Task <ResponseDTO> RegisterExchangeRate(RegisterExchangeRateRequest request) { if (request.Target == request.Base) { return(ResponseDTO.Fail("Base and target currency can't be the same.")); } var baseCurrency = await _context.CurrencySymbols.AsNoTracking() .FirstOrDefaultAsync(x => x.Symbol == request.Base); var targetCurrency = await _context.CurrencySymbols.AsNoTracking() .FirstOrDefaultAsync(x => x.Symbol == request.Target); var currencyExistAndIsEnabled = CurrencyExistAndIsEnabled(baseCurrency, request.Base); if (!currencyExistAndIsEnabled) { return(currencyExistAndIsEnabled); } var targetCurrencyExist = CurrencyExistAndIsEnabled(targetCurrency, request.Target); if (!targetCurrencyExist) { return(targetCurrencyExist); } var exchangeRate = new Domain.ExchangeRate(request.Base, request.Target, request.Rate); _context.ExchangeRates.Add(exchangeRate); await _context.SaveChangesAsync(); return(ResponseDTO.Ok()); }
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 async Task <IActionResult> Post([FromBody] RegisterExchangeRateRequest request) { var response = await _exchangeRateWriteService.RegisterExchangeRate(request); if (response.Success) { return(Ok()); } return(BadRequest(response)); }
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); }