public void EntaoOServidorDeveraComunicarOColaboradorQueNoCronogramaAsSeguintesTarefaSEstaoEmEdicao(string colaborador, string cronograma, Table table)
        {
            string oidTarefa;
            string key;
            IEnumerable <EdicaoTarefaHelper> edicoes = table.CreateSet <EdicaoTarefaHelper>();

            foreach (var edicao in edicoes)
            {
                oidTarefa = StepCronograma.GetOidTarefaNoCronograma(cronograma, edicao.Tarefa);
                key       = StepContextUtil.CriarKeyTarefaJaEstavamEmEdicao(colaborador, oidTarefa, edicao.Autor);
                ControleDeEsperaUtil.AguardarAte(() => { return(StepContextUtil.CenarioAtualContemAChave(key)); });
                Assert.IsTrue(StepContextUtil.CenarioAtualContemAChave(key),
                              string.Format("{0} deveria ter sido avisado de que a tarefa {1} estava em edição pelo colaborador {2}" +
                                            " no cronograma {3}", colaborador, edicao.Tarefa, edicao.Autor, cronograma));
            }
        }
        public void EntaoOServidorDeveraRecusarAEdicaoDoNomeDoCronogramaParaOColaborador(string cronograma, string login)
        {
            string oidCronograma               = StepCronograma.GetOidCronograma(cronograma);
            WexMultiAccessClientMock cliente   = StepContextUtil.GetAccessClientNoContexto(login, oidCronograma);
            List <MensagemDto>       mensagens = null;
            MensagemDto mensagem               = null;

            ControleDeEsperaUtil.AguardarAte(() =>
            {
                mensagens = new List <MensagemDto>(cliente.MensagensRecebidas);
                mensagem  = mensagens.FirstOrDefault(o => o.Propriedades[Constantes.OIDCRONOGRAMA].ToString() == oidCronograma && o.Tipo == CsTipoMensagem.EdicaoNomeCronogramaRecusada);
                return(mensagem != null);
            });

            Assert.IsNotNull(mensagem, "Deveria ter recebido a mensagem do permissão de edição do nome do cronograma");
            Assert.AreEqual(login, mensagem.Propriedades[Constantes.AUTOR_ACAO], string.Format("O proprietario da mensagem deveria ser o colaborador {0}", login));
        }
        public void EntaoOServidorNaoDeveComunicarAoSColaboradorEsDeQueASTarefaSRecebeuRamAtualizacaoOesNoCronograma(string colaboradores, string naoUsado, string tarefasOutroCronograma, string naoUsado2, string outroCronograma)
        {
            string[] logins  = colaboradores.Replace("\'", "").Split(',').Select(o => o.Trim()).ToArray();
            string[] tarefas = tarefasOutroCronograma.Replace("\'", "").Split(',').Select(o => o.Trim()).ToArray();
            string   oidTarefa;
            string   key;

            for (int i = 0; i < logins.Length; i++)
            {
                for (int x = 0; x < tarefas.Length; x++)
                {
                    oidTarefa = StepCronograma.GetOidTarefaNoCronograma(outroCronograma, tarefas[x]);
                    key       = StepContextUtil.CriarKeyRecebeuAtualizacaoEdicaoTarefa(logins[i], oidTarefa);
                    ControleDeEsperaUtil.AguardarAte(() => { return(StepContextUtil.CenarioAtualContemAChave(key)); });
                    Assert.IsFalse(StepContextUtil.CenarioAtualContemAChave(key), string.Format("{0} não deveria ter sido comunicado da atualização da tarefa {1} que pertence outro cronograma '{2}'", logins[i], tarefas[x], outroCronograma));
                }
            }
        }
        public void EntaoOCronogramaNaoDeveComunicarAoSColaboradorEsDeQueEstaOSendoExcluidaSTarefaSNoCronograma(string cronograma, string colaboradoresString, string naoUsada1, string outroCronograma)
        {
            List <string>             colaboradores         = colaboradoresString.Replace("\'", "").Split(',').Select(o => o.Trim()).ToList();
            Dictionary <string, bool> colaboradoresAvisados = new Dictionary <string, bool>();

            //Montando Dicionário em que nenhum colaborador foi avisado sobre a exclusão
            foreach (string colaboradorAtual in colaboradores)
            {
                colaboradoresAvisados.Add(colaboradorAtual, false);
            }

            WexMultiAccessClientMock clientAtual;
            string             oidCronograma      = StepCronograma.GetOidCronograma(cronograma);
            string             oidOutroCronograma = StepCronograma.GetOidCronograma(outroCronograma);
            bool               foiComunicado;
            List <MensagemDto> mensagens = null;
            MensagemDto        mensagem;

            foreach (var colaboradorAtual in colaboradores)
            {
                foiComunicado = false;
                clientAtual   = StepContextUtil.GetAccessClientNoContexto(colaboradorAtual, oidCronograma);
                ControleDeEsperaUtil.AguardarAte(() =>
                {
                    mensagens = new List <MensagemDto>(clientAtual.MensagensRecebidas);
                    mensagem  = mensagens.FirstOrDefault(
                        o => o.Tipo == CsTipoMensagem.ExclusaoTarefaFinalizada &&
                        !o.Propriedades[Constantes.OIDCRONOGRAMA].ToString().Equals(oidOutroCronograma)
                        );
                    if (mensagem != null)
                    {
                        foiComunicado = true;
                    }
                    return(foiComunicado);
                });
                Assert.IsFalse(foiComunicado, string.Format("{0} não deveria ser comunicado de que houve exclusão em um cronograma diferente ('{1}')", colaboradorAtual, outroCronograma));
            }
        }
        public void EntaoOServidorDeveraConterNaListaDeColaboradoresConectadosOColaboradorNoCronograma(string login, string cronograma)
        {
            string oidCronograma = StepCronograma.GetOidCronograma(cronograma);

            Assert.IsTrue(manager.ColaboradorConectado(login, oidCronograma), "Deveria ter sido encontrado como colaborador conectado");
        }