public void Nome_Senha_Email_Sao_Obrigatorios()
        {
            var gerenteUsuarios = new GerenteUsuarios(ctx);
            try
            {
                gerenteUsuarios.CriarNovoUsuario("", "", "");
                Assert.Fail("Deveria ter falhado");
            }
            catch (RegrasDeNegocioException rne)
            {
                var msg1 = rne.Erros.Where(x => x.Mensagem.Contains("Nome do usuário")).FirstOrDefault();
                var msg2 = rne.Erros.Where(x => x.Mensagem.Contains("Senha do usuário")).FirstOrDefault();
                var msg3 = rne.Erros.Where(x => x.Mensagem.Contains("Email do usuário")).FirstOrDefault();

                Assert.IsNotNull(msg1);
                Assert.IsNotNull(msg2);
                Assert.IsNotNull(msg3);
            }
        }
        public void Seu_Email_Deve_Ser_Unico()
        {
            var emailJaExistente = "*****@*****.**";
            var gerenteUsuarios = new GerenteUsuarios(ctx);

            try
            {
                var usuariaParaEditar = ctx.Usuarios.Single(u => u.Id == 2);
                usuariaParaEditar.Email = emailJaExistente;

                gerenteUsuarios.ValidarAlterarUsuario(usuariaParaEditar);

                Assert.Fail("Deveria ter falhado");
            }
            catch (RegrasDeNegocioException rne)
            {
                var msg = rne.Erros.Where(x => x.Mensagem.Contains("já existe")).FirstOrDefault();
                Assert.IsNotNull(msg);
            }
        }
        public ActionResult Cadastro(UsuarioVM usuario)
        {
            using (IVIADbContext contexto = new IVIADbContext())
            {
                GerenteUsuarios gerenteUsuario = new GerenteUsuarios(contexto);
                try
                {
                    Usuario entidadeUsuario = gerenteUsuario.CriarNovoUsuario(usuario.Nome, usuario.Senha, usuario.Email);
                    contexto.Usuarios.Add(entidadeUsuario);
                    contexto.SaveChanges();
                    RedirectToAction("Index");
                }
                catch (RegrasDeNegocioException ex)
                {
                    ex.CopiarPara(ModelState);
                    usuario.Mensagem = "Erro!";
                }
            }

            return View(usuario);
        }
        public ActionResult Editar(UsuarioVM vm)
        {
            using (IVIADbContext contexto = new IVIADbContext())
            {
                GerenteUsuarios gerente = new GerenteUsuarios(contexto);
                Usuario usuario = new Usuario();
                usuario.Id = vm.Id;
                usuario.Nome = vm.Nome;
                usuario.Email = vm.Email;
                usuario.Senha = vm.Senha;

                try
                {
                    gerente.ValidarAlterarUsuario(usuario);

                    contexto.Entry<Usuario>(usuario).State = System.Data.EntityState.Modified;
                    contexto.SaveChanges();

                    RedirectToAction("Index");
                }
                catch (RegrasDeNegocioException ex)
                {
                    ex.CopiarPara(ModelState);
                    vm.Mensagem = "Erro";

                }
                return View(vm);
            }
        }
        public void Seu_Email_Deve_Ser_Unico()
        {
            var emailJaExistente = "*****@*****.**";
            var gerenteUsuarios = new GerenteUsuarios(ctx);

            try
            {
                gerenteUsuarios.CriarNovoUsuario("aa","123",emailJaExistente);
                Assert.Fail("Deveria ter falhado");
            }
            catch (RegrasDeNegocioException rne)
            {
                var msg = rne.Erros.Where(x => x.Mensagem.Contains("já existe")).FirstOrDefault();
                Assert.IsNotNull(msg);
            }
        }
        public void Seu_Email_Deve_Estar_Em_Formato_Valido()
        {
            var emailinvalido = "junior.com.br";
            var gerenteUsuarios = new GerenteUsuarios(ctx);

            try
            {
                gerenteUsuarios.CriarNovoUsuario("aa","123",emailinvalido);
                Assert.Fail("Deveria ter falhado");
            }
            catch (RegrasDeNegocioException rne)
            {
                var msg = rne.Erros.Where(x => x.Mensagem.Contains("Email inválido")).FirstOrDefault();
                Assert.IsNotNull(msg);
            }
        }