Example #1
0
        public async Task Sell_ReturnTradeCreated()
        {
            IQueryable <Trade> trades = new List <Trade>
            {
                new Trade
                {
                    Action      = "BUY",
                    NoOfShares  = 10,
                    PortfolioId = 1,
                    Symbol      = "SIM",
                    Price       = 10.00M
                },
                new Trade
                {
                    Action      = "SELL",
                    NoOfShares  = 3,
                    PortfolioId = 1,
                    Symbol      = "SIM",
                    Price       = 12.00M
                }
            }.AsQueryable();

            Func <HourlyShareRate> func = () =>
            {
                return(new HourlyShareRate
                {
                    Rate = 20.00M
                });
            };

            TradeModel model = new TradeModel
            {
                Action      = "SELL",
                NoOfShares  = 4,
                PortfolioId = 1,
                Symbol      = "SIM"
            };

            // Arrange

            _exchangeContext.Setup(p => p.Set <Trade>().Add(It.IsAny <Trade>()));
            _exchangeContext.Setup(p => p.SaveChangesAsync(It.IsAny <CancellationToken>())).ReturnsAsync(1);

            _dbSetTrade.As <IQueryable <Trade> >().Setup(m => m.Provider).Returns(trades.Provider);
            _dbSetTrade.As <IQueryable <Trade> >().Setup(m => m.Expression).Returns(trades.Expression);
            _dbSetTrade.As <IQueryable <Trade> >().Setup(m => m.ElementType).Returns(trades.ElementType);
            _dbSetTrade.As <IQueryable <Trade> >().Setup(m => m.GetEnumerator()).Returns(trades.GetEnumerator());

            _exchangeContext.Setup(p => p.Trades).Returns(_dbSetTrade.Object);
            // Act
            Trade trade = await _tradeRepository.Sell(model, func);

            // Assert
            Assert.NotNull(trade);
            Assert.AreEqual(trade.Symbol, model.Symbol);
            Assert.AreEqual(trade.PortfolioId, model.PortfolioId);
            Assert.AreEqual(trade.NoOfShares, model.NoOfShares);
            Assert.AreEqual(trade.Price, 20.00M);
        }