public void GetMovies_IsExecuting_SetsIsLoading()
        {
            var movieServiceMock = new Mock <IMovieService>();

            movieServiceMock
            .Setup(x => x.GetMovies(
                       It.IsAny <string>(),
                       It.IsAny <int>()))
            .Returns(() => Observable
                     .Return(Enumerable.Empty <Movie>())
                     .Delay(TimeSpan.FromMilliseconds(500), _testScheduler)
                     .DelaySubscription(TimeSpan.FromMilliseconds(500), _testScheduler));

            var target = new UpcomingMoviesViewModel(
                movieServiceMock.Object,
                _testScheduler,
                _testScheduler,
                _screenMock.Object);

            target.Activator.Activate();

            target.SearchTerm = "Any query";

            _testScheduler.AdvanceBy(TimeSpan.FromMilliseconds(200).Ticks);

            Assert.IsFalse(target.IsLoading);

            _testScheduler.AdvanceBy(TimeSpan.FromMilliseconds(900).Ticks);

            Assert.IsTrue(target.IsLoading);

            _testScheduler.AdvanceBy(TimeSpan.FromMilliseconds(1000).Ticks);

            Assert.IsFalse(target.IsLoading);
        }
        public void SetSelectedMovie_ValueIsNotNull_NavigatesToMovieDetails()
        {
            var selectedMovie = new MovieCellViewModel(new Movie()
            {
                Id = 1, Title = "Movie 1"
            });
            var movieServiceMock = new Mock <IMovieService>();

            var target = new UpcomingMoviesViewModel(
                movieServiceMock.Object,
                _testScheduler,
                _testScheduler,
                _screenMock.Object);

            target.Activator.Activate();

            target.SelectedMovie = selectedMovie;

            _testScheduler.AdvanceBy(TimeSpan.FromMilliseconds(500).Ticks);

            var currentViewModel = target.HostScreen.Router.GetCurrentViewModel() as MovieDetailsViewModel;

            Assert.IsNotNull(currentViewModel);
            Assert.AreEqual(selectedMovie, currentViewModel.Movie);
        }
        public void SearchTerm_HasLessThanThreeCharacters_DoesNotGetMovies()
        {
            string expectedSearch   = "12";
            var    movieServiceMock = new Mock <IMovieService>();

            movieServiceMock
            .Setup(x => x.GetMovies(
                       It.IsAny <string>(),
                       It.IsAny <int>()))
            .Returns(() => Observable
                     .Return(Enumerable.Empty <Movie>()));

            var target = new UpcomingMoviesViewModel(
                movieServiceMock.Object,
                _testScheduler,
                _testScheduler,
                _screenMock.Object);

            target.Activator.Activate();

            target.SearchTerm = expectedSearch;

            _testScheduler.AdvanceBy(TimeSpan.FromSeconds(2).Ticks);

            movieServiceMock
            .Verify(x => x.GetMovies(
                        It.IsAny <string>(),
                        It.IsAny <int>()),
                    Times.Never);
        }
 public UpcomingMoviesPage()
 {
     InitializeComponent();
     viewModel               = new UpcomingMoviesViewModel(new MovieService());
     BindingContext          = viewModel;
     listView.ItemTapped    += ListView_ItemTapped;
     listView.ItemAppearing += ListView_ItemAppearing;
 }
 public UpcomingMoviesPage()
 {
     InitializeComponent();
     BindingContext = new UpcomingMoviesViewModel(new PageService());
     upcomingMovies.ItemSelected += (sender, e) =>
     {
         ((ListView)sender).SelectedItem = null;
     };
 }
        public void GetUrlPathSegment_VmIsCreated_ReturnsCorrectText()
        {
            var movieServiceMock = new Mock <IMovieService>();

            var target = new UpcomingMoviesViewModel(
                movieServiceMock.Object,
                _testScheduler,
                _testScheduler,
                _screenMock.Object);

            Assert.AreEqual("Upcoming Movies", target.UrlPathSegment);
        }
        public void MovieTappedCommand_Is_Not_Null()
        {
            //Arrange
            var navigationService     = new Mock <INavigationService>();
            var upcomingMoviesService = new Mock <IUpcomingMoviesService>();

            //Act
            var vm = new UpcomingMoviesViewModel(upcomingMoviesService.Object, navigationService.Object);

            //Assert
            Assert.NotNull(vm.MovieTappedCommand);
        }
        public async Task UpcomingMoviesList_Not_Null_After_InitializeAsync()
        {
            //Arrange
            var navigationService     = new Mock <INavigationService>();
            var upcomingMoviesService = new Mock <IUpcomingMoviesService>();

            var vm = new UpcomingMoviesViewModel(upcomingMoviesService.Object, navigationService.Object);

            //Act
            await vm.InitializeAsync(null);

            //Assert
            Assert.NotNull(vm.UpcomingMovies);
        }
