public void AddAllPreviousMovieGenres_WhenMovieIsRestored()
        {
            // Arrange
            var contextOptions = new DbContextOptionsBuilder <AlphaCinemaContext>()
                                 .UseInMemoryDatabase(databaseName: "AddAllPreviousMovieGenres_WhenMovieIsRestored")
                                 .Options;

            movie.IsDeleted      = true;
            movieGenre.IsDeleted = true;
            movie.MovieGenres.Add(movieGenre);

            //Act
            using (var actContext = new AlphaCinemaContext(contextOptions))
            {
                actContext.Movies.Add(movie);
                actContext.SaveChanges();
                var unitOfWork      = new UnitOfWork(actContext);
                var addMovieCommand = new MovieServices(unitOfWork);
                addMovieCommand.AddNewMovie(testMovieName, testMovieDescription,
                                            testMovieReleaseYear, testMovieDuration);
            }

            //Assert
            using (var assertContext = new AlphaCinemaContext(contextOptions))
            {
                Assert.IsFalse(movie.MovieGenres.First().IsDeleted);
            }
        }
        public void ThrowArgumentException_WhenMovieNameIsEmpty()
        {
            //Arrange
            int maxMovieNameLength = 50;
            var longMovieName      = new string('m', maxMovieNameLength + 1);

            var movieService = new MovieServices(unitOfWork.Object);

            //Act and Assert
            Assert.ThrowsException <NullReferenceException>(() => movieService.AddNewMovie("", testMovieDescription,
                                                                                           testMovieReleaseYear, testMovieDuration));
        }
        public void ThrowEntityAlreadyExistsException_WhenMovieExist()
        {
            //Arrange
            unitOfWork.Setup(x => x.Movies).Returns(movieRepoMock.Object);
            movieRepoMock.Setup(repo => repo.AllAndDeleted()).Returns(predifinedListOfMovies.AsQueryable());

            //Act and Assert
            var addMovieCommand = new MovieServices(unitOfWork.Object);

            Assert.ThrowsException <EntityAlreadyExistsException>(() => addMovieCommand.AddNewMovie(testMovieName, testMovieDescription,
                                                                                                    testMovieReleaseYear, testMovieDuration));
        }
        public void ThrowArgumentException_WhenMovieDescriptionIsNotInRange()
        {
            //Arrange
            int maxMovieNameLength   = 150;
            var longMovieDescription = new string('m', maxMovieNameLength + 1);

            var movieService = new MovieServices(unitOfWork.Object);

            //Act and Assert
            Assert.ThrowsException <ArgumentException>(() => movieService.AddNewMovie(testMovieName, longMovieDescription,
                                                                                      testMovieReleaseYear, testMovieDuration));
        }
        public void UnmarkMovieAsDeleted_WhenMovieExistButIsDeleted()
        {
            //Arrange
            movie.IsDeleted = true;

            unitOfWork.Setup(x => x.Movies).Returns(movieRepoMock.Object);
            unitOfWork.Setup(p => p.Projections.AllAndDeleted()).Returns(new List <Projection>().AsQueryable());
            unitOfWork.Setup(mg => mg.MovieGenres.AllAndDeleted()).Returns(new List <MovieGenre>().AsQueryable());
            movieRepoMock.Setup(repo => repo.AllAndDeleted()).Returns(predifinedListOfMovies.AsQueryable());

            //Act
            var addMovieCommand = new MovieServices(unitOfWork.Object);

            addMovieCommand.AddNewMovie(testMovieName, testMovieDescription, testMovieReleaseYear, testMovieDuration);

            //Assert
            Assert.IsFalse(movie.IsDeleted);
        }
        public void CallAddMethodOnMovie_WhenParametersAreCorrect()
        {
            //Arrange
            var movieMock = new Mock <Movie>();

            unitOfWork.Setup(x => x.Movies).Returns(movieRepoMock.Object);

            movieRepoMock
            .Setup(repo => repo.Add(It.IsAny <Movie>()))
            .Callback <Movie>((movie) =>
            {
                predifinedListOfMovies.Add(movieMock.Object);
            });

            //Act
            var addMovieCommand = new MovieServices(unitOfWork.Object);

            addMovieCommand.AddNewMovie(testMovieName, testMovieDescription,
                                        testMovieReleaseYear, testMovieDuration);

            //Assert
            Assert.AreEqual(2, predifinedListOfMovies.Count);
        }