Beispiel #1
0
        public void ApurarVotos_QtdaElegiveisMenorQueDimensionamento_RetornaApuracao()
        {
            var ciclo   = Factories.CriarCicloValido();
            var periodo = new Periodo(new DateTime(2020, 1, 1), new DateTime(2020, 1, 2));
            var votacao = new VotacaoFake(periodo, ciclo, new Dimensionamento(2, 1));

            var grupo = new Grupo("Grupo 1");

            ciclo.AdicionarGrupo(grupo);

            votacao.IniciarVotacao();

            for (var i = 1; i <= 4; i++)
            {
                var usuario   = new Usuario($"1231231231{i}", new string(i.ToString()[0], 4), $"Usuário {i}", $"Cargo {i}", $"Área {i}", ciclo.Empresa);
                var associado = new Associado(usuario, grupo, 10, "1234");
                ciclo.AdicionarAssociado(associado);
            }

            var elegivelRetornado = votacao.AdicionarElegivel(ciclo.Associados.ElementAt(2));

            Assert.Collection(votacao.ApurarVotos(grupo),
                              elegivel =>
            {
                Assert.Equal(elegivelRetornado, elegivel);
                Assert.Equal(30, elegivel.Pontuacao);
                Assert.Equal(EApuracao.Eleito, elegivel.Apuracao);
            });
        }
Beispiel #2
0
        public void FinalizarVotacao_VotacaoNaoIniciada_ThrowsCustomException()
        {
            var periodo   = new Periodo(new DateTime(2020, 1, 1), new DateTime(2020, 1, 2));
            var votacao   = new VotacaoFake(periodo, new Ciclo());
            var exception = Assert.Throws <CustomException>(() => votacao.FinalizarVotacao());

            Assert.Equal("Essa votação ainda não foi iniciada.", exception.Message);
        }
Beispiel #3
0
        public void IniciarVotacao_VotacaoNaoIniciada_DataInicioSetada()
        {
            var periodo = new Periodo(new DateTime(2020, 1, 1), new DateTime(2020, 1, 2));
            var votacao = new VotacaoFake(periodo, new Ciclo());

            votacao.IniciarVotacao();
            Assert.NotNull(votacao.PeriodoRealizado.DataInicio);
        }
Beispiel #4
0
        public void AdicionarElegivel_AssociadoNaoCadastrado_ThrowsCustomException()
        {
            var periodo = new Periodo(new DateTime(2020, 1, 1), new DateTime(2020, 1, 2));
            var votacao = new VotacaoFake(periodo, new Ciclo());

            var exception = Assert.Throws <CustomException>(() => votacao.AdicionarElegivel(new Associado()));

            Assert.Equal("Associado não cadastrado nesse ciclo.", exception.Message);
        }
        public void RegistrarApuracao_ValorInvalido_ThrowsCustomException()
        {
            var periodo   = new Periodo(new DateTime(2020, 1, 1), new DateTime(2020, 1, 2));
            var votacao   = new VotacaoFake(periodo, new Ciclo());
            var elegivel  = new Elegivel(new Associado(), votacao);
            var exception = Assert.Throws <CustomException>(() => elegivel.RegistrarApuracao(EApuracao.NaoApurado));

            Assert.Equal("O registro da apuração deve ser 'Eleito' ou 'Não Eleito'.", exception.Message);
        }
