public void SeriesMappings_MapsAllFields() { var source = new TvDbSeriesData(1, "SeriesName", new DateTime(2017, 1, 2, 3, 4, 5), "Network", 30, AirDay.Monday, "6am", 55.6f, new[] { "Alias" }, new[] { "Genre1", "Genre2", "Genre3", "Tag1", "Tag2" }, "Overview"); var target = new MetadataResult <Series> { Item = new Series() }; var tvDbSourceMappingConfiguration = new TvDbSourceMappingConfiguration(); tvDbSourceMappingConfiguration.GetSeriesMappings(3, true, true, TitleType.Localized, "en") .All(m => m.CanApply(source, target)) .Should() .BeTrue(); tvDbSourceMappingConfiguration.GetSeriesMappings(3, true, true, TitleType.Localized, "en") .Iter(m => m.Apply(source, target)); target.Item.PremiereDate.Should().Be(new DateTime(2017, 1, 2, 3, 4, 5)); target.Item.Overview.Should().Be("Overview"); target.Item.Genres.Should().BeEquivalentTo("Genre1", "Genre2", "Genre3"); target.Item.Tags.Should().BeEquivalentTo("Tag1", "Tag2"); target.Item.CommunityRating.Should().Be(55.6f); target.Item.AirDays.Should().BeEquivalentTo(new[] { DayOfWeek.Monday }); target.Item.AirTime.Should().Be("6am"); }
public void EpisodeMappings_MapsAllFields() { var seriesSource = new TvDbSeriesData(1, "SeriesName", new DateTime(2017, 1, 2, 3, 4, 5), "Network", 30, AirDay.Monday, "6am", 55.6f, new[] { "Alias" }, new[] { "Genre1", "Genre2", "Genre3", "Tag1", "Tag2" }, "Overview"); var source = new TvDbEpisodeData(3, "EpisodeName", 5, 2, 6, 123, new DateTime(2017, 4, 3, 12, 0, 2), "Overview", 5.23f, 23); var target = new MetadataResult <Episode> { Item = new Episode() }; var tvDbSourceMappingConfiguration = new TvDbSourceMappingConfiguration(); var mappings = tvDbSourceMappingConfiguration.GetEpisodeMappings(3, true, true, TitleType.Localized, "en").ToList(); mappings .All(m => m.CanApply(source, target) || m.CanApply(seriesSource, target)) .Should() .BeTrue(); mappings .Where(m => m.CanApply(source, target)) .Iter(m => m.Apply(source, target)); mappings .Where(m => m.CanApply(seriesSource, target)) .Iter(m => m.Apply(seriesSource, target)); target.Item.PremiereDate.Should().Be(new DateTime(2017, 4, 3, 12, 0, 2)); target.Item.Overview.Should().Be("Overview"); target.Item.CommunityRating.Should().Be(5.23f); target.Item.Genres.Should().BeEquivalentTo("Genre1", "Genre2", "Genre3"); target.Item.Tags.Should().BeEquivalentTo("Tag1", "Tag2"); }
private ISourceData CreateSourceData(TvDbSeriesData tvDbSeriesData) { return(new SourceData <TvDbSeriesData>(this.sources.TvDb, tvDbSeriesData.Id, new ItemIdentifier(Option <int> .None, Option <int> .None, tvDbSeriesData.SeriesName), tvDbSeriesData)); }
public async Task GetSeriesAsync_NoLocalSeriesData_ReturnsNewSeriesData() { var series = new TvDbSeriesData(4, "TestSeries", new DateTime(2017, 1, 1, 1, 1, 1), string.Empty, 2, AirDay.Monday, string.Empty, 4f, new[] { "Alias1", "Alias2" }, new[] { "Genre1", "Genre2" }, "Overview"); this.jsonConnection.GetAsync(Arg.Any <GetSeriesRequest>(), Arg.Any <Option <string> >()) .Returns(new Response <GetSeriesRequest.Response>(new GetSeriesRequest.Response(series))); var tvDbClient = new TvDbClientV2(this.jsonConnection, this.fileCache, this.applicationPaths, this.logManager, new JsonSerialiser(), new PluginConfiguration()); var seriesResult = await tvDbClient.GetSeriesAsync(4); seriesResult.IsSome.Should().BeTrue(); seriesResult.ValueUnsafe().Should().Be(series); }
public async Task GetSeriesAsync_NoLocalSeriesData_RequestsSeriesData() { var series = new TvDbSeriesData(4, "TestSeries", new DateTime(2017, 1, 1, 1, 1, 1), string.Empty, 2, AirDay.Monday, string.Empty, 4f, new[] { "Alias1", "Alias2" }, new[] { "Genre1", "Genre2" }, "Overview"); this.jsonConnection.GetAsync(Arg.Any <GetSeriesRequest>(), Arg.Any <Option <string> >()) .Returns(new Response <GetSeriesRequest.Response>(new GetSeriesRequest.Response(series))); var tvDbClient = new TvDbClientV2(this.jsonConnection, this.fileCache, this.applicationPaths, this.logManager, new JsonSerialiser(), new PluginConfiguration()); await tvDbClient.GetSeriesAsync(4); await this.jsonConnection.ReceivedWithAnyArgs(1) .GetAsync <GetSeriesRequest.Response>(null, Option <string> .None); }
public async Task GetSeriesAsync_NoLocalSeriesData_SavesNewSeriesData() { var series = new TvDbSeriesData(4, "TestSeries", new DateTime(2017, 1, 1, 1, 1, 1), "", 2, AirDay.Monday, "", 4f, new[] { "Alias1", "Alias2" }, new[] { "Genre1", "Genre2" }, "Overview"); _jsonConnection.GetAsync(Arg.Any <GetSeriesRequest>(), Arg.Any <Option <string> >()) .Returns(new Response <GetSeriesRequest.Response>(new GetSeriesRequest.Response(series))); var tvDbClient = new TvDbClient(_jsonConnection, _fileCache, _applicationPaths, _logManager, new JsonSerialiser(), new PluginConfiguration()); await tvDbClient.GetSeriesAsync(4); _fileCache.Received(1) .SaveFile(Arg.Any <TvDbSeriesFileSpec>(), Arg.Is <TvDbSeriesData>(d => d == series)); }
public void SeriesMappings_DontMapEmptyFields() { var source = new TvDbSeriesData(1, "SeriesName", Option <DateTime> .None, "Network", 30, Option <AirDay> .None, "6am", 0, new[] { "Alias" }, new[] { "Genre1", "Genre2", "Genre3", "Tag1", "Tag2" }, ""); var target = new MetadataResult <Series> { Item = new Series() }; var tvDbSourceMappingConfiguration = new TvDbSourceMappingConfiguration(); tvDbSourceMappingConfiguration.GetSeriesMappings(3, true, true, TitleType.Localized, "en") .Where(m => !m.CanApply(source, target)) .Select(m => m.TargetPropertyName) .Should() .BeEquivalentTo(nameof(target.Item.PremiereDate), nameof(target.Item.CommunityRating), nameof(target.Item.Overview), nameof(target.Item.AirDays)); }
public async Task GetSeriesAsync_LocalSeriesData_ReturnsLocalSeriesData() { var series = new TvDbSeriesData(4, "TestSeries", new DateTime(2017, 1, 1, 1, 1, 1), "", 2, AirDay.Monday, "", 4f, new[] { "Alias1", "Alias2" }, new[] { "Genre1", "Genre2" }, "Overview"); _fileCache.GetFileContent(Arg.Any <TvDbSeriesFileSpec>()) .Returns(series); _jsonConnection.GetAsync(Arg.Any <GetSeriesRequest>(), Arg.Any <Option <string> >()) .Returns(new Response <GetSeriesRequest.Response>(new GetSeriesRequest.Response(series))); var tvDbClient = new TvDbClient(_jsonConnection, _fileCache, _applicationPaths, _logManager, new JsonSerialiser(), new PluginConfiguration()); var seriesResult = await tvDbClient.GetSeriesAsync(4); seriesResult.IsSome.Should().BeTrue(); seriesResult.ValueUnsafe().Should().BeEquivalentTo(series); }
public async Task GetSeriesAsync_LocalSeriesData_DoesNotRequestSeriesData() { var series = new TvDbSeriesData(4, "TestSeries", new DateTime(2017, 1, 1, 1, 1, 1), "", 2, AirDay.Monday, "", 4f, new[] { "Alias1", "Alias2" }, new[] { "Genre1", "Genre2" }, "Overview"); _fileCache.GetFileContent(Arg.Any <TvDbSeriesFileSpec>()) .Returns(series); _jsonConnection.GetAsync(Arg.Any <GetSeriesRequest>(), Arg.Any <Option <string> >()) .Returns(new Response <GetSeriesRequest.Response>(new GetSeriesRequest.Response(series))); var tvDbClient = new TvDbClient(_jsonConnection, _fileCache, _applicationPaths, _logManager, new JsonSerialiser(), new PluginConfiguration()); await tvDbClient.GetSeriesAsync(4); _jsonConnection.DidNotReceiveWithAnyArgs() .GetAsync <GetSeriesRequest.Response>(null, Option <string> .None); }
private Task <Either <ProcessFailedResult, AniDbEpisodeData> > MapEpisodeDataAsync(int aniDbSeriesId, TvDbSeriesData tvDbSeriesData, TvDbEpisodeData tvDbEpisodeData, ProcessResultContext resultContext) { var seriesMapping = this.mappingList.GetSeriesMappingsFromTvDb(tvDbSeriesData.Id, resultContext) .BindAsync(sm => sm.Where(m => m.Ids.AniDbSeriesId == aniDbSeriesId) .Match( () => resultContext.Failed( $"No series mapping between TvDb series Id '{tvDbSeriesData.Id}' and AniDb series id '{aniDbSeriesId}'"), Prelude.Right <ProcessFailedResult, ISeriesMapping>, (head, tail) => resultContext.Failed( $"Multiple series mappings found between TvDb series Id '{tvDbSeriesData.Id}' and AniDb series Id '{aniDbSeriesId}'"))); return(seriesMapping.BindAsync(sm => { var episodeGroupMapping = sm.GetEpisodeGroupMapping(tvDbEpisodeData.AiredEpisodeNumber, tvDbEpisodeData.AiredSeason); var aniDbEpisodeData = this.episodeMapper.MapTvDbEpisodeAsync(tvDbEpisodeData.AiredEpisodeNumber, sm, episodeGroupMapping); return aniDbEpisodeData.ToEither(resultContext.Failed( $"Failed to find a corresponding AniDb episode in AniDb series id '{aniDbSeriesId}'")); })); }
public Response(TvDbSeriesData data) { Data = data; }
private ISourceData CreateSourceData(TvDbSeriesData seriesData, IEmbyItemData embyItemData) { return(new SourceData <TvDbSeriesData>(_sources.TvDb.ForAdditionalData(), seriesData.Id, new ItemIdentifier(embyItemData.Identifier.Index, Option <int> .None, seriesData.SeriesName), seriesData)); }
private void SaveTvDbSeries(TvDbSeriesData tvDbSeries) { var fileSpec = new TvDbSeriesFileSpec(_jsonSerialiser, _applicationPaths.CachePath, tvDbSeries.Id); _fileCache.SaveFile(fileSpec, tvDbSeries); }