private TraktEpisodeScrobblePost CreateEpisodeScrobblePost(TraktEpisode episode, float progress, TraktShow show = null,
                                                                   string appVersion = null, DateTime?appDate = null)
        {
            Validate(episode, show);
            ValidateProgress(progress);

            var episodeScrobblePost = new TraktEpisodeScrobblePost
            {
                Episode = new TraktEpisode
                {
                    Ids          = episode.Ids,
                    SeasonNumber = episode.SeasonNumber,
                    Number       = episode.Number
                },
                Show = show != null ? new TraktShow {
                    Title = show.Title
                } : null,
                Progress = progress
            };

            if (!string.IsNullOrEmpty(appVersion))
            {
                episodeScrobblePost.AppVersion = appVersion;
            }

            if (appDate.HasValue)
            {
                episodeScrobblePost.AppDate = appDate.Value.ToTraktDateString();
            }

            return(episodeScrobblePost);
        }
        public override async Task <ITraktEpisodeScrobblePost> ReadObjectAsync(JsonTextReader jsonReader, CancellationToken cancellationToken = default)
        {
            CheckJsonTextReader(jsonReader);

            if (await jsonReader.ReadAsync(cancellationToken) && jsonReader.TokenType == JsonToken.StartObject)
            {
                var episodeReader = new EpisodeObjectJsonReader();
                var showReader    = new ShowObjectJsonReader();
                ITraktEpisodeScrobblePost episodeScrobblePost = new TraktEpisodeScrobblePost();

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

                    switch (propertyName)
                    {
                    case JsonProperties.PROPERTY_NAME_PROGRESS:
                    {
                        Pair <bool, float> value = await JsonReaderHelper.ReadFloatValueAsync(jsonReader, cancellationToken);

                        if (value.First)
                        {
                            episodeScrobblePost.Progress = value.Second;
                        }

                        break;
                    }

                    case JsonProperties.PROPERTY_NAME_APP_VERSION:
                        episodeScrobblePost.AppVersion = await jsonReader.ReadAsStringAsync(cancellationToken);

                        break;

                    case JsonProperties.PROPERTY_NAME_APP_DATE:
                        episodeScrobblePost.AppDate = await jsonReader.ReadAsStringAsync(cancellationToken);

                        break;

                    case JsonProperties.PROPERTY_NAME_SHOW:
                        episodeScrobblePost.Show = await showReader.ReadObjectAsync(jsonReader, cancellationToken);

                        break;

                    case JsonProperties.PROPERTY_NAME_EPISODE:
                        episodeScrobblePost.Episode = await episodeReader.ReadObjectAsync(jsonReader, cancellationToken);

                        break;

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

                        break;
                    }
                }

                return(episodeScrobblePost);
            }

            return(await Task.FromResult(default(ITraktEpisodeScrobblePost)));
        }
        public void TestTraktEpisodeScrobblePostDefaultConstructor()
        {
            var episodeScrobble = new TraktEpisodeScrobblePost();

            episodeScrobble.Progress.Should().Be(0.0f);
            episodeScrobble.AppVersion.Should().BeNullOrEmpty();
            episodeScrobble.AppDate.Should().BeNull();
            episodeScrobble.Episode.Should().BeNull();
            episodeScrobble.Show.Should().BeNull();
        }
        public async Task Test_TraktScrobbleModule_StartEpisodeWithShow_Complete()
        {
            ITraktEpisodeScrobblePost episodeStartScrobblePost = new TraktEpisodeScrobblePost
            {
                Episode    = Episode,
                Show       = Show,
                Progress   = START_PROGRESS,
                AppVersion = APP_VERSION,
                AppDate    = APP_BUILD_DATE.ToTraktDateString()
            };

            string postJson = await TestUtility.SerializeObject(episodeStartScrobblePost);

            postJson.Should().NotBeNullOrEmpty();

            TraktClient client = TestUtility.GetOAuthMockClient(SCROBBLE_START_URI, postJson, EPISODE_START_SCROBBLE_POST_RESPONSE_JSON);

            TraktResponse <ITraktEpisodeScrobblePostResponse> response =
                await client.Scrobble.StartEpisodeWithShowAsync(Episode, Show, START_PROGRESS, APP_VERSION, APP_BUILD_DATE);

            response.Should().NotBeNull();
            response.IsSuccess.Should().BeTrue();
            response.HasValue.Should().BeTrue();
            response.Value.Should().NotBeNull();

            ITraktEpisodeScrobblePostResponse responseValue = response.Value;

            responseValue.Id.Should().Be(0);
            responseValue.Action.Should().Be(TraktScrobbleActionType.Start);
            responseValue.Progress.Should().Be(START_PROGRESS);
            responseValue.Sharing.Should().NotBeNull();
            responseValue.Sharing.Facebook.Should().BeTrue();
            responseValue.Sharing.Twitter.Should().BeTrue();
            responseValue.Sharing.Tumblr.Should().BeFalse();
            responseValue.Episode.Should().NotBeNull();
            responseValue.Episode.SeasonNumber.Should().Be(1);
            responseValue.Episode.Number.Should().Be(1);
            responseValue.Episode.Title.Should().Be("Pilot");
            responseValue.Episode.Ids.Should().NotBeNull();
            responseValue.Episode.Ids.Trakt.Should().Be(16U);
            responseValue.Episode.Ids.Tvdb.Should().Be(349232U);
            responseValue.Episode.Ids.Imdb.Should().Be("tt0959621");
            responseValue.Episode.Ids.Tmdb.Should().Be(62085U);
            responseValue.Episode.Ids.TvRage.Should().Be(637041U);
            responseValue.Show.Should().NotBeNull();
            responseValue.Show.Title.Should().Be("Breaking Bad");
            responseValue.Show.Year.Should().Be(2008);
            responseValue.Show.Ids.Should().NotBeNull();
            responseValue.Show.Ids.Trakt.Should().Be(1U);
            responseValue.Show.Ids.Slug.Should().Be("breaking-bad");
            responseValue.Show.Ids.Tvdb.Should().Be(81189U);
            responseValue.Show.Ids.Imdb.Should().Be("tt0903747");
            responseValue.Show.Ids.Tmdb.Should().Be(1396U);
            responseValue.Show.Ids.TvRage.Should().Be(18164U);
        }
        public async Task Test_TraktScrobbleModule_StopEpisode_With_AppVersion_And_AppDate()
        {
            ITraktEpisodeScrobblePost episodeStopScrobblePost = new TraktEpisodeScrobblePost
            {
                Episode    = Episode,
                Progress   = STOP_PROGRESS,
                AppVersion = APP_VERSION,
                AppDate    = APP_BUILD_DATE.ToTraktDateString()
            };

            string postJson = await TestUtility.SerializeObject(episodeStopScrobblePost);

            postJson.Should().NotBeNullOrEmpty();

            TraktClient client = TestUtility.GetOAuthMockClient(SCROBBLE_STOP_URI, postJson, EPISODE_STOP_SCROBBLE_POST_RESPONSE_JSON);

            TraktResponse <ITraktEpisodeScrobblePostResponse> response =
                await client.Scrobble.StopEpisodeAsync(Episode, STOP_PROGRESS, APP_VERSION, APP_BUILD_DATE);

            response.Should().NotBeNull();
            response.IsSuccess.Should().BeTrue();
            response.HasValue.Should().BeTrue();
            response.Value.Should().NotBeNull();

            ITraktEpisodeScrobblePostResponse responseValue = response.Value;

            responseValue.Id.Should().Be(3373536623);
            responseValue.Action.Should().Be(TraktScrobbleActionType.Stop);
            responseValue.Progress.Should().Be(STOP_PROGRESS);
            responseValue.Sharing.Should().NotBeNull();
            responseValue.Sharing.Facebook.Should().BeTrue();
            responseValue.Sharing.Twitter.Should().BeTrue();
            responseValue.Sharing.Tumblr.Should().BeFalse();
            responseValue.Episode.Should().NotBeNull();
            responseValue.Episode.SeasonNumber.Should().Be(1);
            responseValue.Episode.Number.Should().Be(1);
            responseValue.Episode.Title.Should().Be("Pilot");
            responseValue.Episode.Ids.Should().NotBeNull();
            responseValue.Episode.Ids.Trakt.Should().Be(16U);
            responseValue.Episode.Ids.Tvdb.Should().Be(349232U);
            responseValue.Episode.Ids.Imdb.Should().Be("tt0959621");
            responseValue.Episode.Ids.Tmdb.Should().Be(62085U);
            responseValue.Episode.Ids.TvRage.Should().Be(637041U);
        }
