public void Should_ThrowPathNotFoundException_When_WatchedMoviesFileNotFound()
        {
            // Arrange
            IMediaPortalServices mediaPortalServices = Substitute.For <IMediaPortalServices>();

            string          savedMoviesPath = Path.Combine(FakePath, FileName.WatchedMovies.Value);
            IFileOperations fileOperations  = Substitute.For <IFileOperations>();

            fileOperations.FileExists(savedMoviesPath).Returns(false);
            IMoverOperations operations = new MoverOperations(mediaPortalServices, fileOperations);

            // Act & Assert
            Assert.Throws <PathNotFoundException>(() => operations.RestoreWatchedMovies(FakePath));
        }
        public void Should_MarkOneMovieAsWatched_When_OneMovieRestored()
        {
            // Arrange
            IMediaPortalServices mediaPortalServices = Substitute.For <IMediaPortalServices>();
            IContentDirectory    contentDirectory    = Substitute.For <IContentDirectory>();
            IList <MediaItem>    databaseMediaItems  = new List <MediaItem>
            {
                new MockedDatabaseMovie(new MediaLibraryMovie {
                    Imdb = "tt0268380", Title = "Ice Age", Tmdb = null, Year = 2002
                }, 0).Movie,
                new MockedDatabaseMovie(new MediaLibraryMovie {
                    Imdb = "tt0457939", Title = "Title_2", Tmdb = null, Year = 2016
                }, 0).Movie,
                new MockedDatabaseMovie(new MediaLibraryMovie {
                    Imdb = "tt1355630", Title = "Title_3", Tmdb = null, Year = 2013
                }, 0).Movie
            };

            contentDirectory.SearchAsync(Arg.Any <MediaItemQuery>(), true, null, false).Returns(databaseMediaItems);
            mediaPortalServices.GetServerConnectionManager().ContentDirectory.Returns(contentDirectory);
            mediaPortalServices.MarkAsWatched(Arg.Any <MediaItem>()).Returns(true);

            string          savedMoviesPath = Path.Combine(FakePath, FileName.WatchedMovies.Value);
            IFileOperations fileOperations  = Substitute.For <IFileOperations>();

            fileOperations.FileExists(savedMoviesPath).Returns(true);
            string watchedMoviesJson =
                "[{\"imdb\":\"tt0268380\",\"tmdb\":null,\"title\":\"Ice Age\",\"year\":2002}]";

            fileOperations.FileReadAllText(savedMoviesPath).Returns(watchedMoviesJson);

            IMoverOperations operations = new MoverOperations(mediaPortalServices, fileOperations);

            // Act
            RestoreResult result = operations.RestoreWatchedMovies(FakePath);

            // Assert
            Assert.Equal(1, result.MarkedWatchedCount);
            Assert.Equal(1, result.SavedWatchedCount);
        }