public void AoAdicionarDeveSerRedirecionadoParaTelaDeProduto()
 {
     var carroDeCompras = new CarroDeCompras();
     var result = carroDeComprasController.AdicionarItem(carroDeCompras, 1, 10);
     result.As<RedirectToRouteResult>().RouteValues["action"].Should().Be("Index");
     result.As<RedirectToRouteResult>().RouteValues["controller"].Should().Be("Produto");
 }
        public ActionResult AdicionarItem(CarroDeCompras carroDeCompras, int idProduto, int quantidade)
        {
            var produto = _produtoService.ObterTodosProdutos().First(x => x.Id == idProduto);
            carroDeCompras.AdicionarItemPedido(new ItemPedido() {Produto = produto, Quantidade = quantidade});
            TempData["Mensagem"] = "Produto adicionado com sucesso.";

            return RedirectToAction("Index", "Produto");
        }
        public void AoFinalizarACompraComItensEmEstoqueDeveSerChamadoMetodoIncluir()
        {
            var carroDeCompras = new CarroDeCompras();

            var result = carroDeComprasController.FinalizarCompra(carroDeCompras, "1");

            mockPedidoService.Verify(x => x.IncluirPedido(It.IsAny<Pedido>()), Times.Once());
        }
        public void AoAdicionarItemItemDeveSerAdicionadoNoCarrinho()
        {
            var carroDeCompras = new CarroDeCompras();
            carroDeComprasController.AdicionarItem(carroDeCompras, 1, 10);

            carroDeCompras.ItensPedido[0].Produto.Id.Should().Be(1);
            carroDeCompras.ItensPedido[0].Quantidade.Should().Be(10);
        }
        public void AoFinalizarACompraComItensNaoExistentesNoEstoqueNaoDeveSerChamadoMetodoIncluir()
        {
            var carroDeCompras = new CarroDeCompras();
            carroDeCompras.AdicionarItemPedido(new ItemPedido() { Produto = new Produto() {Id = 1, QuantidadeEmEstoque = 0}, Quantidade = int.MaxValue});

            var result = carroDeComprasController.FinalizarCompra(carroDeCompras, "1");

            mockPedidoService.Verify(x => x.IncluirPedido(It.IsAny<Pedido>()), Times.Never());
        }
        public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
        {
            var carroDeCompras = controllerContext.HttpContext.Session[CarroDeComprasSessionKey];

            if (carroDeCompras == null)
            {
                carroDeCompras = new CarroDeCompras();
                controllerContext.HttpContext.Session[CarroDeComprasSessionKey] = carroDeCompras;
            }

            return carroDeCompras;
        }
        public void AoFinalizarCompraCarrinhoDeveSerEsvaziado()
        {
            var produto = new Produto();
            var quantidade = 1;

            var carroDeCompras = new CarroDeCompras();
            carroDeCompras.AdicionarItemPedido(new ItemPedido() { Produto = produto, Quantidade = quantidade });

            carroDeCompras.FinalizarCompra(FormaPagamento.CartaoCreditoVisa);

            carroDeCompras.ItensPedido.Should().BeEmpty();
        }
        public void AoFinalizarCompraDeveSerAtualizadoEstoque()
        {
            var produto = new Produto() { QuantidadeEmEstoque = 1};
            var quantidade = produto.QuantidadeEmEstoque;

            var carroDeCompras = new CarroDeCompras();
            carroDeCompras.AdicionarItemPedido(new ItemPedido() { Produto = produto, Quantidade = quantidade });

            var pedido = carroDeCompras.FinalizarCompra(FormaPagamento.CartaoCreditoVisa);

            pedido.ItensPedido[0].Produto.QuantidadeEmEstoque.Should().Be(0);
        }
        public void CarroDeComprasPodeSerFinalizadoSeTodosOsItensDoPedidosExistemNoEstoque()
        {
            var produto = new Produto() {QuantidadeEmEstoque = 1};
            var quantidade = produto.QuantidadeEmEstoque;

            var carroDeCompras = new CarroDeCompras();
            carroDeCompras.AdicionarItemPedido(new ItemPedido() { Produto = produto, Quantidade = quantidade });

            var result = carroDeCompras.CompraPodeSerFinalizada();

            result.Should().BeTrue();
        }
        public ActionResult FinalizarCompra(CarroDeCompras carroDeCompras, string idFormaPagamento)
        {
            if (carroDeCompras.CompraPodeSerFinalizada())
            {
                var pedido = carroDeCompras.FinalizarCompra(FormaPagamento.ObterPorId(idFormaPagamento));
                _pedidoService.IncluirPedido(pedido);
                TempData["Mensagem"] = "Pedido realizado com sucesso.";
            } else
            {
                TempData["Mensagem"] = "Estoque insuficiente para sua compra.";
            }

            return RedirectToAction("Index");
        }
        public void AoFinalizarCompraDeveSerGeradoUmPedido()
        {
            var produto = new Produto();
            var quantidade = 1;

            var carroDeCompras = new CarroDeCompras();
            carroDeCompras.AdicionarItemPedido(new ItemPedido() { Produto = produto, Quantidade = quantidade});

            var pedido = carroDeCompras.FinalizarCompra(FormaPagamento.CartaoCreditoVisa);

            pedido.ItensPedido[0].Produto.Should().Be(produto);
            pedido.ItensPedido[0].Quantidade.Should().Be(quantidade);
            pedido.FormaPagamento.Id.Should().Be(FormaPagamento.CartaoCreditoVisa.Id);
        }
 public void AoAcessarActionIndexDeveSerExibidoOCarroDeCompras()
 {
     var carroDeCompras = new CarroDeCompras();
     var result = carroDeComprasController.Index(carroDeCompras);
     result.As<ViewResult>().Model.Should().BeSameAs(carroDeCompras);
 }
 public ActionResult Index(CarroDeCompras carroDeCompras)
 {
     return View(carroDeCompras);
 }
        public void InserirItemPedidoEmUmCarroDeComprasVazio()
        {
            var produto = new Produto();
            var quantidade = 1;

            var carroDeCompras = new CarroDeCompras();

            carroDeCompras.AdicionarItemPedido(new ItemPedido() { Produto = produto, Quantidade = quantidade });
            carroDeCompras.ItensPedido[0].Produto.Should().Be(produto);
            carroDeCompras.ItensPedido[0].Quantidade.Should().Be(quantidade);
        }
        public void AoFinalizarACompraDevePermanacerNaTelaIndex()
        {
            var carroDeCompras = new CarroDeCompras();

            var result = carroDeComprasController.FinalizarCompra(carroDeCompras, "1");
            result.As<RedirectToRouteResult>().RouteValues["action"].Should().Be("Index");
        }
        public void InserirItemPedidoDeUmProdutoJaExistente()
        {
            var produto = new Produto();
            var quantidade = 1;

            var carroDeCompras = new CarroDeCompras();
            carroDeCompras.AdicionarItemPedido(new ItemPedido() { Produto = produto, Quantidade = quantidade});
            carroDeCompras.AdicionarItemPedido(new ItemPedido() { Produto = produto, Quantidade = quantidade });

            carroDeCompras.ItensPedido.Count.Should().Be(1);
            carroDeCompras.ItensPedido[0].Quantidade.Should().Be(2);
        }
        public void DeveSerCapazDeItensDePedidoPeloIdDoProduto()
        {
            var produto = new Produto() { Id = 1 };

            var carroDeCompras = new CarroDeCompras();
            carroDeCompras.AdicionarItemPedido(new ItemPedido() { Produto = produto, Quantidade = 0 });

            carroDeCompras.RemoverProduto(produto.Id.ToString());

            carroDeCompras.ItensPedido.Should().BeEmpty();
        }
        public void AoRemoverItemDevePermanecerNaPaginaIndex()
        {
            var carroDeCompras = new CarroDeCompras();
            carroDeCompras.ItensPedido.Add(new ItemPedido() { Produto = new Produto(){ Id = 1}});

            var result = carroDeComprasController.RemoverProduto(carroDeCompras, "1");
            result.As<ViewResult>().ViewName.Should().Be("Index");
        }
 public ActionResult RemoverProduto(CarroDeCompras carroDeCompras, string idProduto)
 {
     carroDeCompras.RemoverProduto(idProduto);
     TempData["Mensagem"] = "Produto removido com sucesso.";
     return View("Index", carroDeCompras);
 }
 public void AoAcessarActionIndexDeveSerExibidaViewComMesmoNome()
 {
     var carroDeCompras = new CarroDeCompras();
     var result = carroDeComprasController.Index(carroDeCompras);
     result.As<ViewResult>().ViewName.Should().BeEmpty();
 }
        public void DeveSerCapazDeCalcularPrecoTotal()
        {
            var produto = new Produto() { Preco = 7.5};
            var quantidade = 2;

            var carroDeCompras = new CarroDeCompras();
            carroDeCompras.AdicionarItemPedido(new ItemPedido() { Produto = produto, Quantidade = quantidade });

            var result = carroDeCompras.CalcularPreco();
            result.Should().BeInRange(14.9, 15.1);
        }
        public void AoRemoverItemItemDeveSerRemovidoDoCarrinho()
        {
            var carroDeCompras = new CarroDeCompras();
            carroDeCompras.ItensPedido.Add(new ItemPedido() { Produto = new Produto() { Id = 1 } });

            carroDeComprasController.RemoverProduto(carroDeCompras, "1");
            carroDeCompras.ItensPedido.Should().BeEmpty();
        }