public void CreateMovie_Returns_CreatedAtRouteResult()
        {
            // Arrange
            var movieRepositoryMock = new Mock <IMovieRepository>();
            var subGenreIMapperMock = new MapperConfiguration(config =>
            {
                config.AddProfile(new MovieMapper());
            });
            var movieMapper = subGenreIMapperMock.CreateMapper();
            MoviesController movieApiController = new MoviesController(movieRepositoryMock.Object, mapper: movieMapper);
            var movieModel = new MovieModel()
            {
                Name        = "Adult Content",
                DateCreated = DateTime.Parse("15 May 2015"),
                Id          = Guid.NewGuid(),
                GenreId     = Guid.NewGuid(),
                Genres      = new GenreModel(),
            };
            var movieDto = new MoviesCreateDTO()
            {
                Name        = movieModel.Name,
                DateCreated = movieModel.DateCreated,
                GenreId     = movieModel.GenreId,
                SubGenreId  = Guid.NewGuid()
            };

            movieRepositoryMock.Setup(repo => repo.MovieExist(It.IsAny <string>())).Returns(false);
            movieRepositoryMock.Setup(repo => repo.CreateMovie(It.IsAny <MovieModel>())).Returns(true);
            // Act
            var movieResult          = movieApiController.CreateMovie(movieDto);
            var createdAtRouteResult = movieResult as CreatedAtRouteResult;

            // Assert
            Assert.True(createdAtRouteResult.StatusCode is StatusCodes.Status201Created);
        }
        public IActionResult CreateMovie([FromBody] MoviesCreateDTO moviesDto)
        {
            if (moviesDto is null)
            {
                return(BadRequest(ModelState));
            }

            if (_movieRepo.MovieExist(moviesDto.Name))
            {
                ModelState.AddModelError("", "SubGenre already exist!");
                return(StatusCode(404, ModelState));
            }

            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            var movieObj = _mapper.Map <MovieModel>(moviesDto);

            if (!_movieRepo.CreateMovie(movieObj))
            {
                ModelState.AddModelError("", $"Something wrong occured when trying to save record {movieObj.Name}");
                return(StatusCode(500, ModelState));
            }
            return(CreatedAtRoute("GetMovieById", new { movieId = movieObj.Id }, movieObj));
        }