Пример #1
0
        public void ConvertToEpisode_Should_Return_An_Episode()
        {
            var baseItem = new EpisodeBuilder("123", "456", "1").BuildBaseItemDto();
            var logger   = LogFactory.CreateLoggerForType(typeof(ShowConverterTests), string.Empty);
            var episode  = baseItem.ConvertToEpisode("456", logger);

            episode.Should().NotBeNull();
            episode.Id.Should().NotBeNullOrWhiteSpace();
            episode.Name.Should().Be(baseItem.Name);
            episode.ParentId.Should().Be(baseItem.ParentId);
            episode.DateCreated.Should().Be(baseItem.DateCreated);
            episode.Path.Should().Be(baseItem.Path);
            episode.SortName.Should().Be(baseItem.SortName);
            episode.RunTimeTicks.Should().Be(baseItem.RunTimeTicks);
            episode.Container.Should().Be(baseItem.Container);
            episode.CommunityRating.Should().Be(baseItem.CommunityRating);
            episode.MediaType.Should().Be(baseItem.Type);
            episode.PremiereDate.Should().Be(baseItem.PremiereDate);
            episode.ProductionYear.Should().Be(baseItem.ProductionYear);
            episode.Video3DFormat.Should().Be(baseItem.Video3DFormat);
            episode.Primary.Should().Be(baseItem.ImageTags.FirstOrDefault(y => y.Key == ImageType.Primary).Value);
            episode.Thumb.Should().Be(baseItem.ImageTags.FirstOrDefault(y => y.Key == ImageType.Thumb).Value);
            episode.Logo.Should().Be(baseItem.ImageTags.FirstOrDefault(y => y.Key == ImageType.Logo).Value);
            episode.Banner.Should().Be(baseItem.ImageTags.FirstOrDefault(y => y.Key == ImageType.Banner).Value);
            episode.IMDB.Should().Be(baseItem.ProviderIds.FirstOrDefault(y => y.Key == "Imdb").Value);
            episode.TMDB.Should().Be(baseItem.ProviderIds.FirstOrDefault(y => y.Key == "Tmdb").Value);
            episode.TVDB.Should().Be(baseItem.ProviderIds.FirstOrDefault(y => y.Key == "Tvdb").Value);
            episode.AudioStreams.Count.Should().Be(1);
            episode.SubtitleStreams.Count.Should().Be(1);
            episode.VideoStreams.Count.Should().Be(1);

            var audioStream = baseItem.MediaStreams.First(y => y.Type == MediaStreamType.Audio);

            episode.AudioStreams[0].BitRate.Should().Be(audioStream.BitRate);
            episode.AudioStreams[0].ChannelLayout.Should().Be(audioStream.ChannelLayout);
            episode.AudioStreams[0].Language.Should().Be(audioStream.Language);
            episode.AudioStreams[0].Channels.Should().Be(audioStream.Channels);
            episode.AudioStreams[0].Id.Should().NotBeNullOrWhiteSpace();
            episode.AudioStreams[0].Codec.Should().Be(audioStream.Codec);
            episode.AudioStreams[0].SampleRate.Should().Be(audioStream.SampleRate);

            var subtitleStream = baseItem.MediaStreams.First(y => y.Type == MediaStreamType.Subtitle);

            episode.SubtitleStreams[0].Language.Should().Be(subtitleStream.Language);
            episode.SubtitleStreams[0].Id.Should().NotBeNullOrWhiteSpace();
            episode.SubtitleStreams[0].Codec.Should().Be(subtitleStream.Codec);
            episode.SubtitleStreams[0].DisplayTitle.Should().Be(subtitleStream.DisplayTitle);
            episode.SubtitleStreams[0].IsDefault.Should().Be(subtitleStream.IsDefault);

            var videoStream = baseItem.MediaStreams.First(y => y.Type == MediaStreamType.Video);

            episode.VideoStreams[0].BitRate.Should().Be(videoStream.BitRate);
            episode.VideoStreams[0].Language.Should().Be(videoStream.Language);
            episode.VideoStreams[0].Channels.Should().Be(videoStream.Channels);
            episode.VideoStreams[0].Id.Should().NotBeNullOrWhiteSpace();
            episode.VideoStreams[0].AspectRatio.Should().Be(videoStream.AspectRatio);
            episode.VideoStreams[0].AverageFrameRate.Should().Be(videoStream.AverageFrameRate);
            episode.VideoStreams[0].Height.Should().Be(videoStream.Height);
            episode.VideoStreams[0].Width.Should().Be(videoStream.Width);
        }
