public ActionResult AdicionaContacto(int id, int versao, string contacto)
        {
            IEnumerable <TipoFuncionario> tipos = null;
            MsgGravacao msg = null;

            using (var tran = _session.BeginTransaction()) {
                try {
                    tipos = _session.QueryOver <TipoFuncionario>().List <TipoFuncionario>();
                    var ct = Contacto.Parses(contacto);
                    Contract.Assert(ct != null, Msg.Contacto_invalido);
                    var cmd = new ModificaContactosFuncionario(id, versao, null, new[] { ct });

                    msg = _processador.Trata(cmd);
                    tran.Commit();
                }
                catch (Exception ex) {
                    ModelState.AddModelError("total", ex.Message);
                }
            }
            return(View("Funcionario", new DadosFormularioFuncionario {
                Funcionario = _session.Load <FuncionarioDto>(id),
                Novo = false,
                TiposFuncionario = tipos
            }));
        }
 public static bool GravadaComSucesso(this MsgGravacao msg)
 {
     if (msg == null)
     {
         throw new NullReferenceException();
     }
     return(msg.Id > 0 && msg.Versao > 0);
 }
        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
            }));
        }
Example #4
0
        public void Trata_comando_alteracao_contactos_com_sucesso(ModificaContactosFuncionario comando, Funcionario funcionario, Processador processador, MsgGravacao msg)
        {
            "Dado um comando de ateração de contactos"
            .Given(() => comando = new ModificaContactosFuncionario(0, 0, null, new[] { Contacto.CriaExtensao("1234") }));

            "um funcionário"
            .And(() => funcionario = Funcionario.CriaNovo(new CriaFuncionario("Luis", "123456789", new TipoFuncionario(1, "Docente"))));

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

            "E alguns mocks"
            .And(() => {
                var session = _container.GetMock <ISession>();
                session.Setup(s => s.Load <Funcionario>(comando.Id))
                .Returns(funcionario);
                session.Setup(s => s.Update(funcionario));
                session.Setup(s => s.Flush());
            });

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

            "Então obtemos uma mensagem com informação"
            .Then(() => msg.Id.Should().Be(comando.Id));

            "E os mocks foram usados"
            .And(() => _container.GetMock <ISession>().VerifyAll());
        }
Example #5
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();
            });
        }