public async Task Create_ReturnsACreatedAtActionResultAndAddsEpisode_WhenModelStateIsValid()
        {
            var mapper = CreateAutoMapper();

            var episodeServiceMock = new Mock <IEpisodeService>();

            episodeServiceMock.Setup(s => s.CreateAsync(It.IsAny <Episode>()))
            .Returns(Task.FromResult(new Episode()))
            .Verifiable();

            var controller = new EpisodeController(mapper, episodeServiceMock.Object);
            var episode    = new CreateEpisodeViewModel
            {
                Title   = "Episode 1",
                VideoId = "aljklasf"
            };

            var result = await controller.Create(episode);

            var createdAtActionResult = Assert.IsType <CreatedAtActionResult>(result);

            Assert.Equal("GetById", createdAtActionResult.ActionName);
            Assert.IsType <EpisodeViewModel>(createdAtActionResult.Value);
            episodeServiceMock.Verify();
        }
        public async Task Create_ReturnsBadRequestResult_WhenModelStateIsInvalid()
        {
            var mapper = CreateAutoMapper();

            var episodeServiceMock = new Mock <IEpisodeService>();

            episodeServiceMock.Setup(s => s.CreateAsync(It.IsAny <Episode>()))
            .Returns(Task.FromResult(new Episode()));

            var controller = new EpisodeController(mapper, episodeServiceMock.Object);

            controller.ModelState.AddModelError("Title", "A title is required");

            var newEpisode = new CreateEpisodeViewModel();

            var result = await controller.Create(newEpisode);

            var badRequestResult = Assert.IsType <BadRequestObjectResult>(result);

            Assert.IsType <SerializableError>(badRequestResult.Value);
        }