Пример #2
0
 public void AssembleEpisodeParts(EpisodeBuilder builder, string title)
 {
     builder.FilmVideo();
     builder.RecordAudio();
     builder.ProduceSpecialEffect();
     builder.AddTitle(title);
 }
Пример #3
0
            public List <Episode> BuildEpisodes()
            {
                var result = new List <Episode>();

                foreach (var episodeNode in _doc.Descendants("Episode"))
                {
                    var episode = new EpisodeBuilder(episodeNode).GetResult();
                    result.Add(episode);
                }

                return(result);
            }
Пример #4
0
        public async Task Get_episodes_query_handler_should_return_last_page()
        {
            // Arrange
            var lastEpisode  = new EpisodeBuilder().Generate(20).SaveChanges(_testFixture.Context).Build().Last();
            var queryHandler = new GetEpisodesQueryHandler(_testFixture.Context, _testFixture.Mapper);

            // Act
            var response = await queryHandler.Handle(new GetEpisodesQuery { PageNumber = 17, PageSize = 4 }, CancellationToken.None);

            // Assert
            response.ShouldBeOfType(typeof(List <EpisodeViewModel>));
            response.Last().Name.ShouldBe(lastEpisode.Name);
        }
Пример #5
0
        public async Task Get_episodes_query_handler_should_return_five_episodes()
        {
            // Arrange
            var episodes     = new EpisodeBuilder().Generate(15).SaveChanges(_testFixture.Context).Build();
            var queryHandler = new GetEpisodesQueryHandler(_testFixture.Context, _testFixture.Mapper);

            // Act
            var response = await queryHandler.Handle(new GetEpisodesQuery { PageNumber = 2, PageSize = 5 }, CancellationToken.None);

            // Assert
            response.ShouldBeOfType(typeof(List <EpisodeViewModel>));
            response.Count.ShouldBe(5);
        }
        public static async Task CreateNewEpisode(XElement title,
                                                  Podcast podcast, IEnumerable <XElement> childElements)
        {
            Logger.LogInformation("Adding Episode: " + title.Value + ". " + podcast.Id);

            var episode       = new EpisodeBuilder();
            var children      = childElements.ToList();
            var enclosure     = children.FirstOrDefault(x => x.Name == EnclosureElementName);
            var link          = children.FirstOrDefault(x => x.Name == LinkElementName);
            var publishedDate = children.FirstOrDefault(x => x.Name == PublishedDateElementName);

            //Author
            var itunesAuthor = children.FirstOrDefault(x => x.Name.LocalName == AuthorElementName);
            var author       = children.FirstOrDefault(x => x.Name == AuthorElementName);

            //Description
            var description   = children.FirstOrDefault(x => x.Name == DescriptionElementName);
            var itunesSummary = children.FirstOrDefault(x => x.Name.LocalName == SummaryElementName);
            var summary       = children.FirstOrDefault(x => x.Name == SummaryElementName);

            //Duration
            var itunesDuration = children.FirstOrDefault(x => x.Name.LocalName == DurationElementName);
            var duration       = children.FirstOrDefault(x => x.Name == DurationElementName);

            //Tags
            var keywords = children.FirstOrDefault(x => x.Name.LocalName == KeywordsElementName);
            var category = children.FirstOrDefault(x => x.Name == CategoryElementName);

            var newEpisode = episode
                             .AddTitle(title.Value)
                             .AddImageUrl(podcast.ImageUrl)
                             .AddAudioTypeAndAudioUrl(enclosure)
                             .AddSourceUrl(link)
                             .AddPodcast(podcast)
                             .AddPublishedDate(publishedDate)
                             .AddAuthor(itunesAuthor, author)
                             .AddDescription(description, itunesSummary, summary)
                             .AddAudioDuration(itunesDuration, duration)
                             .Build();

            var tempId = Guid.NewGuid().ToString();

            Episodes.Add(tempId, newEpisode);

            Logger.LogInformation("Added Episode: " + newEpisode.Title);

            var tagsFromXml = GetTagsFromXml(keywords, category);

            Logger.LogInformation("Checking for new tags for episode: " + newEpisode.Title);
            await CreateTags(newEpisode, tagsFromXml, podcast.PodcastTags, tempId).ConfigureAwait(false);
        }
        public async Task Create_character_command_handler_should_return_id_of_created_character()
        {
            // Arrange
            var episode        = new EpisodeBuilder().Generate().SaveChanges(_testFixture.Context).Build().First();
            var commandHandler = new CreateCharacterCommandHandler(_testFixture.Context, _testFixture.Mapper);

            // Act
            var response =
                await commandHandler.Handle(new CreateCharacterCommand
                                            { Name = "test char", EpisodesIds = new [] { episode.Id }, FriendsIds = new int[] {} }, CancellationToken.None);

            // Assert
            response.ShouldBeOfType(typeof(int));
        }
        public async Task Edit_episode_command_validator_should_pass()
        {
            // Arrange
            var episodeInDb = new EpisodeBuilder().Generate().SaveChanges(_testFixture.Context).Build().First();
            var validator   = new EditEpisodeCommandValidator(_testFixture.Context);
            var command     = new EditEpisodeCommand {
                Id = episodeInDb.Id, Name = episodeInDb.Name + "something"
            };

            // Act
            var validationResult = await validator.ValidateAsync(command);

            // Assert
            validationResult.Errors.ShouldBeEmpty();
        }
