public async Task ObterFilmesCompetidoresAsync_RetornoVazio_NotFound()
        {
            var filmesRepository = Substitute.For <IFilmesRepository>();

            filmesRepository.ObterFilmesAsync().Returns(Enumerable.Empty <Filme>());

            var competicaoController = new CompeticaoController(filmesRepository);

            var resultado = await competicaoController.ObterFilmesCompetidoresAsync();

            Assert.IsType <NotFoundResult>(resultado.Result);
        }
        [InlineData(new string[] { "IdInvalido", "1", "2", "3", "4", "5", "6", "7" }, "A lista deve possuir 8 filmes validos")] //Lista com ids invalidos
        public async Task EnviarFilmesCompetidoresAsync_ListasInvalidas_BadRequest(string[] idFilmesEnviado, string erroEsperado)
        {
            var filmesRepository = Substitute.For <IFilmesRepository>();

            filmesRepository.ObterFilmesAsync().Returns(_listaFilmes);

            var competicaoController = new CompeticaoController(filmesRepository);

            var resultado = await competicaoController.EnviarFilmesCompetidoresAsync(idFilmesEnviado);

            Assert.IsType <BadRequestObjectResult>(resultado.Result);
            string mensagemErro = (resultado.Result as BadRequestObjectResult).Value.ToString();

            Assert.Equal(erroEsperado, mensagemErro);
        }
        public async Task ObterFilmesCompetidoresAsync_ErroInesperado_InternalServerError()
        {
            var filmesRepository = Substitute.For <IFilmesRepository>();

            filmesRepository.ObterFilmesAsync().Throws(new Exception("Erro inesperado"));

            var competicaoController = new CompeticaoController(filmesRepository);

            var resultado = await competicaoController.ObterFilmesCompetidoresAsync();

            Assert.IsType <ObjectResult>(resultado.Result);
            int?statusCode = (resultado.Result as ObjectResult).StatusCode;

            Assert.Equal(500, statusCode);
        }
        public async Task ObterFilmesCompetidoresAsync_RetornoComSucesso_Ok()
        {
            var filmesRepository = Substitute.For <IFilmesRepository>();

            filmesRepository.ObterFilmesAsync().Returns(_listaFilmes);

            var competicaoController = new CompeticaoController(filmesRepository);

            var resultado = await competicaoController.ObterFilmesCompetidoresAsync();

            Assert.IsType <OkObjectResult>(resultado.Result);
            IEnumerable <FilmeView> filmesView = (resultado.Result as OkObjectResult).Value as IEnumerable <FilmeView>;

            Assert.NotEmpty(filmesView);
        }
        public async Task EnviarFilmesCompetidoresAsync_RetornoVazio_NotFound()
        {
            var filmesRepository = Substitute.For <IFilmesRepository>();

            filmesRepository.ObterFilmesAsync().Returns(Enumerable.Empty <Filme>());

            var competicaoController = new CompeticaoController(filmesRepository);

            var idFilmesEnviado = new string[] { "1", "2", "3", "4", "5", "6", "7", "8" };
            var resultado       = await competicaoController.EnviarFilmesCompetidoresAsync(idFilmesEnviado);

            Assert.IsType <ObjectResult>(resultado.Result);
            int?statusCode = (resultado.Result as ObjectResult).StatusCode;

            Assert.Equal(500, statusCode);
        }
        public async Task EnviarFilmesCompetidoresAsync_ListasCom8Filmes_Ok()
        {
            var filmesRepository = Substitute.For <IFilmesRepository>();

            filmesRepository.ObterFilmesAsync().Returns(_listaFilmes);

            var competicaoController = new CompeticaoController(filmesRepository);

            var idFilmesEnviado = new string[] { "1", "2", "3", "4", "5", "6", "7", "8" };
            var resultado       = await competicaoController.EnviarFilmesCompetidoresAsync(idFilmesEnviado);

            Assert.IsType <OkObjectResult>(resultado.Result);
            FinalistasView finalistasView = (resultado.Result as OkObjectResult).Value as FinalistasView;

            Assert.Equal("Vingadores: Guerra Infinita", finalistasView.Campeao);
            Assert.Equal("Os Incríveis 2", finalistasView.ViceCampeao);
        }