Beispiel #6
0
        public void AtualizarPeriodoPrevisto_VotacaoJaIniciadaDataInicioDiferente_ThrowsCustomException()
        {
            var periodo = new Periodo(new DateTime(2020, 1, 1), new DateTime(2020, 1, 2));
            var votacao = new VotacaoFake(periodo, new Ciclo());

            votacao.IniciarVotacao();
            var novoPeriodo = new Periodo(new DateTime(2019, 12, 31), new DateTime(2020, 1, 2));
            var exception   = Assert.Throws <CustomException>(() => votacao.AtualizarPeriodoPrevisto(novoPeriodo));

            Assert.Equal("Não é possível atualizar a data prevista para início após o início da votação.", exception.Message);
        }
        public void RegistrarVoto_IncrementarVoto_RetornarVotos()
        {
            var periodo  = new Periodo(new DateTime(2020, 1, 1), new DateTime(2020, 1, 2));
            var votacao  = new VotacaoFake(periodo, new Ciclo());
            var elegivel = new Elegivel(new Associado(), votacao);

            Assert.Equal(0, elegivel.Votos);
            var votos = elegivel.RegistrarVoto();

            Assert.Equal(1, votos);
            Assert.Equal(1, elegivel.Votos);
        }
Beispiel #8
0
        public void AtualizarPeriodoPrevisto_VotacaoJaFinalizada_ThrowsCustomException()
        {
            var periodo = new Periodo(new DateTime(2020, 1, 1), new DateTime(2020, 1, 2));
            var votacao = new VotacaoFake(periodo, new Ciclo());

            votacao.IniciarVotacao();
            votacao.FinalizarVotacao();
            var novoPeriodo = new Periodo(new DateTime(2019, 12, 31), new DateTime(2020, 1, 2));
            var exception   = Assert.Throws <CustomException>(() => votacao.AtualizarPeriodoPrevisto(novoPeriodo));

            Assert.Equal("Não é possível atualizar a período previsto após o término da votação.", exception.Message);
        }
Beispiel #9
0
        public void ApurarVotos_VotacaoNaoIniciada_ThrowsCustomException()
        {
            var ciclo   = Factories.CriarCicloValido();
            var periodo = new Periodo(new DateTime(2020, 1, 1), new DateTime(2020, 1, 2));
            var votacao = new VotacaoFake(periodo, ciclo);

            var grupo = new Grupo("Grupo 1");

            ciclo.AdicionarGrupo(grupo);
            var usuario   = new Usuario("12312312312", "111", "Usuário 1", "Cargo 1", "Área 1", ciclo.Empresa);
            var associado = new Associado(usuario, grupo, 10, "1234");

            ciclo.AdicionarAssociado(associado);
            votacao.AdicionarElegivel(associado);
            var exception = Assert.Throws <CustomException>(() => votacao.ApurarVotos(grupo));

            Assert.Equal("Não é possível fazer a apuração dos votos antes do início da votação.", exception.Message);
        }
Beispiel #10
0
        public void AdicionarElegivel_AssociadoNaoElegivel_ElegivelAdicionado()
        {
            var ciclo   = Factories.CriarCicloValido();
            var periodo = new Periodo(new DateTime(2020, 1, 1), new DateTime(2020, 1, 2));
            var votacao = new VotacaoFake(periodo, ciclo);

            var grupo = new Grupo("Grupo 1");

            ciclo.AdicionarGrupo(grupo);
            var usuario   = new Usuario("12312312312", "111", "Usuário 1", "Cargo 1", "Área 1", ciclo.Empresa);
            var associado = new Associado(usuario, grupo, 10, "1234");

            ciclo.AdicionarAssociado(associado);
            var elegivelRetornado = votacao.AdicionarElegivel(associado);

            Assert.Equal(associado, elegivelRetornado.Associado);
            Assert.Collection(votacao.Elegiveis, elegivel => Assert.Equal(elegivelRetornado, elegivel));
        }
Beispiel #11
0
        public void RemoverElegivel_ElegivelNaoCadastrado_ThrowsCustomException()
        {
            var ciclo   = Factories.CriarCicloValido();
            var periodo = new Periodo(new DateTime(2020, 1, 1), new DateTime(2020, 1, 2));
            var votacao = new VotacaoFake(periodo, ciclo);

            var grupo = new Grupo("Grupo 1");

            ciclo.AdicionarGrupo(grupo);
            var usuario   = new Usuario("12312312312", "111", "Usuário 1", "Cargo 1", "Área 1", ciclo.Empresa);
            var associado = new Associado(usuario, grupo, 10, "1234");

            ciclo.AdicionarAssociado(associado);
            votacao.AdicionarElegivel(associado);

            var exception = Assert.Throws <CustomException>(() => votacao.RemoverElegivel(new Elegivel()));

            Assert.Equal("Elegível não cadastrado.", exception.Message);
        }
