예제 #1
0
        public async Task WhenExchangingMoneyAndReturnIsNullOrError_ThenThrowArgumentException()
        {
            //Arrange
            var fixture      = new Fixture();
            var fromCurrency = new Currency()
            {
                Id = 1, Name = "USD", Ratio = 1
            };
            var toCurrency = new Currency()
            {
                Id = 2, Name = "PHP", Ratio = 50
            };
            var money = new Money()
            {
                Currency = fromCurrency, Amount = 100
            };
            var user    = fixture.Create <User>();
            var request = new ExchangeMoneyRequest()
            {
                Username       = user.Username,
                FromCurrencyId = fromCurrency.Id,
                ToCurrencyId   = toCurrency.Id,
                Amount         = 10
            };

            user.Balance.AddMoney(money);

            _currencyServiceMock.Setup(x => x.GetCurrencyAsync(fromCurrency.Id)).ReturnsAsync(fromCurrency);
            _currencyServiceMock.Setup(x => x.GetCurrencyAsync(toCurrency.Id)).ReturnsAsync(toCurrency);
            _userServiceMock.Setup(x => x.GetUserAsync(user.Username)).ReturnsAsync(user);
            _userServiceMock.Setup(x => x.UpdateUserBalance(user)).ReturnsAsync(user);

            //Action
            var target = new MoneyController(_currencyServiceMock.Object, _userServiceMock.Object);
            var result = await target.Exchange(request);

            //Assert
            var objectResult = result.As <ObjectResult>();

            objectResult.Should().NotBeNull();
            objectResult.StatusCode.Should().Be(StatusCodes.Status200OK);
        }
예제 #2
0
        public async Task <IActionResult> Exchange([FromBody] ExchangeMoneyRequest request)
        {
            try
            {
                var fromCurrency = await _currencyService.GetCurrencyAsync(request.FromCurrencyId);

                var toCurrency = await _currencyService.GetCurrencyAsync(request.ToCurrencyId);

                var money = new Money()
                {
                    Currency = fromCurrency, Amount = request.Amount
                };
                var user = await _userService.GetUserAsync(request.Username);

                user.Balance.Exchange(money, toCurrency);
                var result = await _userService.UpdateUserBalance(user);

                return(Ok(result.Balance.GetAllMonies()));
            }
            catch (Exception e)
            {
                return(StatusCode(StatusCodes.Status500InternalServerError, e.Message));
            }
        }