public async Task LoadFrom_SingleDistinctSeriesFound_ReturnsSourceData()
        {
            var aniListSeriesData = new AniListSeriesData
            {
                Id    = 1,
                Title = new AniListTitleData("english", string.Empty, string.Empty)
            };

            this.aniDbTitles = new[]
            {
                new ItemTitleData
                {
                    Title    = "TitleA",
                    Language = "en"
                }
            };

            this.aniListClient.FindSeriesAsync("NormalisedTitleA", Arg.Any <ProcessResultContext>())
            .Returns(new[]
            {
                aniListSeriesData
            });

            this.sources.AniList.SelectTitle(aniListSeriesData.Title, "en", Arg.Any <ProcessResultContext>())
            .Returns(Right <ProcessFailedResult, string>("SelectedTitle"));

            var result = await this.loader.LoadFrom(this.mediaItem, this.aniDbSourceData);

            result.IsRight.Should().BeTrue();
            result.IfRight(r => r.Should()
                           .BeEquivalentTo(new SourceData <AniListSeriesData>(
                                               TestSources.AniListSource,
                                               1,
                                               new ItemIdentifier(None, None, "SelectedTitle"),
                                               aniListSeriesData
                                               )));
        }
        public void SeriesMappings_DontMapEmptyFields()
        {
            var source = new AniListSeriesData
            {
                Genres     = new List <string>(),
                Staff      = new GraphQlEdge <AniListStaffData>(new List <AniListStaffData>()),
                Characters = new GraphQlEdge <AniListCharacterData>(new List <AniListCharacterData>()),
                Studios    = new GraphQlEdge <AniListStudioData>(new List <AniListStudioData>())
            };

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

            var aniListSourceMappingConfiguration =
                new AniListSourceMappingConfiguration(new AniListNameSelector(new ConsoleLogManager()));

            aniListSourceMappingConfiguration.GetSeriesMappings(1, true, true, TitleType.Localized, "en")
            .Where(m => m.CanApply(source, target))
            .Select(m => m.TargetPropertyName)
            .Should()
            .BeEmpty();
        }
Example #3
0
 private ISourceData CreateSourceData(AniListSeriesData seriesData, string title)
 {
     return(new SourceData <AniListSeriesData>(this.sources.AniList, seriesData.Id,
                                               new ItemIdentifier(None, None, title), seriesData));
 }
Example #4
0
 private Either <ProcessFailedResult, ISourceData> CreateSourceDataWithTitle(IMediaItem mediaItem,
                                                                             AniListSeriesData seriesData, ProcessResultContext resultContext)
 {
     return(this.sources.AniList.SelectTitle(seriesData.Title, mediaItem.EmbyData.Language, resultContext)
            .Map(t => this.CreateSourceData(seriesData, t)));
 }
        public void SeriesMappings_MapsAllFields()
        {
            var source = new AniListSeriesData
            {
                Title        = new AniListTitleData("SelectedTitle", "", ""),
                StartDate    = new AniListFuzzyDate(2018, 7, 6),
                EndDate      = new AniListFuzzyDate(2018, 8, 5),
                Description  = "Description",
                AverageScore = 6.7d,
                Genres       = new[] { "Genre", "Tags" },
                Studios      = new GraphQlEdge <AniListStudioData>(new List <AniListStudioData>
                {
                    new AniListStudioData(true, new AniListStudioData.StudioName("Studio"))
                }),
                Staff = new GraphQlEdge <AniListStaffData>(new[]
                {
                    new AniListStaffData(
                        new AniListStaffData.InnerStaffData(new AniListPersonNameData("Staff", "Name", ""),
                                                            new AniListImageUrlData("StaffUrl", "")), "StaffRole")
                }),
                Characters = new GraphQlEdge <AniListCharacterData>(new[]
                {
                    new AniListCharacterData(
                        new AniListCharacterData.InnerCharacterData(new AniListPersonNameData("Character", "Name", ""),
                                                                    new AniListImageUrlData("CharacterUrl", "")), new[]
                    {
                        new AniListCharacterData.VoiceActorData("JAPANESE",
                                                                new AniListImageUrlData("VoiceActorUrl", ""),
                                                                new AniListPersonNameData("VoiceActor", "Name", ""))
                    })
                })
            };

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

            var aniListSourceMappingConfiguration =
                new AniListSourceMappingConfiguration(new AniListNameSelector(new ConsoleLogManager()));

            aniListSourceMappingConfiguration.GetSeriesMappings(1, true, true, TitleType.Localized, "en")
            .Select(m => m.CanApply(source, target))
            .All(v => v)
            .Should()
            .BeTrue();

            aniListSourceMappingConfiguration.GetSeriesMappings(1, true, true, TitleType.Localized, "en")
            .Iter(m => m.Apply(source, target));

            target.Item.Name.Should().Be("SelectedTitle");
            target.Item.PremiereDate.Should().Be(new DateTime(2018, 7, 6, 0, 0, 0));
            target.Item.EndDate.Should().Be(new DateTime(2018, 8, 5, 0, 0, 0));
            target.Item.Overview.Should().Be("Description");
            target.Item.Genres.Should().BeEquivalentTo("Genre");
            target.Item.Studios.Should().BeEquivalentTo("Studio");
            target.Item.Tags.Should().BeEquivalentTo("Tags");
            target.Item.CommunityRating.Should().Be(6.7f);

            target.People.Should()
            .BeEquivalentTo(new List <PersonInfo>
            {
                new PersonInfo
                {
                    Name     = "Staff Name",
                    Role     = "StaffRole",
                    ImageUrl = "StaffUrl"
                },
                new PersonInfo
                {
                    Name     = "VoiceActor Name",
                    Role     = "Character Name",
                    Type     = PersonType.Actor,
                    ImageUrl = "VoiceActorUrl"
                }
            });
        }