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 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 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 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 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 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 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 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 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();
        }