public async Task Test_SeasonArrayJsonReader_ReadArray_From_Json_String_Empty()
        {
            var jsonReader = new SeasonArrayJsonReader();

            var traktSeasons = await jsonReader.ReadArrayAsync(string.Empty);

            traktSeasons.Should().BeNull();
        }
Example #2
0
        public async Task Test_SeasonArrayJsonReader_ReadArray_From_JsonReader_Null()
        {
            var traktJsonReader = new SeasonArrayJsonReader();

            var traktSeasons = await traktJsonReader.ReadArrayAsync(default(JsonTextReader));

            traktSeasons.Should().BeNull();
        }
        public async Task Test_SeasonArrayJsonReader_ReadArray_From_Json_String_Empty_Array()
        {
            var jsonReader = new SeasonArrayJsonReader();

            var traktSeasons = await jsonReader.ReadArrayAsync(JSON_EMPTY_ARRAY);

            traktSeasons.Should().NotBeNull().And.BeEmpty();
        }
Example #4
0
        public async Task Test_SeasonArrayJsonReader_ReadArray_From_Stream_Empty()
        {
            var traktJsonReader = new SeasonArrayJsonReader();

            using (var stream = string.Empty.ToStream())
            {
                var traktSeasons = await traktJsonReader.ReadArrayAsync(stream);

                traktSeasons.Should().BeNull();
            }
        }
Example #5
0
        public async Task Test_SeasonArrayJsonReader_ReadArray_From_Stream_Empty_Array()
        {
            var traktJsonReader = new SeasonArrayJsonReader();

            using (var stream = JSON_EMPTY_ARRAY.ToStream())
            {
                var traktSeasons = await traktJsonReader.ReadArrayAsync(stream);

                traktSeasons.Should().NotBeNull().And.BeEmpty();
            }
        }
Example #6
0
        public async Task Test_SeasonArrayJsonReader_ReadArray_From_JsonReader_Empty()
        {
            var traktJsonReader = new SeasonArrayJsonReader();

            using (var reader = new StringReader(string.Empty))
                using (var jsonReader = new JsonTextReader(reader))
                {
                    var traktSeasons = await traktJsonReader.ReadArrayAsync(jsonReader);

                    traktSeasons.Should().BeNull();
                }
        }
Example #7
0
        public async Task Test_SeasonArrayJsonReader_ReadArray_From_JsonReader_Empty_Array()
        {
            var traktJsonReader = new SeasonArrayJsonReader();

            using (var reader = new StringReader(JSON_EMPTY_ARRAY))
                using (var jsonReader = new JsonTextReader(reader))
                {
                    var traktSeasons = await traktJsonReader.ReadArrayAsync(jsonReader);

                    traktSeasons.Should().NotBeNull().And.BeEmpty();
                }
        }