Example #6
0
        public async Task Test_TraktScrobbleModule_PauseEpisode()
        {
            ITraktEpisodeScrobblePost episodePauseScrobblePost = new TraktEpisodeScrobblePost
            {
                Episode  = Episode,
                Progress = PAUSE_PROGRESS
            };

            string postJson = await TestUtility.SerializeObject(episodePauseScrobblePost);

            postJson.Should().NotBeNullOrEmpty();

            TraktClient client = TestUtility.GetOAuthMockClient(SCROBBLE_PAUSE_URI, postJson, EPISODE_PAUSE_SCROBBLE_POST_RESPONSE_JSON);
            TraktResponse <ITraktEpisodeScrobblePostResponse> response = await client.Scrobble.PauseEpisodeAsync(Episode, PAUSE_PROGRESS);

            response.Should().NotBeNull();
            response.IsSuccess.Should().BeTrue();
            response.HasValue.Should().BeTrue();
            response.Value.Should().NotBeNull();

            ITraktEpisodeScrobblePostResponse responseValue = response.Value;

            responseValue.Id.Should().Be(0);
            responseValue.Action.Should().Be(TraktScrobbleActionType.Pause);
            responseValue.Progress.Should().Be(PAUSE_PROGRESS);
            responseValue.Sharing.Should().NotBeNull();
            responseValue.Sharing.Facebook.Should().BeFalse();
            responseValue.Sharing.Twitter.Should().BeTrue();
            responseValue.Sharing.Tumblr.Should().BeFalse();
            responseValue.Episode.Should().NotBeNull();
            responseValue.Episode.SeasonNumber.Should().Be(1);
            responseValue.Episode.Number.Should().Be(1);
            responseValue.Episode.Title.Should().Be("Pilot");
            responseValue.Episode.Ids.Should().NotBeNull();
            responseValue.Episode.Ids.Trakt.Should().Be(16U);
            responseValue.Episode.Ids.Tvdb.Should().Be(349232U);
            responseValue.Episode.Ids.Imdb.Should().Be("tt0959621");
            responseValue.Episode.Ids.Tmdb.Should().Be(62085U);
            responseValue.Episode.Ids.TvRage.Should().Be(637041U);
        }
