public IHttpActionResult SendMoneyToOthers(Money money, string toUsername, string fromUsername) { //initialize Currency usd = new Currency("USD", (decimal)1.0); Currency eur = new Currency("EUR", (decimal)1.5); Currency php = new Currency("PHP", (decimal)0.02); _currencyRepository.Save(usd); _currencyRepository.Save(eur); _currencyRepository.Save(php); // sender initialize Balance myBalance = new Balance(); myBalance.AddMoney(new Money(usd, 20)); myBalance.AddMoney(new Money(eur, 100)); // recipient initialize Balance toBalance = new Balance(); toBalance.AddMoney(new Money(usd, 0)); toBalance.AddMoney(new Money(eur, 0)); //Send Money myBalance.ChargeMoney(money); //the input parameter toBalance.AddMoney(money); _userRepository.Save(new User(fromUsername, myBalance)); _userRepository.Save(new User(toUsername, toBalance)); return(Ok()); }
public IHttpActionResult StoreAndExchangeMoney(Money moneyFrom, string username) { //initialize Currency usd = new Currency("USD", (decimal)1.0); Currency eur = new Currency("EUR", (decimal)1.5); Currency php = new Currency("PHP", (decimal)0.02); _currencyRepository.Save(usd); _currencyRepository.Save(eur); _currencyRepository.Save(php); // initialize Balance myBalance = new Balance(); myBalance.AddMoney(new Money(usd, 20)); myBalance.AddMoney(new Money(eur, 100)); myBalance.AddMoney(new Money(php, 0)); //change to PHP myBalance.Exchange(moneyFrom, php); _userRepository.Save(new User(username, myBalance)); return(Ok()); }
public IHttpActionResult GetMyBalance(string username) { //initialize Currency usd = new Currency("USD", (decimal)1.0); Currency eur = new Currency("EUR", (decimal)1.5); Currency php = new Currency("PHP", (decimal)0.02); _currencyRepository.Save(usd); _currencyRepository.Save(eur); _currencyRepository.Save(php); // initialize Balance myBalance = new Balance(); myBalance.AddMoney(new Money(usd, 20)); myBalance.AddMoney(new Money(eur, 100)); myBalance.AddMoney(new Money(php, 0)); _userRepository.Save(new User(username, myBalance)); // get balance var user = _userRepository.FindByUsername(username); var result = user.GetBalance()["php"]; return(Ok(result)); }
public void When_AddMoney_Then_ShouldReturn_ExpectedValue(decimal input1, decimal input2, decimal expected) { var balance = new Balance(); balance.AddMoney(new Money(input1, new Currency())); balance.AddMoney(new Money(input2, new Currency())); balance.Amount.ShouldBe(expected); }
public void Init() { _currencyInPeso = new Currency("Php", 1.0M); _currencyInDollar = new Currency("USD", 0.3M); _currencyInAU = new Currency("AUD", 0.4M); addedMoney1 = new Money(_currencyInPeso, 500M); addedMoney2 = new Money(_currencyInPeso, 500M); addedMoney3 = new Money(_currencyInDollar, 900); balance = new Balance(); balance.AddMoney(addedMoney1); balance.AddMoney(addedMoney2); balance.AddMoney(addedMoney3); }
public void When_Exhanging_Money() { var fixture = new Fixture(); var userId = 1; var currencyId = 1; var currencyId2 = 2; var currencyResult1 = new Currency(currencyId, "USD", (decimal)1); var currencyResult = new Currency(currencyId, "EUR", (decimal)2); var balance = new Balance(); balance.AddMoney(new Money(currencyResult, 10)); var dataResult = userRepository.Add(new User(userId, "test", balance)); var param = new ExchangeMoney() { FromCurrencyId = currencyId, ToCurrencyId = 2, Amount = 10 }; var user = _userDataManager.Setup(x => x.GetUserBalance(userId, currencyId)).Returns(dataResult); _userDataManager.Setup(x => x.GetCurrency(currencyId)).Returns(currencyResult1); _userDataManager.Setup(x => x.GetCurrency(currencyId2)).Returns(currencyResult); _userDataManager.Setup(x => x.UpdateUserBalance(dataResult)); var result = userRepository.ExchangeMoney(param, userId); Assert.IsNotNull(result); }
public async Task User_get_balance() { var userId = 1; var balance = new Balance(); balance.AddMoney(new Money(new Currency("Php", 0.45M), 500)); var user = new User("user101", balance) { Id = userId }; var iMapperMock = new Mock <IMapper>(); var userRepo = new Mock <IUserRepository>(); var currencyRepo = new Mock <IRepository <Currency> >(); userRepo.Setup(x => x.GetByIdIncludingBalanceAsync(userId)).ReturnsAsync(user); var controller = new UserController(userRepo.Object, iMapperMock.Object, currencyRepo.Object); var result = await controller.GetBalance(userId); var contentResult = result as OkObjectResult; var data = contentResult.Value as IList <GetUserBalance>; Assert.IsNotNull(result); Assert.AreEqual(StatusCodes.Status200OK, contentResult.StatusCode); Assert.IsNotNull(data); Assert.AreEqual(500, data.FirstOrDefault().Amount); }
public void When_Sending_Money() { var fixture = new Fixture(); var userId = 1; var currencyId = 1; var currencyResult = new Currency(currencyId, "USD", (decimal)1); var balance = new Balance(); balance.AddMoney(new Money(currencyResult, 10)); var user = userRepository.Add(new User(userId, "test", balance)); var param = new SendMoney() { CurrencyId = 1, ToUserId = 1, Amount = 10 }; var dataResult = _userDataManager.Setup(x => x.GetUserBalance(userId, currencyId)).Returns(user); var currency = _userDataManager.Setup(x => x.GetCurrency(currencyId)).Returns(currencyResult); _userDataManager.Setup(x => x.UpdateUserBalance(user)); var result = userRepository.SendMoney(param, userId); Assert.IsNotNull(result); Assert.AreEqual(true, result); }
public void Exhance_money_will_increment_currency_balance() { var mybalance = new Balance(); mybalance.AddMoney(addedMoney1); mybalance.AddMoney(addedMoney3); mybalance.Exchange(new Money(_currencyInPeso, 100), _currencyInDollar); moneyInBalance = mybalance.GetAllMoney(); var moneyInPeso = moneyInBalance.FirstOrDefault(c => c.Currency == _currencyInPeso).Amount; var moneyInDollar = moneyInBalance.FirstOrDefault(c => c.Currency == _currencyInDollar).Amount; Assert.IsTrue(moneyInBalance.Count > 0); Assert.AreEqual(400M, moneyInPeso); Assert.IsTrue(moneyInDollar > 900M); }
public User GetUserBalance(int userId, int currencyId) { string query = @"SELECT U.UserId,U.UserName,b.Amount,C.CurrencyId,C.Name Currency,C.Ratio FROM dbo.[User] U INNER JOIN dbo.[Balance] b ON b.UserId = U.UserId INNER JOIN dbo.[Currency] c ON c.CurrencyId = b.CurrencyId WHERE U.UserId = @UserId and b.CurrencyId = @CurrencyId"; var userBalance = new List <DataModel.UserBalance>(); using (var connection = CreateConnection()) { userBalance = connection.Query <DataModel.UserBalance>(query, new { UserId = userId, CurrencyId = currencyId }).ToList(); } var user = GetUserInfo(userId); var balance = new Balance(); if (userBalance != null && userBalance.Count() > 0) { foreach (var item in userBalance) { balance.AddMoney( new Money(new Currency(item.CurrencyId, item.Currency, item.Ratio), item.Amount)); } } return(new User(user.UserId, user.Username, balance)); }
public async Task <User> GetUserAsync(string username) { Balance balance = new Balance(); var userEntity = await _unitOfWork.RepositoryFor <EntityUser>().Get(u => u.Username == username); var userBalance = await _unitOfWork.RepositoryFor <UserBalance>().GetMany(u => u.UserId == userEntity.Id); var currencies = await _unitOfWork.RepositoryFor <Currency>().GetAll(); /* Populate balance from DB */ if (userBalance.Any()) { foreach (var item in userBalance) { var currency = currencies.SingleOrDefault(c => c.Id == item.CurrencyId); balance.AddMoney(new Money() { Currency = currency, Amount = item.Amount }); } } return(new User() { Id = userEntity.Id, Username = userEntity.Username, Balance = balance }); }
public void AddMoney_Should_Be_Added_To_Balance() { Balance balance = new Balance(); balance.AddMoney(_200Usd); var monies = balance.GetAllMonies(); monies.Should().NotBeNull(); monies.Count.Should().BeGreaterThan(0); }
public void ChargeMoney_Should_Be_Deducted_To_Balance() { Balance balance = new Balance(); balance.AddMoney(_500Php); balance.ChargeMoney(_150Php); var monies = balance.GetAllMonies(); var newPhpBalance = monies.Find(c => c.Currency == _php); newPhpBalance.Amount.Should().Be(350); }
public async Task Exhange_money_return_ok_response_when_no_error_occured() { var userId = 1; var currency = new Currency("Php", 0.45M) { Id = 1 }; var currency2 = new Currency("USD", 0.45M) { Id = 2 }; var balance = new Balance(); balance.AddMoney(new Money(currency, 500)); var user = new User("user101", balance) { Id = userId }; var user2 = new User("user102", balance) { Id = 2 }; var iMapperMock = new Mock <IMapper>(); var userRepo = new Mock <IUserRepository>(); userRepo.Setup(x => x.GetByIdIncludingBalanceAsync(userId)).ReturnsAsync(user); userRepo.Setup(x => x.GetByIdIncludingBalanceAsync(2)).ReturnsAsync(user2); userRepo.Setup(x => x.UpdateBalanceAsync(user)).ReturnsAsync(true); var currencyRepo = new Mock <IRepository <Currency> >(); currencyRepo.Setup(x => x.GetAsync(1)).ReturnsAsync(currency); currencyRepo.Setup(x => x.GetAsync(2)).ReturnsAsync(currency2); var controller = new UserController(userRepo.Object, iMapperMock.Object, currencyRepo.Object); var result = await controller.ExchangeMoney(userId, new ExchangeMoney() { FromCurrencyId = 1, Amount = 50, ToCurrencyId = 2 }); var contentResult = result as OkObjectResult; Assert.IsNotNull(result); Assert.AreEqual(StatusCodes.Status200OK, contentResult.StatusCode); }
public void ExchangeMoney_Should_Be_Converted_To_ExchangeCurrency() { Balance balance = new Balance(); balance.AddMoney(_500Php); balance.Exchange(_150Php, _usd); var monies = balance.GetAllMonies(); var newPhpBalance = monies.Find(c => c.Currency == _php); var newUsdBalance = monies.Find(c => c.Currency == _usd); newPhpBalance.Amount.Should().Be(350); newUsdBalance.Amount.Should().Be(3); }
public void ValidateMoney_Should_Block_Transaction_If_No_Enough_Money() { Balance balance = new Balance(); balance.AddMoney(_150Php); try { balance.ChargeMoney(_500Php); } catch (Exception e) { e.Message.Should().Be("Insufficient amount in balance!"); } }
public async Task Exchange_money_return_bad_response_when_validation_failed() { var userId = 1; var currency = new Currency("Php", 0.45M) { Id = 1 }; var currency2 = new Currency("USD", 0.45M) { Id = 2 }; var balance = new Balance(); balance.AddMoney(new Money(currency, 500)); var user = new User("user101", balance) { Id = userId }; var iMapperMock = new Mock <IMapper>(); var userRepo = new Mock <IUserRepository>(); userRepo.Setup(x => x.GetByIdIncludingBalanceAsync(userId)).ReturnsAsync(user); userRepo.Setup(x => x.UpdateBalanceAsync(user)).ReturnsAsync(false); var currencyRepo = new Mock <IRepository <Currency> >(); currencyRepo.Setup(x => x.GetAsync(1)).ReturnsAsync(currency); currencyRepo.Setup(x => x.GetAsync(2)).ReturnsAsync(currency2); var controller = new UserController(userRepo.Object, iMapperMock.Object, currencyRepo.Object); controller.ModelState.AddModelError("FromCurrencyId", "Required"); var errorResult = await controller.ExchangeMoney(userId, new ExchangeMoney() { FromCurrencyId = 1, Amount = 50, ToCurrencyId = 2 }); var errorContentResult = errorResult as BadRequestObjectResult; Assert.IsNotNull(errorResult); Assert.AreEqual(StatusCodes.Status400BadRequest, errorContentResult.StatusCode); }
public async Task Add_money_to_balance_return_ok_response_when_no_error_occured() { var userId = 1; var currency = new Currency("Php", 0.45M) { Id = 2 }; var balance = new Balance(); balance.AddMoney(new Money(currency, 500)); var user = new User("user101", balance) { Id = userId }; var iMapperMock = new Mock <IMapper>(); var userRepo = new Mock <IUserRepository>(); userRepo.Setup(x => x.GetByIdIncludingBalanceAsync(userId)).ReturnsAsync(user); userRepo.Setup(x => x.UpdateBalanceAsync(user)).ReturnsAsync(true); var currencyRepo = new Mock <IRepository <Currency> >(); currencyRepo.Setup(x => x.GetAsync(2)).ReturnsAsync(currency); var controller = new UserController(userRepo.Object, iMapperMock.Object, currencyRepo.Object); var errorResult = await controller.AddMoneyToBalance(userId, new AddMoneyToBalance() { CurrencyId = 2, Amount = 500 }); var errorContentResult = errorResult as OkResult; Assert.IsNotNull(errorResult); Assert.AreEqual(StatusCodes.Status200OK, errorContentResult.StatusCode); }
public async Task <User> GetByIdIncludingBalanceAsync(int id) { string sql = @"SELECT dbo.Balance.Id, dbo.Balance.UserId,dbo.[User].Username,dbo.Balance.CurrencyId, dbo.Currency.Name AS [CurrencyName], dbo.Balance.Amount, dbo.Currency.Ratio FROM dbo.Balance INNER JOIN dbo.Currency ON dbo.Balance.CurrencyId = dbo.Currency.Id INNER JOIN dbo.[User] ON dbo.Balance.UserId = dbo.[User].Id WHERE UserId=@id"; IEnumerable <GetUserBalance> result = null; var userInfo = await GetAsync(id); using (var connection = CreateConnection()) { result = await connection.QueryAsync <GetUserBalance>(sql, new { id = id }); } var balance = new Balance(); if (result != null && result.Count() > 0) { foreach (var item in result) { balance.AddMoney( new Money(new Currency(item.CurrencyName, item.Ratio) { Id = item.CurrencyId }, item.Amount)); } } return(new User(userInfo.Username, balance) { Id = id }); }
private void OnMouseDown() { balance.AddMoney(this.baseProfit); }