public void ShouldWriteHistoryOfSuccessfulTransactions() { //Arrange TransactionArguments args = new TransactionArguments(); args.SellerId = 1; args.BuyerId = 2; args.SharesId = 1; args.Quantity = 5; //Act transactionService.MakeTransaction(args); //Assert transactionHistoryTableRepository.Received(1).Add(Arg.Is <TransactionHistoryEntity>(s => s.Seller == clientTableRepository.GetById(args.SellerId) && s.Buyer == clientTableRepository.GetById(args.BuyerId) && s.SelledItem == sharesTableRepository.GetById(args.SharesId) && s.Quantity == args.Quantity && s.Total == sharesTableRepository.GetById(args.SharesId).Price *args.Quantity)); transactionHistoryTableRepository.Received(1).SaveChanges(); }
private void ValidateTransaction(TransactionArguments args) { if (args.Quantity <= 0) { throw new ArgumentException($"Wrong quantity : {args.Quantity}"); } if (!clientTableRepository.ContainsById(args.SellerId)) { throw new ArgumentException($"Client with Id {args.SellerId} doesn't exist"); } if (!clientTableRepository.ContainsById(args.BuyerId)) { throw new ArgumentException($"Client with Id {args.BuyerId} doesn't exist"); } if (!sharesTableRepository.ContainsById(args.SharesId)) { throw new ArgumentException($"Shares with Id {args.SharesId} don't exist"); } var buyer = clientTableRepository.GetById(args.BuyerId); if (buyer.Balance <= 0) { throw new ArgumentException(string.Format($"Buyer is in the {0} zone", buyer.Balance < 0 ? "Black" : "Orange")); } var seller = clientTableRepository.GetById(args.SellerId); foreach (var item in seller.Portfolio) { if (item.Shares.Id == args.SharesId && item.Quantity >= args.Quantity) { return; } } throw new ArgumentException($"Not enough shares to sell"); }