Example #8
0
        public async Task Test_SeasonArrayJsonReader_ReadArray_From_JsonReader_Minimal_Complete()
        {
            var traktJsonReader = new SeasonArrayJsonReader();

            using (var reader = new StringReader(MINIMAL_JSON_COMPLETE))
                using (var jsonReader = new JsonTextReader(reader))
                {
                    var traktSeasons = await traktJsonReader.ReadArrayAsync(jsonReader);

                    traktSeasons.Should().NotBeNull().And.NotBeEmpty().And.HaveCount(2);

                    var seasons = traktSeasons.ToArray();

                    seasons[0].Should().NotBeNull();
                    seasons[0].Number.Should().Be(1);
                    seasons[0].Ids.Should().NotBeNull();
                    seasons[0].Ids.Trakt.Should().Be(61430U);
                    seasons[0].Ids.Tvdb.Should().Be(279121U);
                    seasons[0].Ids.Tmdb.Should().Be(60523U);
                    seasons[0].Ids.TvRage.Should().Be(36939U);
                    seasons[0].Rating.Should().NotHaveValue();
                    seasons[0].Votes.Should().NotHaveValue();
                    seasons[0].TotalEpisodesCount.Should().NotHaveValue();
                    seasons[0].AiredEpisodesCount.Should().NotHaveValue();
                    seasons[0].Overview.Should().BeNullOrEmpty();
                    seasons[0].FirstAired.Should().NotHaveValue();
                    seasons[0].Network.Should().BeNull();
                    seasons[0].Episodes.Should().BeNull();

                    seasons[1].Should().NotBeNull();
                    seasons[1].Number.Should().Be(2);
                    seasons[1].Ids.Should().NotBeNull();
                    seasons[1].Ids.Trakt.Should().Be(3964U);
                    seasons[1].Ids.Tvdb.Should().Be(473271U);
                    seasons[1].Ids.Tmdb.Should().Be(3625U);
                    seasons[1].Ids.TvRage.Should().Be(36940U);
                    seasons[1].Rating.Should().NotHaveValue();
                    seasons[1].Votes.Should().NotHaveValue();
                    seasons[1].TotalEpisodesCount.Should().NotHaveValue();
                    seasons[1].AiredEpisodesCount.Should().NotHaveValue();
                    seasons[1].Overview.Should().BeNullOrEmpty();
                    seasons[1].FirstAired.Should().NotHaveValue();
                    seasons[1].Network.Should().BeNull();
                    seasons[1].Episodes.Should().BeNull();
                }
        }
        public override async Task <ITraktShowCollectionProgress> ReadObjectAsync(JsonTextReader jsonReader, CancellationToken cancellationToken = default)
        {
            if (jsonReader == null)
            {
                return(await Task.FromResult(default(ITraktShowCollectionProgress)));
            }

            if (await jsonReader.ReadAsync(cancellationToken) && jsonReader.TokenType == JsonToken.StartObject)
            {
                var seasonsArrayReader = new SeasonArrayJsonReader();
                var seasonCollectionProgressArrayReader = new SeasonCollectionProgressArrayJsonReader();
                var episodeObjectReader = new EpisodeObjectJsonReader();

                ITraktShowCollectionProgress traktShowCollectionProgress = new TraktShowCollectionProgress();

                while (await jsonReader.ReadAsync(cancellationToken) && jsonReader.TokenType == JsonToken.PropertyName)
                {
                    var propertyName = jsonReader.Value.ToString();

                    switch (propertyName)
                    {
                    case JsonProperties.SHOW_COLLECTION_PROGRESS_PROPERTY_NAME_AIRED:
                        traktShowCollectionProgress.Aired = await jsonReader.ReadAsInt32Async(cancellationToken);

                        break;

                    case JsonProperties.SHOW_COLLECTION_PROGRESS_PROPERTY_NAME_COMPLETED:
                        traktShowCollectionProgress.Completed = await jsonReader.ReadAsInt32Async(cancellationToken);

                        break;

                    case JsonProperties.SHOW_COLLECTION_PROGRESS_PROPERTY_NAME_LAST_COLLECTED_AT:
                    {
                        var value = await JsonReaderHelper.ReadDateTimeValueAsync(jsonReader, cancellationToken);

                        if (value.First)
                        {
                            traktShowCollectionProgress.LastCollectedAt = value.Second;
                        }

                        break;
                    }

                    case JsonProperties.SHOW_COLLECTION_PROGRESS_PROPERTY_NAME_SEASONS:
                        traktShowCollectionProgress.Seasons = await seasonCollectionProgressArrayReader.ReadArrayAsync(jsonReader, cancellationToken);

                        break;

                    case JsonProperties.SHOW_COLLECTION_PROGRESS_PROPERTY_NAME_HIDDEN_SEASONS:
                        traktShowCollectionProgress.HiddenSeasons = await seasonsArrayReader.ReadArrayAsync(jsonReader, cancellationToken);

                        break;

                    case JsonProperties.SHOW_COLLECTION_PROGRESS_PROPERTY_NAME_NEXT_EPISODE:
                        traktShowCollectionProgress.NextEpisode = await episodeObjectReader.ReadObjectAsync(jsonReader, cancellationToken);

                        break;

                    case JsonProperties.SHOW_COLLECTION_PROGRESS_PROPERTY_NAME_LAST_EPISODE:
                        traktShowCollectionProgress.LastEpisode = await episodeObjectReader.ReadObjectAsync(jsonReader, cancellationToken);

                        break;

                    default:
                        await JsonReaderHelper.ReadAndIgnoreInvalidContentAsync(jsonReader, cancellationToken);

                        break;
                    }
                }

                return(traktShowCollectionProgress);
            }

            return(await Task.FromResult(default(ITraktShowCollectionProgress)));
        }
