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(); }); }
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(); }); }
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)); }
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; }
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 })); }
public static Funcionario CriaNovo(CriaFuncionario cmd) { Contract.Requires(cmd != null); return(new Funcionario(cmd)); }
public MsgGravacao Trata(CriaFuncionario comando) { Contract.Requires(comando != null); return(default(MsgGravacao)); }