public void AtualizarProduto(Produto produto)
        {
            var produtoParaAtualizar = _produtosEmMemoria.First(p => p.Id == produto.Id);

            produtoParaAtualizar.Nome = produto.Nome;
            produtoParaAtualizar.QuantidadeMinima = produto.QuantidadeMinima;
        }
        protected override void DeletarProdutoNaLista(Produto produto)
        {
            var itemsToRemove = ItemDeProdutoRepository.Listar().Where(i => i.Produto.Id == produto.Id).ToList();

            foreach (var itemDeProduto in itemsToRemove)
            {
                ItemDeProdutoRepository.Remover(itemDeProduto);
            }
        }
        public void Given_A_Request_To_Create_A_Product_When_Create_Product_Then_Create_Product_With_No_Errors()
        {
            var produto = new Produto("Beterraba", 1, "");

            var produtoController = new ProdutoController(ProdutoRepository.Create(), new ProdutoService(ProdutoRepository.Create(), ItemDeProdutoRepository.Create()));

            var resultado = produtoController.Create(produto);

            Assert.IsNotNull(resultado);
        }
        public void Given_A_Valid_Product_When_Adding_To_Memory_Then_Add_Also_The_ListaDeProdutos()
        {
            var produtoRepository = ProdutoRepository.Create();
            var itemDeProdutorepository = ItemDeProdutoRepository.Create();

            var produto = new Produto("Beterraba", 1, "Kg");
            ProdutoServiceTemplate produtoService = new ProdutoService(produtoRepository, itemDeProdutorepository);

            produtoService.Criar(produto);

            Assert.IsTrue(_listaDeProdutos.RetornarTodosOsItems().Any(i => i.Produto.Nome == "Beterraba"));
        }
 private void IncrementarId(Produto produto)
 {
     if (_produtosEmMemoria.Count == 0)
     {
         produto.Id = 1;
     }
     else
     {
         var maiorId = _produtosEmMemoria.Max(p => p.Id);
         produto.Id = maiorId + 1;
     }
 }
        public ActionResult Create(Produto produtoForm)
        {
            try
            {
                var produto = new Produto(produtoForm.Nome, produtoForm.QuantidadeMinima, produtoForm.Unidade);
                _produtoServiceTemplate.Criar(produto);

                return RedirectToAction("Index", "ListaDeCompras");
            }
            catch
            {
                return View();
            }
        }
        public void CriarDummies()
        {
            var papelHigienico = new Produto("Papel Higiênico", 3, "");
            var arroz = new Produto("Arroz", 1, "Kg");
            var feijao = new Produto("Feijão", 1, "Kg");
            var batata = new Produto("Batata Inglesa", 2, "");
            var alface = new Produto("Alface", 0, "");

            AdicionarProduto(papelHigienico);
            AdicionarProduto(arroz);
            AdicionarProduto(feijao);
            AdicionarProduto(batata);
            AdicionarProduto(alface);
        }
        public ActionResult Edit(int id, Produto produto, string submitButton)
        {
            try
            {
                if (submitButton == "Deletar")
                    DeletarProduto(produto);
                else
                    EditarProduto(produto);

                return RedirectToAction("ListaDeProdutos", "ListaDeCompras");
            }
            catch
            {
                return View();
            }
        }
        public void Given_A_Valid_Product_When_Adding_To_Memory_Then_Add_Also_The_ListaDeProdutos_And_Given_A_Call_To_Delete_A_Product_When_Delete_The_Product_Then_Delete_It_Also_From_The_listaDeProdutos()
        {
            var produtoRepository = ProdutoRepository.Create();
            var itemDeProdutorepository = ItemDeProdutoRepository.Create();
            var produtoParaDeletar = Produto.CarregarProduto(5, ProdutoRepository.Create());
            var produto = new Produto("Beterraba", 1, "Kg");

            ProdutoServiceTemplate produtoService = new ProdutoService(produtoRepository, itemDeProdutorepository);

            produtoService.Deletar(produtoParaDeletar);

            Assert.IsFalse(_listaDeProdutos.RetornarTodosOsItems().Any(i => i.Produto.Id == 5));

            produtoService.Criar(produto);

            Assert.IsTrue(_listaDeProdutos.RetornarTodosOsItems().Any(i => i.Produto.Nome == "Beterraba"));
        }
 public virtual void Deletar(Produto produto)
 {
     DeletarProdutoNaLista(produto);
     DeletarProduto(produto);
 }
 public void Remover(Produto produto)
 {
     _produtosEmMemoria.Remove(produto);
 }
 public ItemDeProduto(Produto produto, int quantidade, DateTime? validade)
 {
     Produto = produto;
     Quantidade = quantidade;
     Validade = validade;
 }
 protected abstract void DeletarProdutoNaLista(Produto produto);
 protected abstract void DeletarProduto(Produto produto);
 protected override void DeletarProduto(Produto produto)
 {
     ProdutoRepository.Remover(produto);
 }
 protected override void AdicionarProduto(Produto produto)
 {
     ProdutoRepository.AdicionarProduto(produto);
 }
 private void DeletarProduto(Produto produto)
 {
     _produtoServiceTemplate.Deletar(produto);
 }
 public virtual void Criar(Produto produto)
 {
     AdicionarProduto(produto);
     AdicionarProdutoNaLista(produto);
 }
 private void EditarProduto(Produto produto)
 {
     _produtoServiceTemplate.Editar(produto);
 }
 public void Editar(Produto produto)
 {
     ProdutoRepository.AtualizarProduto(produto);
 }
 protected override void AdicionarProdutoNaLista(Produto produto)
 {
     var itemDeProduto = new ItemDeProduto(produto, 0, null);
     ItemDeProdutoRepository.Adicionar(itemDeProduto);
 }
 protected abstract void AdicionarProduto(Produto produto);
 protected abstract void AdicionarProdutoNaLista(Produto produto);
 public void AdicionarProduto(Produto produto)
 {
     IncrementarId(produto);
     _produtosEmMemoria.Add(produto);
 }