Example #10
0
        public override async Task <ITraktShow> ReadObjectAsync(JsonTextReader jsonReader, CancellationToken cancellationToken = default)
        {
            if (jsonReader == null)
            {
                return(await Task.FromResult(default(ITraktShow)));
            }

            if (await jsonReader.ReadAsync(cancellationToken) && jsonReader.TokenType == JsonToken.StartObject)
            {
                var idsObjectReader    = new ShowIdsObjectJsonReader();
                var airsObjectReader   = new ShowAirsObjectJsonReader();
                var seasonsArrayReader = new SeasonArrayJsonReader();

                ITraktShow traktShow = new TraktShow();

                while (await jsonReader.ReadAsync(cancellationToken) && jsonReader.TokenType == JsonToken.PropertyName)
                {
                    var propertyName = jsonReader.Value.ToString();

                    switch (propertyName)
                    {
                    case JsonProperties.SHOW_PROPERTY_NAME_TITLE:
                        traktShow.Title = await jsonReader.ReadAsStringAsync(cancellationToken);

                        break;

                    case JsonProperties.SHOW_PROPERTY_NAME_YEAR:
                        traktShow.Year = await jsonReader.ReadAsInt32Async(cancellationToken);

                        break;

                    case JsonProperties.SHOW_PROPERTY_NAME_IDS:
                        traktShow.Ids = await idsObjectReader.ReadObjectAsync(jsonReader, cancellationToken);

                        break;

                    case JsonProperties.SHOW_PROPERTY_NAME_OVERVIEW:
                        traktShow.Overview = await jsonReader.ReadAsStringAsync(cancellationToken);

                        break;

                    case JsonProperties.SHOW_PROPERTY_NAME_FIRST_AIRED:
                    {
                        var value = await JsonReaderHelper.ReadDateTimeValueAsync(jsonReader, cancellationToken);

                        if (value.First)
                        {
                            traktShow.FirstAired = value.Second;
                        }

                        break;
                    }

                    case JsonProperties.SHOW_PROPERTY_NAME_AIRS:
                        traktShow.Airs = await airsObjectReader.ReadObjectAsync(jsonReader, cancellationToken);

                        break;

                    case JsonProperties.SHOW_PROPERTY_NAME_RUNTIME:
                        traktShow.Runtime = await jsonReader.ReadAsInt32Async(cancellationToken);

                        break;

                    case JsonProperties.SHOW_PROPERTY_NAME_CERTIFICATION:
                        traktShow.Certification = await jsonReader.ReadAsStringAsync(cancellationToken);

                        break;

                    case JsonProperties.SHOW_PROPERTY_NAME_NETWORK:
                        traktShow.Network = await jsonReader.ReadAsStringAsync(cancellationToken);

                        break;

                    case JsonProperties.SHOW_PROPERTY_NAME_COUNTRY:
                        traktShow.CountryCode = await jsonReader.ReadAsStringAsync(cancellationToken);

                        break;

                    case JsonProperties.SHOW_PROPERTY_NAME_TRAILER:
                        traktShow.Trailer = await jsonReader.ReadAsStringAsync(cancellationToken);

                        break;

                    case JsonProperties.SHOW_PROPERTY_NAME_HOMEPAGE:
                        traktShow.Homepage = await jsonReader.ReadAsStringAsync(cancellationToken);

                        break;

                    case JsonProperties.SHOW_PROPERTY_NAME_STATUS:
                        traktShow.Status = await JsonReaderHelper.ReadEnumerationValueAsync <TraktShowStatus>(jsonReader, cancellationToken);

                        break;

                    case JsonProperties.SHOW_PROPERTY_NAME_RATING:
                        traktShow.Rating = (float?)await jsonReader.ReadAsDoubleAsync(cancellationToken);

                        break;

                    case JsonProperties.SHOW_PROPERTY_NAME_VOTES:
                        traktShow.Votes = await jsonReader.ReadAsInt32Async(cancellationToken);

                        break;

                    case JsonProperties.SHOW_PROPERTY_NAME_UPDATED_AT:
                    {
                        var value = await JsonReaderHelper.ReadDateTimeValueAsync(jsonReader, cancellationToken);

                        if (value.First)
                        {
                            traktShow.UpdatedAt = value.Second;
                        }

                        break;
                    }

                    case JsonProperties.SHOW_PROPERTY_NAME_LANGUAGE:
                        traktShow.LanguageCode = await jsonReader.ReadAsStringAsync(cancellationToken);

                        break;

                    case JsonProperties.SHOW_PROPERTY_NAME_AVAILABLE_TRANSLATIONS:
                        traktShow.AvailableTranslationLanguageCodes = await JsonReaderHelper.ReadStringArrayAsync(jsonReader, cancellationToken);

                        break;

                    case JsonProperties.SHOW_PROPERTY_NAME_GENRES:
                        traktShow.Genres = await JsonReaderHelper.ReadStringArrayAsync(jsonReader, cancellationToken);

                        break;

                    case JsonProperties.SHOW_PROPERTY_NAME_AIRED_EPISODES:
                        traktShow.AiredEpisodes = await jsonReader.ReadAsInt32Async(cancellationToken);

                        break;

                    case JsonProperties.SHOW_PROPERTY_NAME_SEASONS:
                        traktShow.Seasons = await seasonsArrayReader.ReadArrayAsync(jsonReader, cancellationToken);

                        break;

                    case JsonProperties.SHOW_PROPERTY_NAME_COMMENT_COUNT:
                        traktShow.CommentCount = await jsonReader.ReadAsInt32Async(cancellationToken);

                        break;

                    default:
                        await JsonReaderHelper.ReadAndIgnoreInvalidContentAsync(jsonReader, cancellationToken);

                        break;
                    }
                }

                return(traktShow);
            }

            return(await Task.FromResult(default(ITraktShow)));
        }
        public async Task Test_SeasonArrayJsonReader_ReadArray_From_Json_String_Full_Complete()
        {
            var jsonReader = new SeasonArrayJsonReader();

            var traktSeasons = await jsonReader.ReadArrayAsync(FULL_JSON_COMPLETE);

            traktSeasons.Should().NotBeNull().And.NotBeEmpty().And.HaveCount(2);

            var seasons = traktSeasons.ToArray();

            seasons[0].Should().NotBeNull();
            seasons[0].Number.Should().Be(1);
            seasons[0].Ids.Should().NotBeNull();
            seasons[0].Ids.Trakt.Should().Be(61430U);
            seasons[0].Ids.Tvdb.Should().Be(279121U);
            seasons[0].Ids.Tmdb.Should().Be(60523U);
            seasons[0].Ids.TvRage.Should().Be(36939U);
            seasons[0].Rating.Should().Be(8.57053f);
            seasons[0].Votes.Should().Be(794);
            seasons[0].TotalEpisodesCount.Should().Be(10);
            seasons[0].AiredEpisodesCount.Should().Be(10);
            seasons[0].Overview.Should().Be("Trouble is brewing in the Seven Kingdoms of Westeros. For the driven inhabitants of this visionary world, control of Westeros' Iron Throne holds the lure of great power. But in a land where the seasons can last a lifetime, winter is coming...and beyond the Great Wall that protects them, an ancient evil has returned. In Season One, the story centers on three primary areas: the Stark and the Lannister families, whose designs on controlling the throne threaten a tenuous peace; the dragon princess Daenerys, heir to the former dynasty, who waits just over the Narrow Sea with her malevolent brother Viserys; and the Great Wall--a massive barrier of ice where a forgotten danger is stirring.");
            seasons[0].FirstAired.Should().Be(DateTime.Parse("2011-04-18T01:00:00.000Z").ToUniversalTime());
            seasons[0].Network.Should().Be("The CW");
            seasons[0].Episodes.Should().NotBeNull().And.HaveCount(2);

            var episodes = seasons[0].Episodes.ToArray();

            episodes[0].Should().NotBeNull();
            episodes[0].SeasonNumber.Should().Be(1);
            episodes[0].Number.Should().Be(1);
            episodes[0].Title.Should().Be("Winter Is Coming");
            episodes[0].Ids.Should().NotBeNull();
            episodes[0].Ids.Trakt.Should().Be(73640U);
            episodes[0].Ids.Tvdb.Should().Be(3254641U);
            episodes[0].Ids.Imdb.Should().Be("tt1480055");
            episodes[0].Ids.Tmdb.Should().Be(63056U);
            episodes[0].Ids.TvRage.Should().Be(1065008299U);
            episodes[0].NumberAbsolute.Should().NotHaveValue();
            episodes[0].Overview.Should().BeNullOrEmpty();
            episodes[0].Runtime.Should().NotHaveValue();
            episodes[0].Rating.Should().NotHaveValue();
            episodes[0].Votes.Should().NotHaveValue();
            episodes[0].FirstAired.Should().NotHaveValue();
            episodes[0].UpdatedAt.Should().NotHaveValue();
            episodes[0].AvailableTranslationLanguageCodes.Should().BeNull();
            episodes[0].Translations.Should().BeNull();

            episodes[1].Should().NotBeNull();
            episodes[1].SeasonNumber.Should().Be(1);
            episodes[1].Number.Should().Be(2);
            episodes[1].Title.Should().Be("The Kingsroad");
            episodes[1].Ids.Should().NotBeNull();
            episodes[1].Ids.Trakt.Should().Be(74138U);
            episodes[1].Ids.Tvdb.Should().Be(3436411U);
            episodes[1].Ids.Imdb.Should().Be("tt1668746");
            episodes[1].Ids.Tmdb.Should().Be(63141U);
            episodes[1].Ids.TvRage.Should().Be(1325718577U);
            episodes[1].NumberAbsolute.Should().NotHaveValue();
            episodes[1].Overview.Should().BeNullOrEmpty();
            episodes[1].Runtime.Should().NotHaveValue();
            episodes[1].Rating.Should().NotHaveValue();
            episodes[1].Votes.Should().NotHaveValue();
            episodes[1].FirstAired.Should().NotHaveValue();
            episodes[1].UpdatedAt.Should().NotHaveValue();
            episodes[1].AvailableTranslationLanguageCodes.Should().BeNull();
            episodes[1].Translations.Should().BeNull();

            // ------------------------------------------------------------

            seasons[1].Should().NotBeNull();
            seasons[1].Number.Should().Be(2);
            seasons[1].Ids.Should().NotBeNull();
            seasons[1].Ids.Trakt.Should().Be(3964U);
            seasons[1].Ids.Tvdb.Should().Be(473271U);
            seasons[1].Ids.Tmdb.Should().Be(3625U);
            seasons[1].Ids.TvRage.Should().Be(36940U);
            seasons[1].Rating.Should().Be(9.10629f);
            seasons[1].Votes.Should().Be(1590);
            seasons[1].TotalEpisodesCount.Should().Be(10);
            seasons[1].AiredEpisodesCount.Should().Be(10);
            seasons[1].Overview.Should().Be("The cold winds of winter are rising in Westeros...war is coming...and five kings continue their savage quest for control of the all-powerful Iron Throne. With winter fast approaching, the coveted Iron Throne is occupied by the cruel Joffrey, counseled by his conniving mother Cersei and uncle Tyrion. But the Lannister hold on the Throne is under assault on many fronts. Meanwhile, a new leader is rising among the wildings outside the Great Wall, adding new perils for Jon Snow and the order of the Night's Watch.");
            seasons[1].FirstAired.Should().Be(DateTime.Parse("2012-04-02T01:00:00.000Z").ToUniversalTime());
            seasons[1].Network.Should().Be("The CW");
            seasons[1].Episodes.Should().NotBeNull().And.HaveCount(2);

            episodes = seasons[1].Episodes.ToArray();

            episodes[0].Should().NotBeNull();
            episodes[0].SeasonNumber.Should().Be(2);
            episodes[0].Number.Should().Be(1);
            episodes[0].Title.Should().Be("The North Remembers");
            episodes[0].Ids.Should().NotBeNull();
            episodes[0].Ids.Trakt.Should().Be(73650U);
            episodes[0].Ids.Tvdb.Should().Be(4161693U);
            episodes[0].Ids.Imdb.Should().Be("tt1971833");
            episodes[0].Ids.Tmdb.Should().Be(63066U);
            episodes[0].Ids.TvRage.Should().Be(1065074755U);
            episodes[0].NumberAbsolute.Should().NotHaveValue();
            episodes[0].Overview.Should().BeNullOrEmpty();
            episodes[0].Runtime.Should().NotHaveValue();
            episodes[0].Rating.Should().NotHaveValue();
            episodes[0].Votes.Should().NotHaveValue();
            episodes[0].FirstAired.Should().NotHaveValue();
            episodes[0].UpdatedAt.Should().NotHaveValue();
            episodes[0].AvailableTranslationLanguageCodes.Should().BeNull();
            episodes[0].Translations.Should().BeNull();

            episodes[1].Should().NotBeNull();
            episodes[1].SeasonNumber.Should().Be(2);
            episodes[1].Number.Should().Be(2);
            episodes[1].Title.Should().Be("The Night Lands");
            episodes[1].Ids.Should().NotBeNull();
            episodes[1].Ids.Trakt.Should().Be(73651U);
            episodes[1].Ids.Tvdb.Should().Be(4245771U);
            episodes[1].Ids.Imdb.Should().Be("tt2069318");
            episodes[1].Ids.Tmdb.Should().Be(974430U);
            episodes[1].Ids.TvRage.Should().Be(1065150289U);
            episodes[1].NumberAbsolute.Should().NotHaveValue();
            episodes[1].Overview.Should().BeNullOrEmpty();
            episodes[1].Runtime.Should().NotHaveValue();
            episodes[1].Rating.Should().NotHaveValue();
            episodes[1].Votes.Should().NotHaveValue();
            episodes[1].FirstAired.Should().NotHaveValue();
            episodes[1].UpdatedAt.Should().NotHaveValue();
            episodes[1].AvailableTranslationLanguageCodes.Should().BeNull();
            episodes[1].Translations.Should().BeNull();
        }