コード例 #1
0
        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();
        }
コード例 #2
0
        public async Task <Episode> CreateEpisodeFromCreateViewModelAsync(CreateEpisodeViewModel model)
        {
            var episode = _mapper.Map <Episode>(model);
            var season  = await _seasonService.GetSeasonAsync(model.SeasonId);

            episode.Season = season;
            var videoInfo = new VideoInfo();

            var videos = model.VideoPaths.Select(path => new EpisodeVideo()
            {
                Id        = Path.GetFileNameWithoutExtension(path),
                Location  = path,
                VideoInfo = videoInfo
            }).ToList();

            episode.Location = Path.GetDirectoryName(videos.First().Location);

            var filesCount = Directory.GetFiles(Path.Combine(wwwRoot, episode.Location, "Thumbnails"), "*", SearchOption.TopDirectoryOnly).Length;

            episode.ThumbnailsAmount = filesCount;
            episode.Videos           = videos;

            if (await CreateEpisodeAsync(episode))
            {
                return(episode);
            }

            return(null);
        }
コード例 #3
0
        public async Task <IActionResult> Create([FromBody] CreateEpisodeViewModel episode)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            var episodeToCreate = _mapper.Map <Episode>(episode);

            episodeToCreate = await _episodeService.CreateAsync(episodeToCreate);

            return(CreatedAtAction("GetById", new { id = episodeToCreate.Id }, _mapper.Map <EpisodeViewModel>(episodeToCreate)));
        }
コード例 #4
0
        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);
        }
コード例 #5
0
        public async Task <IActionResult> CreateEpisode(CreateEpisodeViewModel model)
        {
            var episode = await _episodeService.CreateEpisodeFromCreateViewModelAsync(model);

            return(Created($"{HttpContext.Request.Scheme}://{HttpContext.Request.Host}/Episode/{episode.Id}", _mapper.Map <EpisodeViewModel>(episode)));
        }