Example #7
0
        private ITraktEpisodeScrobblePost CreateEpisodeScrobblePost(int absoluteEpisodeNumber, float progress, ITraktShow show = null,
                                                                    string appVersion = null, DateTime?appDate = null)
        {
            if (show == null)
            {
                throw new ArgumentNullException(nameof(show), "show must not be null");
            }

            ValidateProgress(progress);

            var episodeScrobblePost = new TraktEpisodeScrobblePost
            {
                Episode = new TraktEpisode
                {
                    NumberAbsolute = absoluteEpisodeNumber
                },
                Show = new TraktShow
                {
                    Title = show.Title,
                    Ids   = show.Ids
                },
                Progress = progress
            };

            if (!string.IsNullOrEmpty(appVersion))
            {
                episodeScrobblePost.AppVersion = appVersion;
            }

            if (appDate.HasValue)
            {
                episodeScrobblePost.AppDate = appDate.Value.ToTraktDateString();
            }

            return(episodeScrobblePost);
        }
        public async Task Test_TraktScrobbleModule_StopEpisodeWithShow_ArgumentExceptions()
        {
            ITraktEpisode episode = new TraktEpisode
            {
                SeasonNumber = 0,
                Number       = 1,
                Ids          = new TraktEpisodeIds
                {
                    Trakt  = 16,
                    Tvdb   = 349232,
                    Imdb   = "tt0959621",
                    Tmdb   = 62085,
                    TvRage = 637041
                }
            };

            ITraktShow show = new TraktShow
            {
                Title = "Breaking Bad"
            };

            ITraktEpisodeScrobblePost episodeStopScrobblePost = new TraktEpisodeScrobblePost
            {
                Episode  = episode,
                Show     = show,
                Progress = STOP_PROGRESS
            };

            string postJson = await TestUtility.SerializeObject(episodeStopScrobblePost);

            postJson.Should().NotBeNullOrEmpty();

            TraktClient client = TestUtility.GetOAuthMockClient(SCROBBLE_STOP_URI, postJson, EPISODE_STOP_SCROBBLE_POST_RESPONSE_JSON);

            Func <Task <TraktResponse <ITraktEpisodeScrobblePostResponse> > > act = () => client.Scrobble.StopEpisodeAsync(null, STOP_PROGRESS);

            act.Should().Throw <ArgumentNullException>();

            episode.Ids = null;

            act = () => client.Scrobble.StopEpisodeAsync(episode, STOP_PROGRESS);
            act.Should().Throw <ArgumentNullException>();

            episode.Ids = new TraktEpisodeIds();

            act = () => client.Scrobble.StopEpisodeAsync(episode, STOP_PROGRESS);
            act.Should().Throw <ArgumentNullException>();

            episode.Ids = new TraktEpisodeIds
            {
                Trakt  = 16,
                Tvdb   = 349232,
                Imdb   = "tt0959621",
                Tmdb   = 62085,
                TvRage = 637041
            };

            act = () => client.Scrobble.StopEpisodeAsync(episode, -0.0001f);
            act.Should().Throw <ArgumentOutOfRangeException>();

            act = () => client.Scrobble.StopEpisodeAsync(episode, 100.0001f);
            act.Should().Throw <ArgumentOutOfRangeException>();

            episode.Ids          = null;
            episode.SeasonNumber = -1;

            act = () => client.Scrobble.StopEpisodeWithShowAsync(episode, show, STOP_PROGRESS);
            act.Should().Throw <ArgumentOutOfRangeException>();

            episode.Ids = new TraktEpisodeIds();

            act = () => client.Scrobble.StopEpisodeWithShowAsync(episode, show, STOP_PROGRESS);
            act.Should().Throw <ArgumentOutOfRangeException>();

            episode.Ids          = null;
            episode.SeasonNumber = 0;
            episode.Number       = 0;

            act = () => client.Scrobble.StopEpisodeWithShowAsync(episode, show, STOP_PROGRESS);
            act.Should().Throw <ArgumentOutOfRangeException>();

            episode.Ids    = new TraktEpisodeIds();
            episode.Number = 0;

            act = () => client.Scrobble.StopEpisodeWithShowAsync(episode, show, STOP_PROGRESS);
            act.Should().Throw <ArgumentOutOfRangeException>();

            episode.Ids    = null;
            episode.Number = 1;
            show.Title     = string.Empty;

            act = () => client.Scrobble.StopEpisodeWithShowAsync(episode, show, STOP_PROGRESS);
            act.Should().Throw <ArgumentException>();

            episode.Ids = new TraktEpisodeIds();

            act = () => client.Scrobble.StopEpisodeWithShowAsync(episode, show, STOP_PROGRESS);
            act.Should().Throw <ArgumentException>();

            episode.Ids = null;
            show.Title  = "Breaking Bad";

            act = () => client.Scrobble.StopEpisodeWithShowAsync(episode, show, -0.0001f);
            act.Should().Throw <ArgumentOutOfRangeException>();

            act = () => client.Scrobble.StopEpisodeWithShowAsync(episode, show, 100.0001f);
            act.Should().Throw <ArgumentOutOfRangeException>();

            episode.Ids = new TraktEpisodeIds();

            act = () => client.Scrobble.StopEpisodeWithShowAsync(episode, show, -0.0001f);
            act.Should().Throw <ArgumentOutOfRangeException>();

            act = () => client.Scrobble.StopEpisodeWithShowAsync(episode, show, 100.0001f);
            act.Should().Throw <ArgumentOutOfRangeException>();
        }
        public void TestTraktEpisodeScrobblePostWriteJson()
        {
            var progress   = 65.0f;
            var appVersion = "App Version 1.0.0";
            var appDate    = DateTime.UtcNow.ToString("yyyy-MM-dd");

            var episodeNr      = 1;
            var seasonNr       = 1;
            var episodeTitle   = "Pilot";
            var episodeTraktId = 16U;
            var episodeTvdb    = 349232U;
            var episodeImdb    = "tt0959621";
            var episodeTmdb    = 62085U;
            var episodeTvRage  = 637041U;

            var showTitle   = "Breaking Bad";
            var showYear    = 2008;
            var showTraktId = 1U;
            var showSlug    = "breaking-bad";
            var showTvdb    = 81189U;
            var showImdb    = "tt0903747";
            var showTmdb    = 1396U;
            var showTvRage  = 18164U;

            var episode = new TraktEpisode
            {
                SeasonNumber = seasonNr,
                Number       = episodeNr,
                Title        = episodeTitle,
                Ids          = new TraktEpisodeIds
                {
                    Trakt  = episodeTraktId,
                    Tvdb   = episodeTvdb,
                    Imdb   = episodeImdb,
                    Tmdb   = episodeTmdb,
                    TvRage = episodeTvRage
                }
            };

            var show = new TraktShow
            {
                Title = showTitle,
                Year  = showYear,
                Ids   = new TraktShowIds
                {
                    Trakt  = showTraktId,
                    Slug   = showSlug,
                    Tvdb   = showTvdb,
                    Imdb   = showImdb,
                    Tmdb   = showTmdb,
                    TvRage = showTvRage
                }
            };

            var movieScrobble = new TraktEpisodeScrobblePost
            {
                Progress   = progress,
                AppVersion = appVersion,
                AppDate    = appDate,
                Episode    = episode,
                Show       = show
            };

            var strJson = JsonConvert.SerializeObject(movieScrobble);

            strJson.Should().NotBeNullOrEmpty();

            var episodeScrobbleFromJson = JsonConvert.DeserializeObject <TraktEpisodeScrobblePost>(strJson);

            episodeScrobbleFromJson.Should().NotBeNull();
            episodeScrobbleFromJson.Progress.Should().Be(progress);
            episodeScrobbleFromJson.AppVersion.Should().Be(appVersion);
            episodeScrobbleFromJson.AppDate.Should().NotBeNull().And.NotBeEmpty().And.Be(appDate);

            episodeScrobbleFromJson.Episode.Should().NotBeNull();
            episodeScrobbleFromJson.Episode.SeasonNumber.Should().Be(seasonNr);
            episodeScrobbleFromJson.Episode.Number.Should().Be(episodeNr);
            episodeScrobbleFromJson.Episode.Title.Should().Be(episodeTitle);
            episodeScrobbleFromJson.Episode.Ids.Should().NotBeNull();
            episodeScrobbleFromJson.Episode.Ids.Trakt.Should().Be(episodeTraktId);
            episodeScrobbleFromJson.Episode.Ids.Tvdb.Should().Be(episodeTvdb);
            episodeScrobbleFromJson.Episode.Ids.Imdb.Should().Be(episodeImdb);
            episodeScrobbleFromJson.Episode.Ids.Tmdb.Should().Be(episodeTmdb);
            episodeScrobbleFromJson.Episode.Ids.TvRage.Should().Be(episodeTvRage);

            episodeScrobbleFromJson.Show.Should().NotBeNull();
            episodeScrobbleFromJson.Show.Title.Should().Be(showTitle);
            episodeScrobbleFromJson.Show.Year.Should().Be(showYear);
            episodeScrobbleFromJson.Show.Ids.Should().NotBeNull();
            episodeScrobbleFromJson.Show.Ids.Trakt.Should().Be(showTraktId);
            episodeScrobbleFromJson.Show.Ids.Slug.Should().Be(showSlug);
            episodeScrobbleFromJson.Show.Ids.Tvdb.Should().Be(showTvdb);
            episodeScrobbleFromJson.Show.Ids.Imdb.Should().Be(showImdb);
            episodeScrobbleFromJson.Show.Ids.Tmdb.Should().Be(showTmdb);
            episodeScrobbleFromJson.Show.Ids.TvRage.Should().Be(showTvRage);
        }