public async Task LoadFrom_NoSeriesMapping_Fails()
        {
            SetUpAniDbSeriesData(324);

            SetUpAniDbEpisodeData(33);

            var loader = new TvDbEpisodeFromAniDb(_sources, _mappingList, _episodeMapper);

            var result = await loader.LoadFrom(_mediaItem, _aniDbSourceData);

            result.IsLeft.Should().BeTrue();
        }
        public async Task LoadFrom_HasSeriesMapping_GetsEpisodeGroupMapping()
        {
            var seriesMapping = SetUpSeriesMapping(324, 142);

            SetUpAniDbSeriesData(324);

            var aniDbEpisodeData = SetUpAniDbEpisodeData(33);

            var loader = new TvDbEpisodeFromAniDb(_sources, _mappingList, _episodeMapper);

            await loader.LoadFrom(_mediaItem, _aniDbSourceData);

            seriesMapping.Received(1).GetEpisodeGroupMapping(aniDbEpisodeData.EpisodeNumber);
        }
        public async Task LoadFrom_NoMappedEpisodeData_Fails()
        {
            this.SetUpSeriesMapping(324, 142);

            this.SetUpAniDbSeriesData(324);

            this.SetUpAniDbEpisodeData(33);

            var loader = new TvDbEpisodeFromAniDb(this.sources, this.mappingList, this.episodeMapper);

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

            result.IsLeft.Should().BeTrue();
        }
        public async Task LoadFrom_NoAniDbSeriesData_Fails()
        {
            SetUpSeriesMapping(324, 142);

            SetUpAniDbSeriesData(324);

            SetUpAniDbEpisodeData(33);

            _aniDbSource.ClearSubstitute();
            _aniDbSource.GetSeriesData(_mediaItem.EmbyData, Arg.Any <ProcessResultContext>())
            .Returns(Left <ProcessFailedResult, AniDbSeriesData>(new ProcessFailedResult("", "",
                                                                                         MediaItemTypes.Series,
                                                                                         "Failed")));

            var loader = new TvDbEpisodeFromAniDb(_sources, _mappingList, _episodeMapper);

            var result = await loader.LoadFrom(_mediaItem, _aniDbSourceData);

            result.IsLeft.Should().BeTrue();
            result.IfLeft(r => r.Reason.Should().Be("Failed"));
        }
        public async Task LoadFrom_HasMappedEpisodeData_ReturnsMappedEpisodeData()
        {
            SetUpAniDbSeriesData(324);

            var seriesMapping = SetUpSeriesMapping(324, 142);

            var aniDbEpisodeData = SetUpAniDbEpisodeData(33);
            var tvDbEpisodeData  = CreateTvDbEpisodeData(55, 6);

            SetUpEpisodeMapping(aniDbEpisodeData, tvDbEpisodeData, seriesMapping);

            var loader = new TvDbEpisodeFromAniDb(_sources, _mappingList, _episodeMapper);

            var result = await loader.LoadFrom(_mediaItem, _aniDbSourceData);

            result.IsRight.Should().BeTrue();

            result.IfRight(sd => sd.Data.Should().Be(tvDbEpisodeData));
            result.IfRight(sd => sd.Source.Should().Be(_sources.TvDb));
            result.IfRight(sd => sd.Identifier.Should().BeEquivalentTo(new ItemIdentifier(55, 6, "TvDbEpisodeName")));
        }
        public void CanLoadFrom_TypeMisMatch_IsFalse()
        {
            var loader = new TvDbEpisodeFromAniDb(_sources, _mappingList, _episodeMapper);

            loader.CanLoadFrom(new object()).Should().BeFalse();
        }
        public void CanLoadFrom_TypeMatch_IsTrue()
        {
            var loader = new TvDbEpisodeFromAniDb(_sources, _mappingList, _episodeMapper);

            loader.CanLoadFrom(Substitute.For <ISourceData <AniDbEpisodeData> >()).Should().BeTrue();
        }
        public void CanLoadFrom_Null_IsFalse()
        {
            var loader = new TvDbEpisodeFromAniDb(_sources, _mappingList, _episodeMapper);

            loader.CanLoadFrom(null).Should().BeFalse();
        }