Пример #1
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());
        }
        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
            }));
        }
Пример #3
0
        public MsgGravacao Trata(ModificaContactosFuncionario comando)
        {
            var funcionario = _session.Get <Funcionario>(comando.Id);

            Contract.Assert(funcionario != null, Msg.Erro_carregar_funcionario);
            funcionario.Modifica(comando);
            _session.Update(funcionario);
            _session.Flush();
            return(new MsgGravacao {
                Id = comando.Id,
                Versao = funcionario.Versao
            });
        }
Пример #4
0
        public void Funciona_corretamente_mesmo_com_contactos_inexistentes(Funcionario funcionario, ModificaContactosFuncionario comando)
        {
            "Dado um funcionário existente"
            .Given(() => funcionario = Funcionario.CriaNovo(new CriaFuncionario("Luis", "123456789", new TipoFuncionario(1, "Docente"), new[] { Contacto.CriaExtensao("1234") }, 1)));

            "e um comando de modificação"
            .And(() => comando = new ModificaContactosFuncionario(1, 1, new Contacto[] { Contacto.CriaEmail("*****@*****.**"), Contacto.CriaExtensao("1234") }, null));

            "Quando aplicamos o comando"
            .When(() => funcionario.Modifica(comando));

            "Então devemos obter os novos contactos na lista de contactos"
            .Then(() => funcionario.Contactos.Should().NotContain(comando.ContactosRemover));
        }
Пример #5
0
        public void Nao_duplica_contactos(Funcionario funcionario, ModificaContactosFuncionario comando)
        {
            "Dado um funcionário existente"
            .Given(() => funcionario = Funcionario.CriaNovo(new CriaFuncionario("Luis", "123456789", new TipoFuncionario(1, "Docente"), new[] { Contacto.CriaTelefone("123123123") }, 1)));

            "e um comando de modificação"
            .And(() => comando = new ModificaContactosFuncionario(1, 1, null, new Contacto[] { Contacto.CriaEmail("*****@*****.**"), Contacto.CriaTelefone("123123123") }));

            "Quando aplicamos o comando"
            .When(() => funcionario.Modifica(comando));

            "Então devemos obter os novos contactos na lista de contactos"
            .Then(() => funcionario.Contactos.Should().HaveCount(2).And.Contain(comando.ContactosAdicionar));
        }
Пример #6
0
 public void Modifica(ModificaContactosFuncionario comando)
 {
     Contract.Requires(comando != null);
     if (comando.Versao != _versao)
     {
         throw new InvalidOperationException(Msg.Objeto_modificado_por_outro_utilizador);
     }
     foreach (var contacto in comando.ContactosRemover)
     {
         _contactos.Remove(contacto);
     }
     foreach (var contacto in comando.ContactosAdicionar)
     {
         if (_contactos.Contains(contacto))
         {
             break;
         }
         _contactos.Add(contacto);
     }
 }
Пример #7
0
        public void Nao_funciona_com_versoes_diferentes(Funcionario funcionario, ModificaContactosFuncionario comando, Exception excecaoEsperada)
        {
            "Dado um funcionário existente"
            .Given(() => funcionario = Funcionario.CriaNovo(new CriaFuncionario("Luis", "123456789", new TipoFuncionario(1, "Docente"), new[] { Contacto.CriaExtensao("1234") })));

            "e um comando de modificação"
            .And(() => comando = new ModificaContactosFuncionario(1, 1, new Contacto[] { Contacto.CriaEmail("*****@*****.**"), Contacto.CriaExtensao("1234") }, null));

            "Quando aplicamos o comando"
            .When(() => {
                try {
                    funcionario.Modifica(comando);
                }
                catch (Exception ex) {
                    excecaoEsperada = ex;
                }
            });

            "Então devemos obter uma exceção"
            .Then(() => Assert.IsType <InvalidOperationException>(excecaoEsperada));
        }
Пример #8
0
 public MsgGravacao Trata(ModificaContactosFuncionario comando)
 {
     Contract.Requires(comando != null);
     return(default(MsgGravacao));
 }