Пример #9
0
        public async Task Get_episode_query_handler_should_pass()
        {
            // Arrange
            var episode = new EpisodeBuilder().Generate().SaveChanges(_testFixture.Context).Build().First();
            var query   = new GetEpisodeQuery {
                Id = episode.Id
            };
            var queryHandler = new GetEpisodeQueryHandler(_testFixture.Context, _testFixture.Mapper);

            // Act
            var response = await queryHandler.Handle(query, CancellationToken.None);

            // Assert
            response.Name.ShouldBe(episode.Name);
            response.ShouldBeOfType(typeof(EpisodeViewModel));
        }
Пример #10
0
        public void GetNonSpecialEpisodeCount_Should_Count_Multi_Episode_Entries()
        {
            var id      = Guid.NewGuid().ToString();
            var episode = new EpisodeBuilder(Guid.NewGuid().ToString(), id, Guid.NewGuid().ToString())
                          .WithIndexNumber(8)
                          .WithIndexNumberEnd(9)
                          .Build();

            var show = new ShowBuilder(_show)
                       .AddEpisode(episode)
                       .Build();

            var count = show.GetNonSpecialEpisodeCount(false);

            count.Should().Be(9);
        }
        public async Task Edit_episode_command_handler_should_pass()
        {
            // Arrange
            var episode = new EpisodeBuilder().Generate().SaveChanges(_testFixture.Context).Build().First();
            var command = new EditEpisodeCommand {
                Id = episode.Id, Name = "changed"
            };
            var commandHandler = new EditEpisodeCommandHandler(_testFixture.Context, _testFixture.Mapper);

            // Act
            var response = await commandHandler.Handle(command, CancellationToken.None);

            // Assert
            response.ShouldBeOfType <int>();
            episode.Name.ShouldBe("changed");
        }
