public List <MediaVoto> ObterMediaPontuacaoFilmes()
        {
            var votos = _contexto.Votos.ToList();

            _contexto.Atores.ToList();
            _contexto.Diretores.ToList();
            List <MediaVoto> listaDeMedia = new List <MediaVoto>();
            MediaVoto        media;
            var filmes = _contexto.Filmes.ToList();

            foreach (var filme in filmes)
            {
                var mediaVotos = votos
                                 .Where(x => x.Filme.FilmeId == filme.FilmeId)
                                 .Average(x => (int)x.Classificacao);
                media           = new MediaVoto();
                media.Filme     = filme;
                media.Pontuacao = Math.Round(mediaVotos);

                listaDeMedia.Add(media);
            }

            var listaOrdenada = listaDeMedia.GroupBy(x => new { x.Filme.Nome, x.Pontuacao })
                                .Select(group => new
            {
                group.Key.Nome,
                group.Key.Pontuacao
            })
                                .OrderBy(ord => new { ord.Nome, ord.Pontuacao });

            return(listaDeMedia);
        }
        public MediaVoto GetMediaPorFilme(int idFilme)
        {
            ServiceVoto = new VotoService(_contexto);
            MediaVoto media = ServiceVoto.ObterMediaPontuacaoPorFilme(idFilme);

            return(media);
        }
        public MediaVoto ObterMediaPontuacaoPorFilme(int idFilme)
        {
            var votos = _contexto.Votos
                        .Where(f => f.Filme.FilmeId == idFilme).ToList();

            var mediaVotos = votos.Average(x => (int)x.Classificacao);

            _contexto.Atores.ToList();
            _contexto.Diretores.ToList();

            MediaVoto media = new MediaVoto();

            media.Pontuacao = Math.Round(mediaVotos);
            media.Filme     = _contexto.Filmes
                              .FirstOrDefault(f => f.FilmeId == idFilme);
            return(media);
        }
        public void ObterMediaPontuacaoPorFilme()
        {
            #region Setup
            Ator ator1 = new Ator()
            {
                Nome = "Harrison Ford"
            };
            Ator ator2 = new Ator()
            {
                Nome = "Carrie Fisher"
            };
            Ator ator3 = new Ator()
            {
                Nome = "Robert Downey Jr."
            };
            Ator ator4 = new Ator()
            {
                Nome = "Scarlett Johansson"
            };

            List <Ator> listAtores1 = new List <Ator>();
            listAtores1.Add(ator1);
            listAtores1.Add(ator2);

            List <Ator> listAtores2 = new List <Ator>();
            listAtores2.Add(ator3);
            listAtores2.Add(ator4);

            Diretor diretor1 = new Diretor()
            {
                Nome = "George Lucas"
            };

            Diretor diretor2 = new Diretor()
            {
                Nome = "Joss Whedon"
            };

            Filme filme1 = new Filme();
            filme1.FilmeId       = 1;
            filme1.Nome          = "Stars Wars - Guerra nas Estrlas";
            filme1.Genero        = Genero.Ficcao;
            filme1.Diretor       = diretor1;
            filme1.ListaDeAtores = listAtores1;

            Filme filme2 = new Filme();
            filme2.FilmeId       = 2;
            filme2.Nome          = "Os Vingadores";
            filme2.Genero        = Genero.Ficcao;
            filme2.Diretor       = diretor2;
            filme2.ListaDeAtores = listAtores2;

            List <Filme> filmes = new List <Filme>();
            filmes.Add(filme1);
            filmes.Add(filme2);

            #region Mock: Tabela de Usuarios
            Criptografia criptografia = new Criptografia();
            Usuario      usuario1     = new Usuario()
            {
                Nome   = "Gerente01",
                Senha  = criptografia.GerarHashMd5("Gerente01"),
                Tipo   = "administrador",
                Status = "Ativo"
            };
            Usuario usuario2 = new Usuario()
            {
                Nome   = "Gerente02",
                Senha  = criptografia.GerarHashMd5("Gerente02"),
                Tipo   = "administrador",
                Status = "Desativado"
            };
            Usuario usuario3 = new Usuario()
            {
                Nome   = "Atendente01",
                Senha  = criptografia.GerarHashMd5("Atendente01"),
                Tipo   = "funcionario",
                Status = "Ativo"
            };
            Usuario usuario4 = new Usuario()
            {
                Nome   = "Atendente02",
                Senha  = criptografia.GerarHashMd5("Atendente02"),
                Tipo   = "funcionario",
                Status = "Ativo"
            };
            Usuario usuario5 = new Usuario()
            {
                Nome   = "Atendente03",
                Senha  = criptografia.GerarHashMd5("Atendente03"),
                Tipo   = "funcionario",
                Status = "Desativado"
            };
            List <Usuario> usuarios = new List <Usuario>();
            usuarios.Add(usuario1);
            usuarios.Add(usuario2);
            usuarios.Add(usuario3);
            usuarios.Add(usuario4);
            usuarios.Add(usuario5);
            #endregion

            #region Mock: Votos
            Voto voto1 = new Voto()
            {
                VotoId        = 1,
                Classificacao = Classificacao.MuitoRuim,
                Filme         = filme1,
                Usuario       = usuario2
            };
            Voto voto2 = new Voto()
            {
                VotoId        = 1,
                Classificacao = Classificacao.Bom,
                Filme         = filme1,
                Usuario       = usuario3
            };
            Voto voto3 = new Voto()
            {
                VotoId        = 1,
                Classificacao = Classificacao.Otimo,
                Filme         = filme1,
                Usuario       = usuario4
            };
            Voto voto4 = new Voto()
            {
                VotoId        = 1,
                Classificacao = Classificacao.Ruim,
                Filme         = filme1,
                Usuario       = usuario3
            };
            Voto voto5 = new Voto()
            {
                VotoId        = 2,
                Classificacao = Classificacao.Otimo,
                Filme         = filme2,
                Usuario       = usuario1
            };
            Voto voto6 = new Voto()
            {
                VotoId        = 2,
                Classificacao = Classificacao.MuitoBom,
                Filme         = filme2,
                Usuario       = usuario1
            };
            List <Voto> votos = new List <Voto>();
            votos.Add(voto1);
            votos.Add(voto2);
            votos.Add(voto3);
            votos.Add(voto4);
            votos.Add(voto5);
            votos.Add(voto6);
            votos.Add(voto1);
            votos.Add(voto3);
            #endregion

            #endregion

            var       mediaVotos  = votos.Where(x => x.VotoId == 1).Average(x => (int)x.Classificacao);
            MediaVoto mediaFilme1 = new MediaVoto();
            mediaFilme1.Pontuacao = Math.Round(mediaVotos, 2);
            mediaFilme1.Filme     = filmes.FirstOrDefault(f => f.FilmeId == 1);

            Assert.AreEqual(mediaFilme1.Pontuacao, 1.83);
        }