public void IncreaseBuyerStockQty_DecreaseBuyerBalance()
        {
            var tradableType = new TradableType {
                Price = 1000, Type = "TestType1"
            };
            var buyerStock = new Stock {
                Quantity = 100, TradableType = tradableType
            };
            var stockForBuy = new Stock {
                Quantity = 10, TradableType = tradableType
            };

            var trader = new Trader
            {
                Balance = 100000,
                Assets  = new List <Stock>
                {
                    new Stock(),
                    buyerStock
                }
            };

            BusinessService.Acquire(trader, stockForBuy);
            Assert.AreEqual(buyerStock.Quantity, 110);
            Assert.AreEqual(trader.Balance, 90000);
        }
        public void AddNewStockTypeToBuyer()
        {
            var tradableType = new TradableType {
                Price = 1000, Type = "TestType1"
            };
            var stockForBuy = new Stock {
                Quantity = 10, TradableType = tradableType
            };

            var trader = new Trader
            {
                Balance = 100000,
                Assets  = new List <Stock>
                {
                    new Stock(),
                    new Stock(),
                    new Stock()
                }
            };

            BusinessService.Acquire(trader, stockForBuy);
            Assert.AreEqual(trader.Assets.Count, 4);
            Assert.AreEqual(trader.Balance, 90000);
            Assert.AreEqual(trader.Assets.Single(x => x.TradableType == tradableType), stockForBuy);
        }
        public void DecreaseSellerStockQuantity_IncreaseSellerBalance()
        {
            var tradableType = new TradableType {
                Price = 1000, Type = "TestType1"
            };
            var sellerStock = new Stock {
                Quantity = 100, TradableType = tradableType
            };
            var stockForSell = new Stock {
                Quantity = 10, TradableType = tradableType
            };

            var trader = new Trader
            {
                Balance = 100000,
                Assets  = new List <Stock>
                {
                    new Stock(),
                    sellerStock
                }
            };

            BusinessService.Withdraw(trader, stockForSell);
            Received.InOrder(() => { BusinessService.UpdateEntity(sellerStock); });

            Assert.AreEqual(sellerStock.Quantity, 90);
            Assert.AreEqual(trader.Balance, 110000);
        }
        public void BuyerWithdrawStock_SelsNewOperation()
        {
            var tradableType = new TradableType {
                Price = 1000, Type = "TestType1"
            };
            var stock = new Stock {
                Quantity = 10, TradableType = tradableType
            };
            var seller = new Trader
            {
                Assets = new List <Stock>
                {
                    new Stock {
                        Quantity = 100, TradableType = tradableType
                    },
                    new Stock()
                },
                TraderInfo = new IndividualInfo {
                    SecondName = "SellerName"
                },
                Balance = 100000
            };
            var buyer = new Trader
            {
                Assets = new List <Stock>
                {
                    new Stock {
                        Quantity = 100, TradableType = tradableType
                    },
                    new Stock()
                },
                TraderInfo = new IndividualInfo {
                    SecondName = "BuyerName"
                },
                Balance = 100000
            };

            var trade = BusinessService.ProcessTrade(seller, buyer, stock);

            Received.InOrder(() =>
            {
                BusinessService.Withdraw(seller, stock);
                BusinessService.Acquire(buyer, stock);
                BusinessService.UpdateEntity(buyer);
                BusinessService.UpdateEntity(seller);
            });
            Assert.AreEqual(trade.TradableType, stock.TradableType);
            Assert.AreEqual(trade.TradableAmount, 10);
            Assert.AreEqual(trade.TradeAmount, 10000);
            Assert.AreEqual(trade.Buyer.TraderInfo.SecondName, buyer.TraderInfo.SecondName);
            Assert.AreEqual(trade.Seller.TraderInfo.SecondName, seller.TraderInfo.SecondName);
        }