Beispiel #12
0
        public void AdicionarElegivel_AssociadoJaElegivel_ThrowsCustomException()
        {
            var ciclo   = Factories.CriarCicloValido();
            var periodo = new Periodo(new DateTime(2020, 1, 1), new DateTime(2020, 1, 2));
            var votacao = new VotacaoFake(periodo, ciclo);

            var grupo = new Grupo("Grupo 1");

            ciclo.AdicionarGrupo(grupo);
            var usuario   = new Usuario("12312312312", "111", "Usuário 1", "Cargo 1", "Área 1", ciclo.Empresa);
            var associado = new Associado(usuario, grupo, 10, "1234");

            ciclo.AdicionarAssociado(associado);
            votacao.AdicionarElegivel(associado);

            var exception = Assert.Throws <CustomException>(() => votacao.AdicionarElegivel(associado));

            Assert.Equal("Esse associado já está na lista de elegíveis para essa votação.", exception.Message);
        }
Beispiel #13
0
        public void ApurarVotos_GrupoValido_RetornaApuracao()
        {
            var ciclo   = Factories.CriarCicloValido();
            var periodo = new Periodo(new DateTime(2020, 1, 1), new DateTime(2020, 1, 2));
            var votacao = new VotacaoFake(periodo, ciclo, new Dimensionamento(2, 1));

            var grupo = new Grupo("Grupo 1");

            ciclo.AdicionarGrupo(grupo);

            var usuario1   = new Usuario("12312312312", "111", "Usuário 1", "Cargo 1", "Área 1", ciclo.Empresa);
            var associado1 = new Associado(usuario1, grupo, 10, "1234");

            ciclo.AdicionarAssociado(associado1);

            var usuario2   = new Usuario("12312312311", "222", "Usuário 2", "Cargo 2", "Área 2", ciclo.Empresa);
            var associado2 = new Associado(usuario2, grupo, 11, "1234");

            ciclo.AdicionarAssociado(associado2);

            var elegivel1 = votacao.AdicionarElegivel(associado1);
            var elegivel2 = votacao.AdicionarElegivel(associado2);

            votacao.IniciarVotacao();
            elegivel1.RegistrarVoto();
            elegivel1.RegistrarVoto();
            elegivel2.RegistrarVoto();

            Assert.Collection(votacao.ApurarVotos(grupo),
                              elegivel =>
            {
                Assert.Equal(elegivel2, elegivel);
                Assert.Equal(34, elegivel.Pontuacao);
                Assert.Equal(EApuracao.Eleito, elegivel.Apuracao);
            },
                              elegivel =>
            {
                Assert.Equal(elegivel1, elegivel);
                Assert.Equal(32, elegivel.Pontuacao);
                Assert.Equal(EApuracao.NaoEleito, elegivel.Apuracao);
            });
        }
Beispiel #14
0
        public void ApurarVotos_NenhumElegivelNoGrupo_RetornaListaVazia()
        {
            var ciclo   = Factories.CriarCicloValido();
            var periodo = new Periodo(new DateTime(2020, 1, 1), new DateTime(2020, 1, 2));
            var votacao = new VotacaoFake(periodo, ciclo);

            var grupo = new Grupo("Grupo 1");

            ciclo.AdicionarGrupo(grupo);
            var usuario   = new Usuario("12312312312", "111", "Usuário 1", "Cargo 1", "Área 1", ciclo.Empresa);
            var associado = new Associado(usuario, grupo, 10, "1234");

            ciclo.AdicionarAssociado(associado);
            var elegivelRetornado = votacao.AdicionarElegivel(associado);

            votacao.IniciarVotacao();
            elegivelRetornado.RegistrarVoto();

            Assert.Empty(votacao.ApurarVotos(new Grupo("Grupo 2")));
        }
