private OptionAsync <TvDbEpisodeData> GetTvDbEpisodeAsync(int tvDbSeriesId, int seasonIndex, int episodeIndex) { return(_tvDbClient.GetEpisodesAsync(tvDbSeriesId) .MapAsync(episodes => episodes.Find(e => e.AiredSeason == seasonIndex && e.AiredEpisodeNumber == episodeIndex))); }
public async Task LoadFrom_NoMatchingEpisode_Fails() { _embyItemData.Identifier.Returns(new ItemIdentifier(4, 1, "Name")); _tvDbClient.GetEpisodesAsync(22) .Returns(new[] { TvDbTestData.Episode(1, 1, 1, name: "NonMatch1"), TvDbTestData.Episode(1, 4, 2, name: "NonMatch2") }.ToList()); var loader = new TvDbEpisodeFromEmbyData(_sources, _tvDbClient, _titleNormaliser); var result = await loader.LoadFrom(_embyItemData); result.IsLeft.Should().BeTrue(); result.IfLeft(f => f.Reason.Should().Be("Failed to find TvDb episode")); }
public Task <Either <ProcessFailedResult, ISourceData> > LoadFrom(IEmbyItemData embyItemData) { var resultContext = new ProcessResultContext(nameof(TvDbEpisodeFromEmbyData), embyItemData.Identifier.Name, embyItemData.ItemType); var seriesId = embyItemData.GetParentId(MediaItemTypes.Series, _sources.TvDb); return(seriesId.ToEitherAsync(resultContext.Failed("No TvDb Id found on parent series")) .BindAsync(id => _tvDbClient.GetEpisodesAsync(id) .ToEitherAsync(resultContext.Failed($"Failed to load parent series with TvDb Id '{id}'"))) .BindAsync(episodes => FindEpisode(episodes, embyItemData.Identifier.Name, embyItemData.Identifier.Index, embyItemData.Identifier.ParentIndex, resultContext)) .MapAsync(CreateSourceData)); }
public void Setup() { _tvDbClient = Substitute.For <ITvDbClient>(); _aniDbClient = Substitute.For <IAniDbClient>(); _tvDbEpisodeA = TestData.TvDbTestData.Episode(12, 48, 2); _tvDbEpisodeB = TestData.TvDbTestData.Episode(45, 7, 2); _aniDbEpisodeA = new AniDbEpisodeData { RawEpisodeNumber = new EpisodeNumberData { RawNumber = "44", RawType = 1 } }; _aniDbEpisodeB = new AniDbEpisodeData { RawEpisodeNumber = new EpisodeNumberData { RawNumber = "23", RawType = 1 } }; _tvDbClient.GetEpisodesAsync(123) .Returns(Option <List <TvDbEpisodeData> > .Some(new List <TvDbEpisodeData> { _tvDbEpisodeA, _tvDbEpisodeB })); _aniDbClient.GetSeriesAsync(77) .Returns(Option <AniDbSeriesData> .Some(new AniDbSeriesData { Episodes = new[] { _aniDbEpisodeA, _aniDbEpisodeB } })); _mapper = new GroupMappingEpisodeMapper(_tvDbClient, _aniDbClient, new ConsoleLogManager()); }