public async Task LoadFrom_NoSeriesId_Fails()
        {
            this.embyItemData.GetParentId(MediaItemTypes.Series, this.sources.TvDb).Returns(Option <int> .None);

            var loader = new TvDbEpisodeFromEmbyData(this.sources, this.tvDbClient, this.titleNormaliser);

            var result = await loader.LoadFrom(this.embyItemData);

            result.IsLeft.Should().BeTrue();
            result.IfLeft(f => f.Reason.Should().Be("No TvDb Id found on parent series"));
        }
        public async Task LoadFrom_EpisodeLoadFail_Fails()
        {
            this.embyItemData.Identifier.Returns(new ItemIdentifier(4, 1, "Name"));

            var loader = new TvDbEpisodeFromEmbyData(this.sources, this.tvDbClient, this.titleNormaliser);

            var result = await loader.LoadFrom(this.embyItemData);

            result.IsLeft.Should().BeTrue();
            result.IfLeft(f => f.Reason.Should().Be("Failed to load parent series with TvDb Id '22'"));
        }
        public async Task LoadFrom_NoMatchingEpisode_Fails()
        {
            this.embyItemData.Identifier.Returns(new ItemIdentifier(4, 1, "Name"));

            this.tvDbClient.GetEpisodesAsync(22)
            .Returns(new[]
            {
                TvDbTestData.Episode(1, 1, 1, name: "NonMatch1"),
                TvDbTestData.Episode(1, 4, 2, name: "NonMatch2")
            }.ToList());

            var loader = new TvDbEpisodeFromEmbyData(this.sources, this.tvDbClient, this.titleNormaliser);

            var result = await loader.LoadFrom(this.embyItemData);

            result.IsLeft.Should().BeTrue();
            result.IfLeft(f => f.Reason.Should().Be("Failed to find TvDb episode"));
        }
        public async Task LoadFrom_MatchOnTitle_CreatesSourceData()
        {
            var expected = TvDbTestData.Episode(1, 6, 1, name: "Match");

            this.embyItemData.Identifier.Returns(new ItemIdentifier(4, 2, "Match"));

            this.tvDbClient.GetEpisodesAsync(22)
            .Returns(new[]
            {
                TvDbTestData.Episode(1, 1, 1, name: "NonMatch"),
                expected
            }.ToList());

            var loader = new TvDbEpisodeFromEmbyData(this.sources, this.tvDbClient, this.titleNormaliser);

            var result = await loader.LoadFrom(this.embyItemData);

            result.IsRight.Should().BeTrue();
            result.IfRight(sd => sd.Data.Should().Be(expected));
            result.IfRight(sd => sd.Source.Should().Be(this.sources.TvDb));
            result.IfRight(sd => sd.Identifier.Should().BeEquivalentTo(new ItemIdentifier(6, 1, "Match")));
        }
        public async Task LoadFrom_MatchOnEpisodeAndDefaultSeasonIndex_CreatesSourceData()
        {
            var expected = TvDbTestData.Episode(1, 4, 1, name: "Match");

            _embyItemData.Identifier.Returns(new ItemIdentifier(4, Option <int> .None, "Name"));

            _tvDbClient.GetEpisodesAsync(22)
            .Returns(new[]
            {
                TvDbTestData.Episode(1, 1, 2, name: "NonMatch"),
                expected
            }.ToList());

            var loader = new TvDbEpisodeFromEmbyData(_sources, _tvDbClient, _titleNormaliser);

            var result = await loader.LoadFrom(_embyItemData);

            result.IsRight.Should().BeTrue();
            result.IfRight(sd => sd.Data.Should().Be(expected));
            result.IfRight(sd => sd.Source.Should().Be(_sources.TvDb));
            result.IfRight(sd => sd.Identifier.Should().BeEquivalentTo(new ItemIdentifier(4, 1, "Match")));
        }
        public void CanLoadFrom_WrongItemType_IsFalse()
        {
            var loader = new TvDbEpisodeFromEmbyData(this.sources, this.tvDbClient, this.titleNormaliser);

            loader.CanLoadFrom(MediaItemTypes.Season).Should().BeFalse();
        }
        public void CanLoadFrom_Null_IsFalse()
        {
            var loader = new TvDbEpisodeFromEmbyData(this.sources, this.tvDbClient, this.titleNormaliser);

            loader.CanLoadFrom(null).Should().BeFalse();
        }
        public void CanLoadFrom_CorrectItemType_IsTrue()
        {
            var loader = new TvDbEpisodeFromEmbyData(this.sources, this.tvDbClient, this.titleNormaliser);

            loader.CanLoadFrom(MediaItemTypes.Episode).Should().BeTrue();
        }