Пример #12
0
        public async Task Delete_episode_command_handler_should_pass()
        {
            // Arrange
            var episode = new EpisodeBuilder().Generate().SaveChanges(_testFixture.Context).Build().First();
            var command = new DeleteEpisodeCommand {
                Id = episode.Id
            };
            var commandHandler = new DeleteEpisodeCommandHandler(_testFixture.Context);

            // Act
            var response = await commandHandler.Handle(command, CancellationToken.None);

            // Assert
            response.ShouldBe(Unit.Value);
            episode.IsActive.ShouldBe(false);
        }
        public async Task Create_character_command_validator_should_pass()
        {
            // Arrange
            var episode = new EpisodeBuilder().Generate().SaveChanges(_testFixture.Context).Build().First();
            var command = new CreateCharacterCommand
            {
                EpisodesIds = new[] { episode.Id }, Name = "Han Solo", FriendsIds = new int[] { }
            };
            var validator = new CreateCharacterCommandValidator(_testFixture.Context);

            // Act
            var validationResult = await validator.ValidateAsync(command);

            // Assert
            validationResult.Errors.ShouldBeEmpty();
        }
        public async Task Edit_episode_command_validator_should_return_empty_name_validation_error()
        {
            // Arrange
            var episodeInDb = new EpisodeBuilder().Generate().SaveChanges(_testFixture.Context).Build().First();
            var validator   = new EditEpisodeCommandValidator(_testFixture.Context);
            var command     = new EditEpisodeCommand {
                Id = episodeInDb.Id, Name = ""
            };

            // Act
            var validationResult = await validator.ValidateAsync(command);

            // Assert
            validationResult.Errors.Count.ShouldBe(1);
            validationResult.Errors.First().ErrorCode.ShouldBe("NotEmptyValidator");
        }
Пример #15
0
        public void AddEpisode_Should_Add_The_Episode()
        {
            RunTest(() =>
            {
                var episodeOne = new EpisodeBuilder(Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), "1").Build();
                _showRepository.AddEpisode(episodeOne);

                using (var database = _context.LiteDatabase)
                {
                    var collection = database.GetCollection <Episode>();
                    var episode    = collection.FindById(episodeOne.Id);
                    episode.Should().NotBeNull();
                    episode.Id.Should().Be(episodeOne.Id);
                }
            });
        }
        public async Task Edit_episode_command_validator_should_return_unique_name_validation_error()
        {
            // Arrange
            var episodesInDb = new EpisodeBuilder().Generate(2).SaveChanges(_testFixture.Context).Build();
            var validator    = new EditEpisodeCommandValidator(_testFixture.Context);
            var command      = new EditEpisodeCommand {
                Id = episodesInDb.First().Id, Name = episodesInDb.Last().Name
            };

            // Act
            var validationResult = await validator.ValidateAsync(command);

            // Assert
            validationResult.Errors.Count.ShouldBe(1);
            validationResult.Errors.First().ErrorCode.ShouldBe("PredicateValidator");
            validationResult.Errors.First().ErrorMessage.ShouldBe("The episode name has to be unique");
        }
Пример #17
0
        public async Task Get_episode_query_handler_should_throw_not_found_exception()
        {
            // Arrange
            var episode = new EpisodeBuilder().Generate().SaveChanges(_testFixture.Context).Build().First();
            var query   = new GetEpisodeQuery {
                Id = episode.Id + 1
            };
            var queryHandler = new GetEpisodeQueryHandler(_testFixture.Context, _testFixture.Mapper);

            // Act
            async Task Act() => await queryHandler.Handle(query, CancellationToken.None);

            var ex = await Record.ExceptionAsync(Act);

            // Assert
            ex.ShouldBeOfType <NotFoundException>();
        }
