예제 #1
0
        public void Trata_comando_criacao_com_duplicacao(CriaFuncionario comando, Processador processador, Exception excecaoEsperada)
        {
            "Dado um comando de criação com nif duplicado"
            .Given(() => comando = new CriaFuncionario("Luis", "123456789", new TipoFuncionario(1, "Docente")));

            "e uma handler"
            .And(() => processador = _container.Create <Processador>());

            "e alguns mocks"
            .And(() => {
                _container.GetMock <IServicoVerificacaoDuplicacaoNif>()
                .Setup(s => s.NifDuplicado(comando.Nif, 0))
                .Returns(true);
            });

            "Quando tratamos o comando"
            .When(() => {
                try {
                    processador.Trata(comando);
                }
                catch (Exception ex) {
                    excecaoEsperada = ex;
                }
            });

            "Então obtemos uma exceção"
            .Then(() => Assert.IsAssignableFrom <InvalidOperationException>(excecaoEsperada));

            "E os mocks foram usados corretamente"
            .And(() => {
                _container.GetMock <IServicoVerificacaoDuplicacaoNif>().VerifyAll();
                _container.GetMock <ISession>().VerifyAll();
            });
        }
예제 #2
0
        public void Trata_comando_criacao_com_sucesso(CriaFuncionario comando, Processador processador, MsgGravacao msg)
        {
            const int idEsperado     = 1;
            const int versaoEsperado = 1;

            "Dado um comando de criação"
            .Given(() => comando = new CriaFuncionario("Luis", "123456789", new TipoFuncionario(1, "Docente")));

            "e uma handler"
            .And(() => processador = _container.Create <Processador>());

            "e alguns mocks"
            .And(() => {
                _container.GetMock <IServicoVerificacaoDuplicacaoNif>()
                .Setup(s => s.NifDuplicado(comando.Nif, 0))
                .Returns(false);
                var session = _container.GetMock <ISession>();
                session.Setup(s => s.Save(It.IsAny <Funcionario>()))
                .Returns(idEsperado);
                session.Setup(s => s.Flush());
            });

            "Quando tratamos o comando"
            .When(() => msg = processador.Trata(comando));

            "Então obtemos uma mensagem devidamente inicializada"
            .Then(() => Assert.NotNull(msg));

            "E os mocks foram usados corretamente"
            .And(() => {
                _container.GetMock <IServicoVerificacaoDuplicacaoNif>().VerifyAll();
                _container.GetMock <ISession>().VerifyAll();
            });
        }
예제 #3
0
        public void Cria_comando_com_versao_positiva(Action criaComando, CriaFuncionario comando)
        {
            const int versao = 1;

            "Uma operação de criação de comando com uma versão positiva"
            .Given(() => criaComando = () => comando = new CriaFuncionario("luis", "123456789", CriaFuncionarioParaTestes(), null, 1));

            "Quando tentamos executar"
            .When(() => criaComando());

            "Então obtemos o campo version inicializado"
            .Then(() => comando.Versao.Should().Be(versao));
        }
예제 #4
0
        protected Funcionario(CriaFuncionario comando)
        {
            Contract.Requires(comando != null);
            Contract.Ensures(!string.IsNullOrEmpty(_nome));
            Contract.Ensures(!string.IsNullOrEmpty(_nif));
            Contract.Ensures(_tipoFuncionario != null);
            Contract.Ensures(_contactos != null);

            _nome            = comando.Nome;
            _nif             = comando.Nif;
            _tipoFuncionario = comando.TipoFuncionario;
            _contactos       = new List <Contacto>(comando.Contactos ?? Enumerable.Empty <Contacto>());
            _versao          = comando.Versao;
        }
예제 #5
0
        public MsgGravacao Trata(CriaFuncionario comando)
        {
            if (_verificadorDuplicacaoNif.NifDuplicado(comando.Nif, 0))
            {
                throw new InvalidOperationException(Msg.Nif_duplicado);
            }
            var funcionario = Funcionario.CriaNovo(comando);

            Contract.Assert(funcionario != null, Msg.Erro_criar_funcionario_partir_comando);
            _session.Save(funcionario);
            _session.Flush();
            return(new MsgGravacao {
                Id = funcionario.Id,
                Versao = funcionario.Versao
            });
        }
        public void Cria_funcionario_a_partir_comando(CriaFuncionario comando, Funcionario funcionario)
        {
            "Quando recebemos um comando de criação"
            .Given(() => comando = new CriaFuncionario("luis", "123456789", new TipoFuncionario(1, "teste"), new[] { Contacto.CriaTelefone("123456789") }));

            "E aplicamos esse comando"
            .When(() => funcionario = Funcionario.CriaNovo(comando));

            "Então obtemos um funcionário válido"
            .Then(() => {
                Assert.NotNull(funcionario);
                funcionario.Nome.Should().Be(comando.Nome);
                funcionario.Nif.Should().Be(comando.Nif);
                funcionario.TipoFuncionario.Should().Be(comando.TipoFuncionario);
                funcionario.Contactos.Should().BeEquivalentTo(comando.Contactos);
            });
        }
        public ActionResult DadosGerais(int id, int versao, string nome, string nif, int tipoFuncionario)
        {
            var criarNovoFuncionario            = id == 0 && versao == 0;
            IEnumerable <TipoFuncionario> tipos = null;
            FuncionarioDto funcionario          = null;
            MsgGravacao    msg  = null;
            var            novo = true;

            using (var tran = _session.BeginTransaction()) {
                try {
                    tipos = _session.QueryOver <TipoFuncionario>().List <TipoFuncionario>();
                    var tipo = tipos.FirstOrDefault(t => t.Id == tipoFuncionario);
                    Contract.Assert(tipo != null, Msg.Tipo_funcionario_inexistente);

                    if (!criarNovoFuncionario)
                    {
                        var comando = new ModificaDadosGeraisFuncionario(id, versao, nome, nif, tipo);
                        msg = _processador.Trata(comando);
                    }
                    else
                    {
                        var comando = new CriaFuncionario(nome, nif, tipo);
                        msg  = _processador.Trata(comando);
                        novo = !msg.GravadaComSucesso();
                        id   = msg.Id;
                    }

                    tran.Commit();
                }
                catch (Exception ex) {
                    ModelState.AddModelError("total", ex.Message);
                }
            }
            return(View("Funcionario", new DadosFormularioFuncionario {
                Funcionario = !criarNovoFuncionario || !novo ? _session.Load <FuncionarioDto>(id) : CriaFuncionarioDtoVazio(tipos),
                Novo = criarNovoFuncionario && novo,
                TiposFuncionario = tipos
            }));
        }
예제 #8
0
 public static Funcionario CriaNovo(CriaFuncionario cmd)
 {
     Contract.Requires(cmd != null);
     return(new Funcionario(cmd));
 }
예제 #9
0
 public MsgGravacao Trata(CriaFuncionario comando)
 {
     Contract.Requires(comando != null);
     return(default(MsgGravacao));
 }