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 })); }
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()); }
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(); }); }