Beispiel #15
0
        public void AtualizarPeriodoPrevisto_DatasNaoInformadas_ThrowsCustomException()
        {
            var periodo = new Periodo(new DateTime(2020, 1, 1), new DateTime(2020, 1, 2));
            var votacao = new VotacaoFake(periodo, new Ciclo());

            votacao.IniciarVotacao();

            var novoPeriodo = new Periodo(new DateTime(2019, 12, 31), null);
            var exception   = Assert.Throws <CustomException>(() => votacao.AtualizarPeriodoPrevisto(novoPeriodo));

            Assert.Equal("Para atualizar o período previsto é preciso informar a data de início de fim da votação.", exception.Message);

            novoPeriodo = new Periodo(null, new DateTime(2020, 1, 3));
            exception   = Assert.Throws <CustomException>(() => votacao.AtualizarPeriodoPrevisto(novoPeriodo));
            Assert.Equal("Para atualizar o período previsto é preciso informar a data de início de fim da votação.", exception.Message);

            novoPeriodo = new Periodo(null, null);
            exception   = Assert.Throws <CustomException>(() => votacao.AtualizarPeriodoPrevisto(novoPeriodo));
            Assert.Equal("Para atualizar o período previsto é preciso informar a data de início de fim da votação.", exception.Message);
        }
Beispiel #16
0
        public void RemoverElegivel_VotacaoFinalizada_ThrowsCustomException()
        {
            var ciclo   = Factories.CriarCicloValido();
            var periodo = new Periodo(new DateTime(2020, 1, 1), new DateTime(2020, 1, 2));
            var votacao = new VotacaoFake(periodo, ciclo);

            var grupo = new Grupo("Grupo 1");

            ciclo.AdicionarGrupo(grupo);
            var usuario   = new Usuario("12312312312", "111", "Usuário 1", "Cargo 1", "Área 1", ciclo.Empresa);
            var associado = new Associado(usuario, grupo, 10, "1234");

            ciclo.AdicionarAssociado(associado);
            votacao.AdicionarElegivel(associado);

            votacao.IniciarVotacao();
            votacao.FinalizarVotacao();

            var exception = Assert.Throws <CustomException>(() => votacao.RemoverElegivel(new Elegivel()));

            Assert.Equal("Não é possível remover elegíveis após o término da votação.", exception.Message);
        }
Beispiel #17
0
        public void RemoverElegivel_ParametrosValidos_ElegivelRemovido()
        {
            var ciclo   = Factories.CriarCicloValido();
            var periodo = new Periodo(new DateTime(2020, 1, 1), new DateTime(2020, 1, 2));
            var votacao = new VotacaoFake(periodo, ciclo);

            var grupo = new Grupo("Grupo 1");

            ciclo.AdicionarGrupo(grupo);
            var usuario   = new Usuario("12312312312", "111", "Usuário 1", "Cargo 1", "Área 1", ciclo.Empresa);
            var associado = new Associado(usuario, grupo, 10, "1234");

            ciclo.AdicionarAssociado(associado);
            var elegivel = votacao.AdicionarElegivel(associado);

            Assert.Equal(1, votacao.Elegiveis.Count);
            var elegivelRemovido = votacao.RemoverElegivel(new Elegivel()
            {
                Id = elegivel.Id
            });

            Assert.Equal(elegivel, elegivelRemovido);
            Assert.Equal(0, votacao.Elegiveis.Count);
        }
