public MovieViewModel(MovieModel movie, IStarsCalculator starsCalculator)
 {
     Id    = movie.Id;
     Stars = starsCalculator.GetStarsFromRatings(movie.Ratings);
     Title = movie.Title;
     Year  = movie.Year;
 }
        public async Task when_no_year_is_provided_then_the_full_list_of_movies_is_returned()
        {
            //Arrange
            var years = new List <int> {
                2017, 2018
            };
            var movies = new List <MovieModel> {
                new MovieModel {
                    Id = 1, Title = "Uno", Year = 2017
                }, new MovieModel {
                    Id = 2, Title = "Due", Year = 2018
                }
            };
            IMovieRepository repository = Substitute.For <IMovieRepository>();

            repository.LoadAllYearsAsync().Returns(years);
            repository.LoadAllMoviesAsync().Returns(movies);
            IStarsCalculator starsCalculator = Substitute.For <IStarsCalculator>();

            starsCalculator.GetStarsFromRatings(Arg.Any <List <RatingComponent> >()).Returns(3);
            MoviesController controller = new MoviesController(repository, starsCalculator);

            //Act
            IActionResult actualResult = await controller.Index(null);

            //Assert
#pragma warning disable CS4014 // Because this call is not awaited, execution of the current method continues before the call is completed
            repository.Received(1).LoadAllYearsAsync();
            repository.Received(1).LoadAllMoviesAsync();
            repository.DidNotReceive().LoadMoviesByYearAsync(Arg.Any <int>());
#pragma warning restore CS4014 // Because this call is not awaited, execution of the current method continues before the call is completed
            actualResult.Should().BeOfType <ViewResult>();
            ViewResult viewResult = (ViewResult)actualResult;
            viewResult.ViewData.Model.Should().BeAssignableTo <MoviesIndexViewModel>();
            MoviesIndexViewModel viewModel = (MoviesIndexViewModel)viewResult.ViewData.Model;
            viewModel.IsYear.Should().Be(false);
            viewModel.Years.Should().BeEquivalentTo(years);
            viewModel.Movies.Should().HaveCount(2);
            viewModel.Movies.First().Id.Should().Be(movies.First().Id);
            viewModel.Movies.First().Title.Should().Be(movies.First().Title);
            viewModel.Movies.First().Year.Should().Be(movies.First().Year);
            viewModel.Movies.First().Stars.Should().Be(3);
            viewModel.Movies.Last().Id.Should().Be(movies.Last().Id);
            viewModel.Movies.Last().Title.Should().Be(movies.Last().Title);
            viewModel.Movies.Last().Year.Should().Be(movies.Last().Year);
            viewModel.Movies.Last().Stars.Should().Be(3);
        }
 public MoviesController(IMovieRepository repository, IStarsCalculator starsCalculator)
 {
     _repository      = repository;
     _starsCalculator = starsCalculator;
 }
Ejemplo n.º 4
0
 public MoviesIndexViewModel(ICollection <MovieModel> movies, IEnumerable <int> years, bool isYear, IStarsCalculator starsCalculator)
 {
     Movies = movies?.Select(m => new MovieViewModel(m, starsCalculator))?.ToList() ?? throw new ArgumentNullException(nameof(movies));
     Years  = years ?? throw new ArgumentNullException(nameof(years));
     IsYear = isYear;
 }