Пример #1
0
        public void Obter_Informacoes_Complementares_Teste_Valido()
        {
            List <AnalisePorCampeonato> melhoresPorAno = new List <AnalisePorCampeonato>();

            melhoresPorAno.Add(new AnalisePorCampeonato {
                AnoParticipacao = 2015, Nome = "Corinthians", PercentualVitorias = 63.16
            });
            melhoresPorAno.Add(new AnalisePorCampeonato {
                AnoParticipacao = 2016, Nome = "Palmeiras", PercentualVitorias = 63.16
            });
            melhoresPorAno.Add(new AnalisePorCampeonato {
                AnoParticipacao = 2017, Nome = "Corinthians", PercentualVitorias = 55.26
            });
            melhoresPorAno.Add(new AnalisePorCampeonato {
                AnoParticipacao = 2018, Nome = "Palmeiras", PercentualVitorias = 60.53
            });
            melhoresPorAno.Add(new AnalisePorCampeonato {
                AnoParticipacao = 2019, Nome = "Flamengo", PercentualVitorias = 73.68
            });

            List <AnalisePorCampeonato> pioresPorAno = new List <AnalisePorCampeonato>();

            pioresPorAno.Add(new AnalisePorCampeonato {
                AnoParticipacao = 2015, Nome = "Joinvile", PercentualVitorias = 18.42
            });
            pioresPorAno.Add(new AnalisePorCampeonato {
                AnoParticipacao = 2016, Nome = "America mineiro", PercentualVitorias = 18.42
            });
            pioresPorAno.Add(new AnalisePorCampeonato {
                AnoParticipacao = 2017, Nome = "Atletico goias", PercentualVitorias = 23.68
            });
            pioresPorAno.Add(new AnalisePorCampeonato {
                AnoParticipacao = 2018, Nome = "Parana", PercentualVitorias = 10.53
            });
            pioresPorAno.Add(new AnalisePorCampeonato {
                AnoParticipacao = 2019, Nome = "Avai", PercentualVitorias = 7.89
            });

            InformacaoComplementar dados = new InformacaoComplementar()
            {
                MaiorNumeroVitorias              = "Palmeiras",
                MelhorMediaGolsContra            = "São Paulo",
                MelhorMediaGolsFavor             = "Corinthians",
                MelhorMediaVitoriasPorCampeonato = melhoresPorAno,
                MenorMediaVitoriasPorCampeonato  = pioresPorAno,
                MenorNumeroVitorias              = "Joinville"
            };

            _informacaoCampeonatoService.Setup(x => x.ObterInformacoesComplementares()).Returns(dados);

            var resultado   = _informacaoCaompeonatoController.ObterInformacoesComplementares();
            var okResultado = resultado as OkObjectResult;

            Assert.NotNull(okResultado);
            Assert.NotNull(okResultado.Value);
        }
        public InformacaoComplementar ObterInformacoesComplementares()
        {
            var dadosCampeonatos     = ObterDadosCampeonatos();
            var timesAgrupadosPorAno = dadosCampeonatos.GroupBy(x => x.AnoParticipacao).ToList();

            List <AnalisePorCampeonato> analisePorCampeonato  = new List <AnalisePorCampeonato>();
            List <AnalisePorCampeonato> melhoresPorCampeonato = new List <AnalisePorCampeonato>();
            List <AnalisePorCampeonato> pioresPorCampeonato   = new List <AnalisePorCampeonato>();

            foreach (var ano in timesAgrupadosPorAno)
            {
                analisePorCampeonato = new List <AnalisePorCampeonato>();

                foreach (var time in ano)
                {
                    string nomeTime           = time.Nome.PrimeiraLetraMaiuscula();
                    double percentualVitorias = ((double)time.Vitorias / (double)time.Jogos) * 100;

                    analisePorCampeonato.Add(new AnalisePorCampeonato {
                        AnoParticipacao = ano.Key, Nome = nomeTime, PercentualVitorias = Math.Round(percentualVitorias, 2)
                    });
                }

                analisePorCampeonato.OrderByDescending(x => x.PercentualVitorias);

                melhoresPorCampeonato.Add(analisePorCampeonato.FirstOrDefault());
                pioresPorCampeonato.Add(analisePorCampeonato.LastOrDefault());
            }

            var timesAgrupadoPorNome = dadosCampeonatos.GroupBy(x => x.Nome)
                                       .Select(
                g => new
            {
                Nome            = g.Key.PrimeiraLetraMaiuscula(),
                Vitorias        = g.Sum(s => s.Vitorias),
                MediaVitorias   = g.Average(s => s.Vitorias),
                MediaGolsFavor  = g.Average(s => s.GolsFavor),
                MediaGolsContra = g.Average(s => s.GolsContra),
            }
                ).ToList();

            var informacaoComplementar = new InformacaoComplementar();

            informacaoComplementar.MelhorMediaGolsFavor             = timesAgrupadoPorNome.OrderBy(x => x.MediaGolsFavor).ToList().LastOrDefault().Nome;
            informacaoComplementar.MelhorMediaGolsContra            = timesAgrupadoPorNome.OrderBy(x => x.MediaGolsContra).ToList().FirstOrDefault().Nome;
            informacaoComplementar.MaiorNumeroVitorias              = timesAgrupadoPorNome.OrderBy(x => x.Vitorias).ToList().LastOrDefault().Nome;
            informacaoComplementar.MenorNumeroVitorias              = timesAgrupadoPorNome.OrderBy(x => x.Vitorias).ToList().FirstOrDefault().Nome;
            informacaoComplementar.MelhorMediaVitoriasPorCampeonato = melhoresPorCampeonato;
            informacaoComplementar.MenorMediaVitoriasPorCampeonato  = pioresPorCampeonato;

            return(informacaoComplementar);
        }
Пример #3
0
 private string SerializeInformacaoComplementar() => InformacaoComplementar.RemoveBreakline();