public void SeInserirEmpresaComandoForNuloManipularDeveAdicionarNotificacao()
        {
            EmpresaComandoManipulador manipulador = new EmpresaComandoManipulador(empresaRepositorio.Object, usuarioEmpresaRepositorio.Object, empresaComandoMap.Object, emailService.Object);

            Assert.IsNull(manipulador.Manipular(null as InserirEmpresaComando));
            Assert.AreNotEqual(0, manipulador.Notifications.Count);

            empresaComandoMap.Verify(x => x.CriarEmpresa(null), Times.Never);
            empresaRepositorio.Verify(x => x.Adicionar(null), Times.Never);
            usuarioEmpresaRepositorio.Verify(x => x.Adicionar(null), Times.Never);
        }
        public void QuandoTodosOsDadosDaEmpreaEDoUsuarioEstiveremCorretosNoInserirEmpresaComandoManipuladorDeveRetornarInserirEmpresaResultadoComando()
        {
            empresaComandoMap.Setup(x => x.CriarEmpresa(inserirEmpresaComandoValido)).Returns(empresaValida);
            empresaComandoMap.Setup(x => x.CriarUsuario(inserirEmpresaComandoValido, empresaValida)).Returns(usuarioValido);

            EmpresaComandoManipulador manipulador = new EmpresaComandoManipulador(empresaRepositorio.Object, usuarioEmpresaRepositorio.Object, empresaComandoMap.Object, emailService.Object);

            InserirEmpresaResultadoComando resultado = manipulador.Manipular(inserirEmpresaComandoValido) as InserirEmpresaResultadoComando;

            Assert.AreEqual(0, manipulador.Notifications.Count);
            Assert.AreEqual(empresaValida.Id, resultado.EmpresaId);

            empresaRepositorio.Verify(x => x.Adicionar(empresaValida), Times.Once);
            usuarioEmpresaRepositorio.Verify(x => x.Adicionar(usuarioValido), Times.Once);

            emailService.Verify(x => x.Enviar(usuarioValido.Nome.nome,
                                              usuarioValido.Email.EnderecoEmail,
                                              string.Format(EmailTemplates.NovoUsuarioEmpresaAssunto, usuarioValido.Nome.nome),
                                              string.Format(EmailTemplates.NovoUsuarioEmpresaCorpo, usuarioValido.Nome.nome, usuarioValido.Email.EnderecoEmail, empresaValida.NomeEmpresa.nome)), Times.Once);
        }
        public void SeJaExistirUsuarioParaEmailInformadoNoInserirEmpresaComandoManipularDeveAdicionarNotificacao()
        {
            usuarioEmpresaRepositorio.Setup(u => u.VerificarSeUsuarioExistePorEmail(inserirEmpresaComandoValido.email)).Returns(true);
            empresaComandoMap.Setup(x => x.CriarEmpresa(inserirEmpresaComandoValido)).Returns(empresaValida);
            empresaComandoMap.Setup(x => x.CriarUsuario(inserirEmpresaComandoValido, empresaValida)).Returns(usuarioValido);

            EmpresaComandoManipulador manipulador = new EmpresaComandoManipulador(empresaRepositorio.Object, usuarioEmpresaRepositorio.Object, empresaComandoMap.Object, emailService.Object);


            Assert.IsNull(manipulador.Manipular(inserirEmpresaComandoValido));
            Assert.AreNotEqual(0, manipulador.Notifications.Count);

            usuarioEmpresaRepositorio.Verify(v => v.VerificarSeUsuarioExistePorEmail(inserirEmpresaComandoValido.email), Times.Once);
            empresaComandoMap.Verify(v => v.CriarEmpresa(inserirEmpresaComandoValido), Times.Never);
            empresaRepositorio.Verify(x => x.Adicionar(empresaValida), Times.Never);
            usuarioEmpresaRepositorio.Verify(x => x.Adicionar(usuarioValido), Times.Never);

            emailService.Verify(x => x.Enviar(usuarioValido.Nome.nome,
                                              usuarioValido.Email.EnderecoEmail,
                                              string.Format(EmailTemplates.NovoUsuarioEmpresaAssunto, usuarioValido.Nome.nome),
                                              string.Format(EmailTemplates.NovoUsuarioEmpresaCorpo, usuarioValido.Nome.nome, usuarioValido.Email.EnderecoEmail, empresaValida.NomeEmpresa.nome)), Times.Never);
        }
        public void QuandoOsDadosDaEmpresaForemInvalidosNoInserirEmpresaComandoManipularDeveRetornarNotificacao()
        {
            var empresaInvalida = new Empresa(new Nome(inserirComandoEmpresaInvalida.NomeEmpresa), new Texto(inserirComandoEmpresaInvalida.Descricao), new Nome(inserirComandoEmpresaInvalida.Cidade), "", new Site(inserirComandoEmpresaInvalida.site));
            var usuario         = new UsuarioEmpresa(empresaInvalida, new Nome(inserirEmpresaComandoValido.nomeUsuario), new Email(inserirEmpresaComandoValido.email), inserirEmpresaComandoValido.senha, inserirEmpresaComandoValido.confirmacaoSenha);

            empresaComandoMap.Setup(x => x.CriarEmpresa(inserirComandoEmpresaInvalida)).Returns(empresaInvalida);
            empresaComandoMap.Setup(x => x.CriarUsuario(inserirComandoEmpresaInvalida, empresaInvalida)).Returns(usuario);

            EmpresaComandoManipulador manipulador = new EmpresaComandoManipulador(empresaRepositorio.Object, usuarioEmpresaRepositorio.Object, empresaComandoMap.Object, emailService.Object);

            Assert.IsNull(manipulador.Manipular(inserirComandoEmpresaInvalida));
            Assert.AreNotEqual(0, manipulador.Notifications.Count);
            empresaComandoMap.Verify(x => x.CriarEmpresa(inserirComandoEmpresaInvalida), Times.Once);
            empresaComandoMap.Verify(x => x.CriarUsuario(inserirComandoEmpresaInvalida, empresaInvalida), Times.Once);
            empresaRepositorio.Verify(x => x.Adicionar(empresaInvalida), Times.Never);
            usuarioEmpresaRepositorio.Verify(x => x.Adicionar(usuario), Times.Never);

            emailService.Verify(x => x.Enviar(usuario.Nome.nome,
                                              usuario.Email.EnderecoEmail,
                                              string.Format(EmailTemplates.NovoUsuarioEmpresaAssunto, usuario.Nome.nome),
                                              string.Format(EmailTemplates.NovoUsuarioEmpresaCorpo, usuario.Nome.nome, usuario.Email.EnderecoEmail, empresaInvalida.NomeEmpresa.nome)), Times.Never);
        }
 public EmpresaControlador(EmpresaComandoManipulador empresaManipulador, IUnitOfWork UnitOfWork) : base(UnitOfWork)
 {
     _empresaManipulador = empresaManipulador;
 }