public void ShouldAddNewTransaction() { var transactionTableRepository = Substitute.For <ITransactionTableRepository>(); TransactionServices transService = new TransactionServices(transactionTableRepository); TransactionStoryInfo args = new TransactionStoryInfo() { sellerId = 1, customerId = 2, shareId = 1, AmountOfShares = 10, DateTime = DateTime.Now, TransactionCost = 5000 }; int transactId = transService.AddNewTransaction(args); transactionTableRepository.Received(1).Add(Arg.Is <TransactionStoryEntity>( u => u.SellerId == args.sellerId && u.CustomerId == args.customerId && u.ShareId == args.shareId && u.AmountOfShares == args.AmountOfShares && u.DateTime == args.DateTime && u.TransactionCost == args.TransactionCost)); transactionTableRepository.Received(1).SaveChanges(); }
public void AddShareInPortfolio(TransactionStoryInfo args) { try { this.transaction.AddShareInPortfolio(args); } catch (ArgumentException ex) { Logger.Log.Error(ex.Message); throw ex; } }
public void StartTrading() { Random random = new Random(); var seller = usersService.GetSeller(random.Next(1, userRepo.Count())); var customer = usersService.GetCustomer(random.Next(1, userRepo.Count()), seller.Id); if (seller == null || customer == null) //тут проблема что исключение обрабатывается в прокси, а сам прокси в таком случае кидает null, знаю что костыль { return; } var sellerPortfolioForTrade = seller.UsersShares.ToList()[random.Next(0, seller.UsersShares.Count())]; var amountSharesForTrade = random.Next(1, sellerPortfolioForTrade.Amount / 5); var shareForTrade = sellerPortfolioForTrade.Share; decimal CostOfTransaction = amountSharesForTrade * shareForTrade.Price; usersService.ChangeUserBalance(seller.Id, CostOfTransaction); usersService.ChangeUserBalance(customer.Id, CostOfTransaction * -1); PortfolioEntity customerPortfolio; if ((customerPortfolio = customer.UsersShares.Where(us => us.ShareId == shareForTrade.Id).FirstOrDefault()) == null) { PortfolioInfo customerPortfolioToAdd = new PortfolioInfo() { UserId = customer.Id, ShareId = shareForTrade.Id, Amount = amountSharesForTrade }; portfolioService.AddNewUsersShares(customerPortfolioToAdd); } else { portfolioService.ChangeAmountOfShares(customerPortfolio, amountSharesForTrade); } portfolioService.ChangeAmountOfShares(sellerPortfolioForTrade, amountSharesForTrade * -1); TransactionStoryInfo transactionOperation = new TransactionStoryInfo() { customerId = customer.Id, sellerId = seller.Id, shareId = shareForTrade.Id, Share = shareForTrade, AmountOfShares = amountSharesForTrade, DateTime = DateTime.Now, TransactionCost = CostOfTransaction }; transaction.AddNewTransaction(transactionOperation); }
public int AddNewTransaction(TransactionStoryInfo args) { var TransToAdd = new TransactionStoryEntity() { AmountOfShares = args.AmountOfShares, CustomerId = args.customerId, SellerId = args.sellerId, ShareId = args.shareId, DateTime = args.DateTime, TransactionCost = args.TransactionCost, Share = args.Share }; repo.Add(TransToAdd); repo.SaveChanges(); return(TransToAdd.Id); }
public void AddShareInPortfolio(TransactionStoryInfo args) { var customer = usersService.GetUserById(args.customerId); var seller = usersService.GetUserById(args.sellerId); if (seller == null || customer == null) //тут залогировано все в прокси, но сами прокси возращают null { throw new ArgumentException("ОШИБКА ТРАНЗАКЦИИ: Неверный клиенты"); } if (seller.UsersShares.Where(us => us.ShareId == args.shareId).FirstOrDefault() == null) { throw new ArgumentException($"ОШИБКА ТРАНЗАКЦИИ: Акция с id {args.shareId} не существует"); } var customerPortfolio = customer.UsersShares.Where(us => us.ShareId == args.shareId).FirstOrDefault(); try { portfolio.ChangeAmountOfShares(seller.UsersShares.Where(us => us.ShareId == args.shareId).FirstOrDefault(), args.AmountOfShares * -1); } catch (ArgumentException ex) { throw ex; } if (customerPortfolio == null) { portfolio.AddNewUsersShares(new PortfolioInfo() { UserId = args.customerId, ShareId = args.shareId, Amount = args.AmountOfShares }); } else { portfolio.ChangeAmountOfShares(customerPortfolio, args.AmountOfShares); } usersService.ChangeUserBalance(args.customerId, args.TransactionCost * -1); // в данной программе нет ограничения на минусовой баланс usersService.ChangeUserBalance(args.sellerId, args.TransactionCost); }
public int AddNewTransaction(TransactionStoryInfo args) { return(this.transaction.AddNewTransaction(args)); }