Ejemplo n.º 1
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);
                });
            });
        }