Exemple #9
0
        public async Task GetGenresAsyncShouldFillGenresList()
        {
            //Arrange
            var movieService            = new MockMovieService();
            var genreService            = new MockGenreService();
            var upcomingMoviesViewModel = new UpcomingMoviesViewModel(movieService, genreService);

            upcomingMoviesViewModel.Genres.Clear();

            //Act
            await upcomingMoviesViewModel.GetGenresAsync();

            //Assert
            Assert.IsNotEmpty(upcomingMoviesViewModel.Genres);
        }
        public void GetMovies_HasMovies_SetsMovies()
        {
            string expectedSearch = "query";
            int    expectedPage   = 2;
            var    movies         = new List <Movie>()
            {
                new Movie()
                {
                    Id = 1, Title = "Movie 1"
                },
                new Movie()
                {
                    Id = 2, Title = "Movie 2"
                }
            };

            var movieServiceMock = new Mock <IMovieService>();

            movieServiceMock
            .Setup(x => x.GetMovies(
                       It.IsAny <string>(),
                       It.IsAny <int>()))
            .Returns(() => Observable.Return(movies));

            var target = new UpcomingMoviesViewModel(
                movieServiceMock.Object,
                _testScheduler,
                _testScheduler,
                _screenMock.Object);

            target.Activator.Activate();

            target.SearchTerm = expectedSearch;

            _testScheduler.AdvanceBy(TimeSpan.FromMilliseconds(500).Ticks);

            Observable.Return(expectedPage).InvokeCommand(target.GetMovies);

            _testScheduler.AdvanceBy(TimeSpan.FromSeconds(2).Ticks);

            movieServiceMock
            .Verify(x => x.GetMovies(
                        It.Is <string>(search => search == expectedSearch),
                        It.Is <int>(page => page == expectedPage)),
                    Times.Once);

            Assert.AreEqual(movies.Count, target.Movies.Count);
        }
        public void GetUpcomingMovies_OperationIsInvokedTwice_DoesNotAddDuplicatedMovies()
        {
            int expectedPage = 2;
            var movies       = new List <Movie>()
            {
                new Movie()
                {
                    Id = 1, Title = "Movie 1"
                },
                new Movie()
                {
                    Id = 2, Title = "Movie 2"
                }
            };

            var movieServiceMock = new Mock <IMovieService>();

            movieServiceMock
            .Setup(x => x.GetUpcomingMovies(
                       It.IsAny <int>()))
            .Returns(() => Observable.Return(movies));

            var target = new UpcomingMoviesViewModel(
                movieServiceMock.Object,
                _testScheduler,
                _testScheduler,
                _screenMock.Object);

            target.Activator.Activate();

            _testScheduler.AdvanceBy(TimeSpan.FromMilliseconds(500).Ticks);

            Observable.Return(expectedPage).InvokeCommand(target.GetUpcomingMovies);
            Observable.Return(expectedPage).InvokeCommand(target.GetUpcomingMovies);

            _testScheduler.AdvanceBy(TimeSpan.FromMilliseconds(500).Ticks);

            movieServiceMock
            .Verify(x => x.GetUpcomingMovies(
                        It.Is <int>(page => page == expectedPage)),
                    Times.Exactly(2));

            Assert.AreEqual(movies.Count, target.Movies.Count);
        }
        public void SearchTerm_IsEmpty_GetUpcomingMovies()
        {
            var movieServiceMock = new Mock <IMovieService>();

            movieServiceMock
            .Setup(x => x.GetMovies(
                       It.IsAny <string>(),
                       It.IsAny <int>()))
            .Returns(() => Observable
                     .Return(Enumerable.Empty <Movie>()));
            movieServiceMock
            .Setup(x => x.GetUpcomingMovies(
                       It.IsAny <int>()))
            .Returns(() => Observable
                     .Return(Enumerable.Empty <Movie>()));

            var target = new UpcomingMoviesViewModel(
                movieServiceMock.Object,
                _testScheduler,
                _testScheduler,
                _screenMock.Object);

            target.Activator.Activate();

            target.SearchTerm = "any";

            _testScheduler.AdvanceBy(TimeSpan.FromSeconds(2).Ticks);

            target.SearchTerm = null;

            _testScheduler.AdvanceBy(TimeSpan.FromSeconds(2).Ticks);

            movieServiceMock
            .Verify(x => x.GetMovies(
                        It.Is <string>(search => search == "any"),
                        It.Is <int>(page => page == 1)),
                    Times.Once);

            movieServiceMock
            .Verify(x => x.GetUpcomingMovies(
                        It.Is <int>(page => page == 1)),
                    Times.Once);
        }
        public void SetSelectedMovie_ValueIsNull_DoesNotNavigate()
        {
            var movieServiceMock = new Mock <IMovieService>();

            var target = new UpcomingMoviesViewModel(
                movieServiceMock.Object,
                _testScheduler,
                _testScheduler,
                _screenMock.Object);

            target.Activator.Activate();

            target.SelectedMovie = null;

            _testScheduler.AdvanceBy(TimeSpan.FromMilliseconds(500).Ticks);

            var currentViewModel = target.HostScreen.Router.GetCurrentViewModel();

            Assert.IsNull(currentViewModel);
        }
        public async Task UpcomingMoviesList_Has_Items_When_Returned_From_Service()
        {
            //Arrange
            var mockList = new List <UpcomingMovie>();

            mockList.Add(new UpcomingMovie
            {
                Id          = 1,
                Overview    = "Test",
                PosterPath  = "testpath",
                ReleaseDate = DateTime.Today,
                Title       = "Test Movie 1"
            });
            mockList.Add(new UpcomingMovie
            {
                Id          = 2,
                Overview    = "Test",
                PosterPath  = "testpath",
                ReleaseDate = DateTime.Today,
                Title       = "Test Movie 2"
            });

            var navigationService     = new Mock <INavigationService>();
            var upcomingMoviesService = new Mock <IUpcomingMoviesService>();

            upcomingMoviesService.Setup
                (m => m.GetUpcomingMovies(It.IsAny <int>()))
            .Returns(Task.FromResult((IEnumerable <UpcomingMovie>)mockList));

            var vm = new UpcomingMoviesViewModel(upcomingMoviesService.Object, navigationService.Object);

            //Act
            await vm.InitializeAsync(null);

            //Assert
            Assert.AreEqual(2, vm.UpcomingMovies.Count);
        }
        public void GetUpcomingMovies_IsExecuting_SetsIsLoading()
        {
            int expectedPage = 2;

            var movieServiceMock = new Mock <IMovieService>();

            movieServiceMock
            .Setup(x => x.GetUpcomingMovies(
                       It.IsAny <int>()))
            .Returns(() => Observable
                     .Return(Enumerable.Empty <Movie>())
                     .Delay(TimeSpan.FromMilliseconds(500), _testScheduler)
                     .DelaySubscription(TimeSpan.FromMilliseconds(500), _testScheduler));

            var target = new UpcomingMoviesViewModel(
                movieServiceMock.Object,
                _testScheduler,
                _testScheduler,
                _screenMock.Object);

            target.Activator.Activate();

            _testScheduler.AdvanceBy(TimeSpan.FromMilliseconds(200).Ticks);

            Assert.IsFalse(target.IsLoading);

            Observable.Return(expectedPage).InvokeCommand(target.GetUpcomingMovies);

            _testScheduler.AdvanceBy(TimeSpan.FromMilliseconds(400).Ticks);

            Assert.IsTrue(target.IsLoading);

            _testScheduler.AdvanceBy(TimeSpan.FromMilliseconds(800).Ticks);

            Assert.IsFalse(target.IsLoading);
        }