Пример #18
0
        public async Task Delete_episode_command_handler_should_throw_not_found_exception()
        {
            // Arrange
            var episode = new EpisodeBuilder().Generate().SaveChanges(_testFixture.Context).Build().First();
            var command = new DeleteEpisodeCommand {
                Id = episode.Id + 1
            };
            var commandHandler = new DeleteEpisodeCommandHandler(_testFixture.Context);

            // Act
            async Task Act() => await commandHandler.Handle(command, CancellationToken.None);

            var ex = await Record.ExceptionAsync(Act);

            // Assert
            ex.ShouldBeOfType <NotFoundException>();
        }
        public async Task Create_character_command_validator_should_return_no_episodes_validation_error()
        {
            // Arrange
            var episode = new EpisodeBuilder().Generate().SaveChanges(_testFixture.Context).Build().First();
            var command = new CreateCharacterCommand
            {
                EpisodesIds = new[] { episode.Id + 1 }, Name = "Han Solo", FriendsIds = new int[] { }
            };
            var validator = new CreateCharacterCommandValidator(_testFixture.Context);

            // Act
            var validationResult = await validator.ValidateAsync(command);

            // Assert
            validationResult.Errors.Count.ShouldBe(1);
            validationResult.Errors.First().ErrorCode.ShouldBe("PredicateValidator");
            validationResult.Errors.First().ErrorMessage.ShouldBe("Character has to star in at least one episode");
        }
        public async Task Create_character_command_validator_should_return_unique_name_validation_error()
        {
            // Arrange
            var episode   = new EpisodeBuilder().Generate().SaveChanges(_testFixture.Context).Build().First();
            var character = new CharacterBuilder().Generate().SaveChanges(_testFixture.Context).Build().First();
            var command   = new CreateCharacterCommand
            {
                EpisodesIds = new[] { episode.Id }, Name = character.Name, FriendsIds = new int[] { }
            };
            var validator = new CreateCharacterCommandValidator(_testFixture.Context);

            // Act
            var validationResult = await validator.ValidateAsync(command);

            // Assert
            validationResult.Errors.Count.ShouldBe(1);
            validationResult.Errors.First().ErrorCode.ShouldBe("PredicateValidator");
            validationResult.Errors.First().ErrorMessage.ShouldBe("The character name has to be unique");
        }
        public async Task Edit_character_command_handler_should_throw_not_found_exception()
        {
            // Arrange
            var episode           = new EpisodeBuilder().Generate().SaveChanges(_testFixture.Context).Build().First();
            var characterToUpdate = new CharacterBuilder().Generate().SaveChanges(_testFixture.Context).Build().First();
            var command           = new EditCharacterCommand
            {
                Id          = characterToUpdate.Id + 1,
                Name        = "name",
                EpisodesIds = new[] { episode.Id },
                FriendsIds  = new int[] { }
            };
            var commandHandler = new EditCharacterCommandHandler(_testFixture.Context, _testFixture.Mapper);

            async Task Act() => await commandHandler.Handle(command, CancellationToken.None);

            var ex = await Record.ExceptionAsync(Act);

            // Assert
            ex.ShouldBeOfType <NotFoundException>();
        }
        public async Task Edit_character_command_handler_should_return_id_of_updated_character()
        {
            // Arrange
            var episode           = new EpisodeBuilder().Generate().SaveChanges(_testFixture.Context).Build().First();
            var characterToUpdate = new CharacterBuilder().Generate().SaveChanges(_testFixture.Context).Build().First();
            var command           = new EditCharacterCommand
            {
                Id          = characterToUpdate.Id,
                Name        = "changed name",
                EpisodesIds = new[] { episode.Id },
                FriendsIds  = new int[] {}
            };
            var commandHandler = new EditCharacterCommandHandler(_testFixture.Context, _testFixture.Mapper);

            // Act
            var result = await commandHandler.Handle(command, CancellationToken.None);

            // Assert
            result.ShouldBeOfType(typeof(int));
            result.ShouldBe(characterToUpdate.Id);
        }
        public async Task Edit_character_command_validator_should_return_friend_with_itself_validation_error()
        {
            // Arrange
            var episode           = new EpisodeBuilder().Generate().SaveChanges(_testFixture.Context).Build().First();
            var characterToUpdate = new CharacterBuilder().Generate().SaveChanges(_testFixture.Context).Build().First();
            var command           = new EditCharacterCommand
            {
                Id          = characterToUpdate.Id,
                Name        = characterToUpdate.Name,
                EpisodesIds = new[] { episode.Id },
                FriendsIds  = new int[] { characterToUpdate.Id }
            };
            var validator = new EditCharacterCommandValidator(_testFixture.Context);

            // Act
            var validationResult = await validator.ValidateAsync(command);

            // Assert
            validationResult.Errors.Count.ShouldBe(1);
            validationResult.Errors.First().ErrorCode.ShouldBe("PredicateValidator");
            validationResult.Errors.First().ErrorMessage.ShouldBe("Character cannot be friend with itself");
        }
        public async Task Edit_episode_command_validator_should_return_is_deleted_validation_error()
        {
            // Arrange
            var episodeInDb = new EpisodeBuilder().Generate().SaveChanges(_testFixture.Context).Build().First();
            var validator   = new EditEpisodeCommandValidator(_testFixture.Context);
            var entity      = _testFixture.Context.Episodes.Find(episodeInDb.Id);

            entity.IsActive = false;
            _testFixture.Context.Episodes.Update(entity);
            _testFixture.Context.SaveChanges();
            var command = new EditEpisodeCommand {
                Id = episodeInDb.Id, Name = episodeInDb.Name
            };

            // Act
            var validationResult = await validator.ValidateAsync(command);

            // Assert
            validationResult.Errors.Count.ShouldBe(1);
            validationResult.Errors.First().ErrorCode.ShouldBe("PredicateValidator");
            validationResult.Errors.First().ErrorMessage.ShouldBe("This episode was deleted");
        }
        public async Task Get_character_query_handler_should_pass()
        {
            // Arrange
            var character = new CharacterBuilder().Generate().Build().First();
            var episode   = new EpisodeBuilder().Generate().SaveChanges(_testFixture.Context).Build().First();

            character.Episodes.Add(new CharacterEpisode {
                CharacterId = character.Id, EpisodeId = episode.Id
            });
            _testFixture.Context.Characters.Update(character);
            _testFixture.Context.SaveChanges();
            var query = new GetCharacterQuery {
                Id = character.Id
            };
            var queryHandler = new GetCharacterQueryHandler(_testFixture.Context, _testFixture.Mapper);

            // Act
            var response = await queryHandler.Handle(query, CancellationToken.None);

            // Assert
            response.Name.ShouldBe(character.Name);
            response.Episodes.Count.ShouldBe(1);
            response.Episodes.First().Name.ShouldBe(episode.Name);
        }
Пример #26
0
        public Episode BuildEpisode(int episodeId, string lang)
        {
            var builder = new EpisodeBuilder(_dataProvider.GetEpisode(episodeId, lang).Descendants("Episode").First());

            return(builder.GetResult());
        }
Пример #27
0
            public List<Episode> BuildEpisodes()
            {
                var result = new List<Episode>();

                foreach (var episodeNode in _doc.Descendants("Episode"))
                {
                    var episode = new EpisodeBuilder(episodeNode).GetResult();
                    result.Add(episode);
                }

                return result;
            }
Пример #28
0
 public Episode BuildEpisode(int episodeId, string lang)
 {
     var builder = new EpisodeBuilder(_dataProvider.GetEpisode(episodeId, lang).Descendants("Episode").First());
     return builder.GetResult();
 }