Beispiel #18
0
        public void RetornarApuracao_VariosGrupos_RetornaApuracao()
        {
            var ciclo   = Factories.CriarCicloValido();
            var periodo = new Periodo(new DateTime(2020, 1, 1), new DateTime(2020, 1, 2));
            var votacao = new VotacaoFake(periodo, ciclo, new Dimensionamento(2, 1));

            votacao.IniciarVotacao();

            var grupo1 = new Grupo("Grupo 1");

            ciclo.AdicionarGrupo(grupo1);

            // Aplausogramas: 3, 6, 9, 12
            for (var i = 1; i <= 4; i++)
            {
                var usuario   = new Usuario($"1231231231{i}", new string(i.ToString()[0], 4), $"Usuário {i}", $"Cargo {i}", $"Área {i}", ciclo.Empresa);
                var associado = new Associado(usuario, grupo1, i, "1234");
                ciclo.AdicionarAssociado(associado);
                votacao.AdicionarElegivel(associado);
            }

            var grupo2 = new Grupo("Grupo 2");

            ciclo.AdicionarGrupo(grupo2);
            for (var i = 1; i <= 3; i++)
            {
                var usuario   = new Usuario($"2231231231{i}", new string(i.ToString()[0], 4), $"Usuário {i}", $"Cargo {i}", $"Área {i}", ciclo.Empresa);
                var associado = new Associado(usuario, grupo2, 2, "1234");
                ciclo.AdicionarAssociado(associado);
                votacao.AdicionarElegivel(associado);
            }

            // Grupo 1
            // Pontuação: 7, 7, 9, 12
            votacao.Elegiveis.ElementAt(0).RegistrarVoto();
            votacao.Elegiveis.ElementAt(0).RegistrarVoto();
            votacao.Elegiveis.ElementAt(0).RegistrarVoto();
            votacao.Elegiveis.ElementAt(0).RegistrarVoto();
            votacao.Elegiveis.ElementAt(1).RegistrarVoto();

            // Grupo 2
            // Pontuação: 8, 6, 9
            votacao.Elegiveis.ElementAt(4).RegistrarVoto();
            votacao.Elegiveis.ElementAt(4).RegistrarVoto();
            votacao.Elegiveis.ElementAt(6).RegistrarVoto();
            votacao.Elegiveis.ElementAt(6).RegistrarVoto();
            votacao.Elegiveis.ElementAt(6).RegistrarVoto();

            votacao.FinalizarVotacao();

            Assert.Collection(votacao.RetornarApuracao(),
                              grupo =>
            {
                Assert.Equal(grupo1, grupo.Key);
                Assert.Collection(grupo.Value,
                                  elegivel =>
                {
                    Assert.Equal(votacao.Elegiveis.ElementAt(3), elegivel);
                    Assert.Equal(12, elegivel.Pontuacao);
                },
                                  elegivel =>
                {
                    Assert.Equal(votacao.Elegiveis.ElementAt(2), elegivel);
                    Assert.Equal(9, elegivel.Pontuacao);
                },
                                  elegivel =>
                {
                    Assert.Equal(votacao.Elegiveis.ElementAt(1), elegivel);
                    Assert.Equal(7, elegivel.Pontuacao);
                },
                                  elegivel =>
                {
                    Assert.Equal(votacao.Elegiveis.ElementAt(0), elegivel);
                    Assert.Equal(7, elegivel.Pontuacao);
                });
            },
                              grupo =>
            {
                Assert.Equal(grupo2, grupo.Key);
                Assert.Collection(grupo.Value,
                                  elegivel =>
                {
                    Assert.Equal(votacao.Elegiveis.ElementAt(6), elegivel);
                    Assert.Equal(9, elegivel.Pontuacao);
                },
                                  elegivel =>
                {
                    Assert.Equal(votacao.Elegiveis.ElementAt(4), elegivel);
                    Assert.Equal(8, elegivel.Pontuacao);
                },
                                  elegivel =>
                {
                    Assert.Equal(votacao.Elegiveis.ElementAt(5), elegivel);
                    Assert.Equal(6, elegivel.Pontuacao);
                });
            });
        }