public void EpisodeMappings_DontMapEmptyFields()
        {
            var source = new AniDbEpisodeData
            {
                TotalMinutes = 0,
                Summary      = "",
                Rating       = null
            };

            var target = new MetadataResult <Episode>
            {
                Item = new Episode()
            };

            var aniDbSourceMappingConfiguration =
                new AniDbSourceMappingConfiguration(Substitute.For <IAniDbParser>(), _titleSelector);

            aniDbSourceMappingConfiguration.GetEpisodeMappings(0, false, false, TitleType.Localized, "en")
            .Where(m => !m.CanApply(source, target))
            .Select(m => m.TargetPropertyName)
            .Should()
            .BeEquivalentTo(nameof(target.Item.RunTimeTicks), nameof(target.Item.Overview),
                            nameof(target.Item.CommunityRating), nameof(target.Item.Studios), nameof(target.Item.Genres),
                            nameof(target.Item.Tags), nameof(target.People));
        }
        public void SeriesMappings_HasMappingsForAllFields()
        {
            var aniDbParser = Substitute.For <IAniDbParser>();

            var expectedMappedFields = new[]
            {
                nameof(Series.PremiereDate),
                nameof(Series.EndDate),
                nameof(Series.Name),
                nameof(Series.Overview),
                nameof(Series.CommunityRating),
                nameof(Series.Studios),
                nameof(Series.Genres),
                nameof(Series.Tags),
                nameof(MetadataResult <Series> .People)
            };

            var aniDbSourceMappingConfiguration =
                new AniDbSourceMappingConfiguration(aniDbParser, _titleSelector);

            aniDbSourceMappingConfiguration.GetSeriesMappings(1, true, true, TitleType.Localized, "en")
            .Select(m => m.TargetPropertyName)
            .Should()
            .BeEquivalentTo(expectedMappedFields);
        }
        public void SeriesMappings_DontMapEmptyFields()
        {
            var source = new AniDbSeriesData
            {
                StartDate   = null,
                EndDate     = null,
                Description = null,
                Ratings     = new PermanentRatingData[] { }
            };

            var aniDbParser = Substitute.For <IAniDbParser>();

            var target = new MetadataResult <Series>
            {
                Item = new Series()
            };

            var aniDbSourceMappingConfiguration =
                new AniDbSourceMappingConfiguration(aniDbParser, _titleSelector);

            aniDbSourceMappingConfiguration.GetSeriesMappings(1, true, true, TitleType.Localized, "en")
            .Where(m => !m.CanApply(source, target))
            .Select(m => m.TargetPropertyName)
            .Should()
            .BeEquivalentTo(nameof(target.Item.PremiereDate), nameof(target.Item.EndDate),
                            nameof(target.Item.Overview),
                            nameof(target.Item.CommunityRating));
        }
        public void SeasonMappings_MapsAllFields()
        {
            var source = new AniDbSeriesData
            {
                StartDate   = new DateTime(2017, 1, 2, 3, 4, 5),
                EndDate     = new DateTime(2017, 5, 4, 3, 2, 1),
                Description = "Description",
                Ratings     = new[]
                {
                    new PermanentRatingData
                    {
                        Value = 45
                    }
                }
            };

            var aniDbParser = Substitute.For <IAniDbParser>();

            aniDbParser.FormatDescription("Description").Returns("FormattedDescription");
            aniDbParser.GetGenres(source, 1, true).Returns(new List <string> {
                "Genre"
            });
            aniDbParser.GetTags(source, 1, true).Returns(new List <string> {
                "Tags"
            });
            aniDbParser.GetStudios(source).Returns(new List <string> {
                "Studio"
            });

            var target = new MetadataResult <Season>
            {
                Item = new Season()
            };

            var aniDbSourceMappingConfiguration =
                new AniDbSourceMappingConfiguration(aniDbParser, _titleSelector);

            aniDbSourceMappingConfiguration.GetSeasonMappings(1, true, TitleType.Localized, "en")
            .Select(m => m.CanApply(source, target))
            .Count(v => v)
            .Should()
            .Be(7);

            aniDbSourceMappingConfiguration.GetSeasonMappings(1, 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.EndDate.Should().Be(new DateTime(2017, 5, 4, 3, 2, 1));
            target.Item.Overview.Should().Be("FormattedDescription");
            target.Item.Genres.Should().BeEquivalentTo("Genre");
            target.Item.Studios.Should().BeEquivalentTo("Studio");
            target.Item.Tags.Should().BeEquivalentTo("Tags");
            target.Item.CommunityRating.Should().Be(45);
        }
Beispiel #5
0
 public SourceMappingConfigurations(AniDbSourceMappingConfiguration aniDbSourceMappingConfiguration,
                                    TvDbSourceMappingConfiguration tvDbSourceMappingConfiguration,
                                    AniListSourceMappingConfiguration aniListSourceMappingConfiguration)
 {
     _sourceMappingConfigurations =
         new ISourceMappingConfiguration[]
     {
         aniDbSourceMappingConfiguration,
         tvDbSourceMappingConfiguration,
         aniListSourceMappingConfiguration
     };
 }
        public void EpisodeMappings_HasMappingsForAllFields()
        {
            var expectedMappedFields = new[]
            {
                nameof(Episode.PremiereDate),
                nameof(Episode.RunTimeTicks),
                nameof(Episode.Name),
                nameof(Episode.Overview),
                nameof(Episode.CommunityRating),
                nameof(Episode.Studios),
                nameof(Episode.Genres),
                nameof(Episode.Tags),
                nameof(MetadataResult <Episode> .People)
            };

            var aniDbSourceMappingConfiguration =
                new AniDbSourceMappingConfiguration(Substitute.For <IAniDbParser>(), _titleSelector);

            aniDbSourceMappingConfiguration.GetEpisodeMappings(0, false, false, TitleType.Localized, "en")
            .Select(m => m.TargetPropertyName)
            .Should()
            .BeEquivalentTo(expectedMappedFields);
        }
        public void EpisodeMappings_MapsAllFields()
        {
            var seriesSource = new AniDbSeriesData
            {
                Ratings = new[]
                {
                    new PermanentRatingData
                    {
                        Value = 45
                    }
                }
            };

            var aniDbParser = Substitute.For <IAniDbParser>();

            aniDbParser.GetGenres(seriesSource, 1, true).Returns(new List <string> {
                "Genre"
            });
            aniDbParser.GetTags(seriesSource, 1, true).Returns(new List <string> {
                "Tags"
            });
            aniDbParser.GetStudios(seriesSource).Returns(new List <string> {
                "Studio"
            });
            aniDbParser.GetPeople(seriesSource)
            .Returns(new List <PersonInfo>
            {
                new PersonInfo
                {
                    Name = "Person",
                    Role = "Role"
                }
            });

            var source = new AniDbEpisodeData
            {
                AirDate      = new DateTime(2017, 1, 2, 3, 4, 5),
                TotalMinutes = 35,
                Summary      = "Description",
                Rating       = new EpisodeRatingData {
                    Rating = 45
                }
            };

            var target = new MetadataResult <Episode>
            {
                Item = new Episode()
            };

            var aniDbSourceMappingConfiguration =
                new AniDbSourceMappingConfiguration(aniDbParser, _titleSelector);
            var mappings = aniDbSourceMappingConfiguration.GetEpisodeMappings(1, true, true, TitleType.Localized, "en").ToList();

            mappings
            .Select(m => m.CanApply(source, target) || m.CanApply(seriesSource, target))
            .All(v => v)
            .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.Name.Should().Be("SelectedTitle");
            target.Item.PremiereDate.Should().Be(new DateTime(2017, 1, 2, 3, 4, 5));
            target.Item.RunTimeTicks.Should().Be(21000000000L);
            target.Item.Overview.Should().Be("Description");
            target.Item.CommunityRating.Should().Be(45);
            target.Item.Genres.Should().BeEquivalentTo("Genre");
            target.Item.Studios.Should().BeEquivalentTo("Studio");
            target.Item.Tags.Should().BeEquivalentTo("Tags");

            target.People.Should()
            .BeEquivalentTo(new List <PersonInfo>
            {
                new PersonInfo
                {
                    Name = "Person",
                    Role = "Role"
                }
            });
        }