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); }
public void AssembleEpisodeParts(EpisodeBuilder builder, string title) { builder.FilmVideo(); builder.RecordAudio(); builder.ProduceSpecialEffect(); builder.AddTitle(title); }
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); }
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); }
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(); }
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)); }
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"); }
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"); }
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"); }
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>(); }
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); }
public Episode BuildEpisode(int episodeId, string lang) { var builder = new EpisodeBuilder(_dataProvider.GetEpisode(episodeId, lang).Descendants("Episode").First()); return(builder.GetResult()); }
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; }
public Episode BuildEpisode(int episodeId, string lang) { var builder = new EpisodeBuilder(_dataProvider.GetEpisode(episodeId, lang).Descendants("Episode").First()); return builder.GetResult(); }