/// <summary>
 /// Configurar comportamento relevante as expectativas do bbd
 /// </summary>
 /// <param name="cliente">wex client que recebera o comportamento do evento</param>
 private static void ConfigurarEventoAoServidorDesconectar(WexMultiAccessClientMock cliente)
 {
     cliente.AoServidorDesconectar += (mensagem) =>
     {
         string key = StepContextUtil.CriarKeyEventoServidorDesconectado(cliente.Login, cliente.OidCronograma);
         StepContextUtil.SalvarKey(key);
     };
 }
        public void QuandoOCronogramaC1ForAbertoPeloColaboradorJoao(string cronograma, string login)
        {
            string oidCronograma            = StepCronograma.CronogramasDic[cronograma].Oid.ToString();
            WexMultiAccessClientMock client = CriarMultiAccessClient(login, oidCronograma);

            client.Conectar();
            StepContextUtil.SalvarAccessClientNoContextoDoCenario(client);
        }
 /// <summary>
 /// Configurar comportamento relevante as expectativas do bbd
 /// </summary>
 /// <param name="cliente">wex client que recebera o comportamento do evento</param>
 private static void ConfigurarEventoAoSerCriadaNovaTarefa(WexMultiAccessClientMock cliente)
 {
     cliente.AoSerCriadaNovaTarefa += (mensagem) =>
     {
         string oidNovaTarefa = mensagem.Propriedades[Constantes.OIDTAREFA] as string;
         string key           = StepContextUtil.CriarKeyEventoAoSerCriadaNovaTarefa(cliente.Login, cliente.OidCronograma, oidNovaTarefa);
         StepContextUtil.SalvarKey(key);
     };
 }
 public void DadoQueOServidorEstaLigado()
 {
     manager = new WexMultiAccessManagerMock()
     {
         EnderecoIp = EnderecoIpServidor,
         Porta      = PortaTcp,
         TempoMaximoAguardarIdentificacao = 2500
     };
     manager.Conectar();
     StepContextUtil.SalvarInstanciaManager(manager);
 }
 /// <summary>
 /// Configurar comportamento relevante as expectativas do bbd
 /// </summary>
 /// <param name="cliente">wex client que recebera o comportamento do evento</param>
 private static void ConfigurarEventoAoUsuarioDesconectar(WexMultiAccessClientMock cliente)
 {
     cliente.AoUsuarioDesconectar += (mensagem) =>
     {
         string[] usuarios = (string[])mensagem.Propriedades[Constantes.USUARIOS];
         string   key;
         for (int i = 0; i < usuarios.Length; i++)
         {
             key = StepContextUtil.CriarKeyEventoUsuarioDesconectado(cliente.Login, cliente.OidCronograma, usuarios[i]);
             ScenarioContext.Current.Set(true, key);
         }
     };
 }
 /// <summary>
 /// Configurar comportamento relevante as expectativas do bbd
 /// </summary>
 /// <param name="cliente">wex client que recebera o comportamento do evento</param>
 private static void ConfigurarEventoAoIniciarEdicaoTarefa(WexMultiAccessClientMock cliente)
 {
     cliente.AoIniciarEdicaoTarefa += (mensagem) =>
     {
         Dictionary <string, string> autoresAcao = mensagem.Propriedades[Constantes.AUTORES_ACAO] as Dictionary <string, string>;
         string key;
         foreach (var item in autoresAcao)
         {
             key = StepContextUtil.CriarKeyEventoAoIniciarEdicaoTarefa(cliente.Login, cliente.OidCronograma, item.Value);
             StepContextUtil.SalvarKey(key);
         }
     };
 }
        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));
            }
        }
        /// <summary>
        /// Configurar comportamento relevante as expectativas do bbd
        /// </summary>
        /// <param name="cliente">wex client que recebera o comportamento do evento</param>
        private static void ConfigurarEventoAoFinalizadaEdicaoTarefa(WexMultiAccessClientMock cliente)
        {
            string key;

            cliente.AoSerFinalizadaEdicaoTarefaPorOutroUsuario += (mensagem) =>
            {
                Dictionary <string, string> autoresAcao = mensagem.Propriedades[Constantes.AUTORES_ACAO] as Dictionary <string, string>;
                foreach (var item in autoresAcao)
                {
                    key = StepContextUtil.CriarKeyEventoFimEdicaoTarefa(cliente.Login, item.Key, item.Value);
                    StepContextUtil.SalvarKey(key);
                    key = StepContextUtil.CriarKeyRecebeuAtualizacaoEdicaoTarefa(cliente.Login, item.Key);
                    StepContextUtil.SalvarKey(key);
                }
            };
        }
        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));
                }
            }
        }
 /// <summary>
 /// Configurar comportamento relevante as expectativas do bbd
 /// </summary>
 /// <param name="cliente">wex client que recebera o comportamento do evento</param>
 private static void ConfigurarEventoAoSerAutenticado(WexMultiAccessClientMock cliente)
 {
     cliente.AoSerAutenticadoComSucesso += (mensagem) =>
     {
         Debug.WriteLine(string.Format("AccessClient {0} - Usuarios Online:", cliente.Login));
         string[] usuarios = (string[])mensagem.Propriedades[Constantes.USUARIOS];
         Dictionary <string, string> EdicoesExistentes = mensagem.Propriedades[Constantes.EDICOES_CRONOGRAMA] as Dictionary <string, string>;
         string key;
         foreach (var item in EdicoesExistentes)
         {
             key = StepContextUtil.CriarKeyTarefaJaEstavamEmEdicao(cliente.Login, item.Key, item.Value);
             StepContextUtil.SalvarKey(key);
         }
         foreach (var usuario in usuarios)
         {
             Debug.WriteLine(usuario);
         }
     };
 }
        public void DadoQueOServidorContenhaOSColaboradorEsConectadoSNoCronograma(string colaboradores, string naoUsado, string cronograma)
        {
            string[] cols = colaboradores.Split(',');
            WexMultiAccessClientMock cliente;
            string login;

            foreach (string colaborador in cols)
            {
                login = colaborador.Replace("\'", "");
                login = login.Trim();
                string oidCronograma = StepCronograma.CronogramasDic[cronograma].Oid.ToString();
                cliente = CriarMultiAccessClient(login, oidCronograma);
                cliente.Conectar();
                ControleDeEsperaUtil.AguardarAte(() =>
                {
                    return(manager.ColaboradorConectado(login, oidCronograma));
                });
                StepContextUtil.SalvarAccessClientNoContextoDoCenario(cliente);
            }
        }
        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));
            }
        }