public void ShouldNotBuyWhenTotalAccountIsLtTotalBalance(int totalBalance)
        {
            List <Acao> acoes = new List <Acao>()
            {
                new Acao()
                {
                    Quantity = 120, Value = 2.85M, Operation = OperationTypeEnum.Buy
                },
                new Acao()
                {
                    Quantity = 43, Value = 2.85M, Operation = OperationTypeEnum.Buy
                },
                new Acao()
                {
                    Quantity = 18, Value = 2.85M, Operation = OperationTypeEnum.Buy
                },
                new Acao()
                {
                    Quantity = 25, Value = 2.85M, Operation = OperationTypeEnum.Buy
                },
                new Acao()
                {
                    Quantity = 32, Value = 2.85M, Operation = OperationTypeEnum.Buy
                },
                new Acao()
                {
                    Quantity = 44, Value = 2.85M, Operation = OperationTypeEnum.Buy
                },
            };

            var     context = MockStockContext.GenerateContext(InternalUserId, totalBalance, acoes);
            var     user    = context.Users.FirstOrDefault(f => f.Id == InternalUserId);
            decimal total   = context.Operations.Where(f => f.OperationType == OperationTypeEnum.Buy).ToList().Sum(f => f.TotalValue);

            _mockUserService.Setup(f => f.CanBuy(It.IsAny <User>(), total)).Returns(false);
            var canBuy = _mockUserService.Object.CanBuy(user, total);

            var verif  = new Mock <IUserService>().Object;
            var result = verif.CanBuy(user, total);

            Assert.IsFalse(result);
            Assert.AreEqual(canBuy, result);
        }
        public void ShouldHaveBuyWhenTotalAccountIs2000([Values(2.85, 12.45, 2.95)] decimal preco, [Range(120, 120, 120)] int qte)
        {
            var context        = MockStockContext.GenerateContext(InternalUserId, 2000);
            var firstOperation = context.Operations.FirstOrDefault();

            firstOperation.CurrentPrice = preco;
            firstOperation.Quantity     = qte;

            var     user  = context.Users.FirstOrDefault(f => f.Id == InternalUserId);
            decimal total = context.Operations.Where(f => f.OperationType == OperationTypeEnum.Buy).ToList().Sum(f => f.TotalValue);

            _mockUserService.Setup(f => f.CanBuy(It.IsAny <User>(), total)).Returns(true);
            var canBuy = _mockUserService.Object.CanBuy(user, total);

            var result = service.CanBuy(user, total);

            Assert.IsTrue(result);
            Assert.AreEqual(canBuy, result);
        }
        public void ShouldNotSellWhenHaveMinusTradesThanRequested()
        {
            List <Acao> acoes = new List <Acao>()
            {
                new Acao()
                {
                    Quantity = 120, Value = 2.85M, Operation = OperationTypeEnum.Sell
                },
                new Acao()
                {
                    Quantity = 43, Value = 2.85M, Operation = OperationTypeEnum.Sell
                },
                new Acao()
                {
                    Quantity = 18, Value = 2.85M, Operation = OperationTypeEnum.Sell
                },
                new Acao()
                {
                    Quantity = 25, Value = 2.85M, Operation = OperationTypeEnum.Sell
                },
                new Acao()
                {
                    Quantity = 32, Value = 2.85M, Operation = OperationTypeEnum.Sell
                },
                new Acao()
                {
                    Quantity = 44, Value = 2.85M, Operation = OperationTypeEnum.Sell
                },
            };

            int quantity = 200;
            var context  = MockStockContext.GenerateContext(InternalUserId, 2000);
            var user     = context.Users.FirstOrDefault(f => f.Id == InternalUserId);

            _mockUserService.Setup(f => f.CanSell(It.IsAny <User>(), It.IsAny <string>(), quantity)).Returns(false);

            var canBuy = _mockUserService.Object.CanSell(user, "VAL3", quantity);
            var result = service.CanSell(user, "VAL3", quantity);

            Assert.IsFalse(result);
            Assert.AreEqual(canBuy, result);
        }