Beispiel #1
0
        public async Task Test_SyncRecommendationsPostObjectJsonReader_ReadObject_From_Json_String_Empty()
        {
            var traktJsonReader = new SyncRecommendationsPostObjectJsonReader();
            ITraktSyncRecommendationsPost traktSyncRecommendationsPost = await traktJsonReader.ReadObjectAsync(string.Empty);

            traktSyncRecommendationsPost.Should().BeNull();
        }
        public void Test_TraktPost_SyncRatingsPostBuilder_AddMovieWithNotes()
        {
            ITraktMovie movie = new TraktMovie
            {
                Title = "movie title",
                Year  = 2020,
                Ids   = new TraktMovieIds
                {
                    Trakt = 1,
                    Slug  = "movie-title",
                    Imdb  = "ttmovietitle",
                    Tmdb  = 1
                }
            };

            ITraktSyncRecommendationsPost syncRecommendationsPost = TraktPost.NewSyncRecommendationsPost()
                                                                    .AddMovieWithNotes(movie, TEST_NOTES)
                                                                    .Build();

            syncRecommendationsPost.Should().NotBeNull();
            syncRecommendationsPost.Movies.Should().NotBeNull().And.HaveCount(1);

            ITraktSyncRecommendationsPostMovie postMovie = syncRecommendationsPost.Movies.ToArray()[0];

            postMovie.Title = "movie title";
            postMovie.Year  = 2020;
            postMovie.Ids.Should().NotBeNull();
            postMovie.Ids.Trakt.Should().Be(1U);
            postMovie.Ids.Slug.Should().Be("movie-title");
            postMovie.Ids.Imdb.Should().Be("ttmovietitle");
            postMovie.Ids.Tmdb.Should().Be(1U);
            postMovie.Notes.Should().Be(TEST_NOTES);

            syncRecommendationsPost.Shows.Should().NotBeNull().And.BeEmpty();
        }
        public void Test_TraktPost_SyncRatingsPostBuilder_WithMovies()
        {
            var movies = new List <ITraktMovie>
            {
                new TraktMovie
                {
                    Title = "movie 1 title",
                    Year  = 2020,
                    Ids   = new TraktMovieIds
                    {
                        Trakt = 1,
                        Slug  = "movie-1-title",
                        Imdb  = "ttmovie1title",
                        Tmdb  = 1
                    }
                },
                new TraktMovie
                {
                    Title = "movie 2 title",
                    Year  = 2020,
                    Ids   = new TraktMovieIds
                    {
                        Trakt = 2,
                        Slug  = "movie-2-title",
                        Imdb  = "ttmovie2title",
                        Tmdb  = 2
                    }
                }
            };

            ITraktSyncRecommendationsPost syncRecommendationsPost = TraktPost.NewSyncRecommendationsPost()
                                                                    .WithMovies(movies)
                                                                    .Build();

            syncRecommendationsPost.Should().NotBeNull();
            syncRecommendationsPost.Movies.Should().NotBeNull().And.HaveCount(2);

            ITraktSyncRecommendationsPostMovie[] postMovies = syncRecommendationsPost.Movies.ToArray();

            postMovies[0].Title = "movie 1 title";
            postMovies[0].Year  = 2020;
            postMovies[0].Ids.Should().NotBeNull();
            postMovies[0].Ids.Trakt.Should().Be(1U);
            postMovies[0].Ids.Slug.Should().Be("movie-1-title");
            postMovies[0].Ids.Imdb.Should().Be("ttmovie1title");
            postMovies[0].Ids.Tmdb.Should().Be(1U);
            postMovies[0].Notes.Should().BeNull();

            postMovies[1].Title = "movie 2 title";
            postMovies[1].Year  = 2020;
            postMovies[1].Ids.Should().NotBeNull();
            postMovies[1].Ids.Trakt.Should().Be(2U);
            postMovies[1].Ids.Slug.Should().Be("movie-2-title");
            postMovies[1].Ids.Imdb.Should().Be("ttmovie2title");
            postMovies[1].Ids.Tmdb.Should().Be(2U);
            postMovies[1].Notes.Should().BeNull();

            syncRecommendationsPost.Shows.Should().NotBeNull().And.BeEmpty();
        }
        public void Test_TraktPost_SyncRecommendationsPostBuilder_Empty_Build()
        {
            ITraktSyncRecommendationsPost syncRecommendationsPost = TraktPost.NewSyncRecommendationsPost().Build();

            syncRecommendationsPost.Should().NotBeNull();
            syncRecommendationsPost.Movies.Should().NotBeNull().And.BeEmpty();
            syncRecommendationsPost.Shows.Should().NotBeNull().And.BeEmpty();
        }
        public async Task Test_SyncRecommendationsPostObjectJsonReader_ReadObject_From_JsonReader_Complete()
        {
            var traktJsonReader = new SyncRecommendationsPostObjectJsonReader();

            using var reader     = new StringReader(JSON_COMPLETE);
            using var jsonReader = new JsonTextReader(reader);
            ITraktSyncRecommendationsPost traktSyncRecommendationsPost = await traktJsonReader.ReadObjectAsync(jsonReader);

            traktSyncRecommendationsPost.Should().NotBeNull();
            traktSyncRecommendationsPost.Movies.Should().NotBeNull().And.HaveCount(2);

            ITraktSyncRecommendationsPostMovie[] postMovies = traktSyncRecommendationsPost.Movies.ToArray();

            postMovies[0].Title.Should().Be("Batman Begins");
            postMovies[0].Year.Should().Be(2005);
            postMovies[0].Ids.Should().NotBeNull();
            postMovies[0].Ids.Trakt.Should().Be(1U);
            postMovies[0].Ids.Slug.Should().Be("batman-begins-2005");
            postMovies[0].Ids.Imdb.Should().Be("tt0372784");
            postMovies[0].Ids.Tmdb.Should().Be(272U);
            postMovies[0].Notes.Should().Be("One of Chritian Bale's most iconic roles.");

            postMovies[1].Title.Should().BeNull();
            postMovies[1].Year.Should().BeNull();
            postMovies[1].Ids.Should().NotBeNull();
            postMovies[1].Ids.Trakt.Should().Be(0U);
            postMovies[1].Ids.Slug.Should().BeNull();
            postMovies[1].Ids.Imdb.Should().Be("tt0000111");
            postMovies[1].Ids.Tmdb.Should().BeNull();
            postMovies[1].Notes.Should().BeNull();

            traktSyncRecommendationsPost.Shows.Should().NotBeNull().And.HaveCount(2);

            ITraktSyncRecommendationsPostShow[] postShows = traktSyncRecommendationsPost.Shows.ToArray();

            postShows[0].Title.Should().Be("Breaking Bad");
            postShows[0].Year.Should().Be(2008);
            postShows[0].Ids.Should().NotBeNull();
            postShows[0].Ids.Trakt.Should().Be(1U);
            postShows[0].Ids.Slug.Should().Be("breaking-bad");
            postShows[0].Ids.Tvdb.Should().Be(81189U);
            postShows[0].Ids.Imdb.Should().Be("tt0903747");
            postShows[0].Ids.Tmdb.Should().Be(1396U);
            postShows[0].Notes.Should().Be("I AM THE DANGER!");

            postShows[1].Title.Should().Be("The Walking Dead");
            postShows[1].Year.Should().Be(2010);
            postShows[1].Ids.Should().NotBeNull();
            postShows[1].Ids.Trakt.Should().Be(2U);
            postShows[1].Ids.Slug.Should().Be("the-walking-dead");
            postShows[1].Ids.Tvdb.Should().Be(153021U);
            postShows[1].Ids.Imdb.Should().Be("tt1520211");
            postShows[1].Ids.Tmdb.Should().Be(1402U);
            postShows[1].Notes.Should().BeNull();
        }
        private void AddShows(ITraktSyncRecommendationsPost syncRecommendationsPost)
        {
            if (syncRecommendationsPost.Shows == null)
            {
                syncRecommendationsPost.Shows = new List <ITraktSyncRecommendationsPostShow>();
            }

            foreach (ITraktShow show in _shows)
            {
                (syncRecommendationsPost.Shows as List <ITraktSyncRecommendationsPostShow>).Add(CreateSyncRecommendationsPostShow(show));
            }

            foreach (PostBuilderObjectWithNotes <ITraktShow> showWithNotes in _showsWithNotes)
            {
                (syncRecommendationsPost.Shows as List <ITraktSyncRecommendationsPostShow>).Add(CreateSyncRecommendationsPostShow(showWithNotes.Object, showWithNotes.Notes));
            }
        }
        private void AddMovies(ITraktSyncRecommendationsPost syncRecommendationsPost)
        {
            if (syncRecommendationsPost.Movies == null)
            {
                syncRecommendationsPost.Movies = new List <ITraktSyncRecommendationsPostMovie>();
            }

            foreach (ITraktMovie movie in _movies)
            {
                (syncRecommendationsPost.Movies as List <ITraktSyncRecommendationsPostMovie>).Add(CreateSyncRecommendationsPostMovie(movie));
            }

            foreach (PostBuilderObjectWithNotes <ITraktMovie> movieWithNotes in _moviesWithNotes)
            {
                (syncRecommendationsPost.Movies as List <ITraktSyncRecommendationsPostMovie>).Add(CreateSyncRecommendationsPostMovie(movieWithNotes.Object, movieWithNotes.Notes));
            }
        }
        public void Test_TraktPost_SyncRatingsPostBuilder_AddShowWithNotes()
        {
            ITraktShow show = new TraktShow
            {
                Title = "show title",
                Year  = 2020,
                Ids   = new TraktShowIds
                {
                    Trakt  = 1,
                    Slug   = "show-title",
                    Imdb   = "ttshowtitle",
                    Tmdb   = 1,
                    Tvdb   = 1,
                    TvRage = 1
                }
            };

            ITraktSyncRecommendationsPost syncRecommendationsPost = TraktPost.NewSyncRecommendationsPost()
                                                                    .AddShowWithNotes(show, TEST_NOTES)
                                                                    .Build();

            syncRecommendationsPost.Should().NotBeNull();
            syncRecommendationsPost.Shows.Should().NotBeNull().And.HaveCount(1);

            ITraktSyncRecommendationsPostShow postShow = syncRecommendationsPost.Shows.ToArray()[0];

            postShow.Title = "show title";
            postShow.Year  = 2020;
            postShow.Ids.Should().NotBeNull();
            postShow.Ids.Trakt.Should().Be(1U);
            postShow.Ids.Slug.Should().Be("show-title");
            postShow.Ids.Imdb.Should().Be("ttshowtitle");
            postShow.Ids.Tmdb.Should().Be(1U);
            postShow.Ids.Tvdb.Should().Be(1U);
            postShow.Ids.TvRage.Should().Be(1U);
            postShow.Notes.Should().Be(TEST_NOTES);

            syncRecommendationsPost.Movies.Should().NotBeNull().And.BeEmpty();
        }
        public void Test_TraktPost_SyncRatingsPostBuilder_WithShowsWithNotes()
        {
            var shows = new List <Tuple <ITraktShow, string> >
            {
                new Tuple <ITraktShow, string>
                (
                    new TraktShow
                {
                    Title = "show 1 title",
                    Year  = 2020,
                    Ids   = new TraktShowIds
                    {
                        Trakt  = 1,
                        Slug   = "show-1-title",
                        Imdb   = "ttshow1title",
                        Tmdb   = 1,
                        Tvdb   = 1,
                        TvRage = 1
                    }
                },
                    TEST_NOTES
                ),
                new Tuple <ITraktShow, string>
                (
                    new TraktShow
                {
                    Title = "show 2 title",
                    Year  = 2020,
                    Ids   = new TraktShowIds
                    {
                        Trakt  = 2,
                        Slug   = "show-2-title",
                        Imdb   = "ttshow2title",
                        Tmdb   = 2,
                        Tvdb   = 2,
                        TvRage = 2
                    }
                },
                    TEST_NOTES
                )
            };

            ITraktSyncRecommendationsPost syncRecommendationsPost = TraktPost.NewSyncRecommendationsPost()
                                                                    .WithShowsWithNotes(shows)
                                                                    .Build();

            syncRecommendationsPost.Should().NotBeNull();
            syncRecommendationsPost.Shows.Should().NotBeNull().And.HaveCount(2);

            ITraktSyncRecommendationsPostShow[] postShows = syncRecommendationsPost.Shows.ToArray();

            postShows[0].Title = "show 1 title";
            postShows[0].Year  = 2020;
            postShows[0].Ids.Should().NotBeNull();
            postShows[0].Ids.Trakt.Should().Be(1U);
            postShows[0].Ids.Slug.Should().Be("show-1-title");
            postShows[0].Ids.Imdb.Should().Be("ttshow1title");
            postShows[0].Ids.Tmdb.Should().Be(1U);
            postShows[0].Ids.Tvdb.Should().Be(1U);
            postShows[0].Ids.TvRage.Should().Be(1U);
            postShows[0].Notes.Should().Be(TEST_NOTES);

            postShows[1].Title = "show 2 title";
            postShows[1].Year  = 2020;
            postShows[1].Ids.Should().NotBeNull();
            postShows[1].Ids.Trakt.Should().Be(2U);
            postShows[1].Ids.Slug.Should().Be("show-2-title");
            postShows[1].Ids.Imdb.Should().Be("ttshow2title");
            postShows[1].Ids.Tmdb.Should().Be(2U);
            postShows[1].Ids.Tvdb.Should().Be(2U);
            postShows[1].Ids.TvRage.Should().Be(2U);
            postShows[1].Notes.Should().Be(TEST_NOTES);

            syncRecommendationsPost.Movies.Should().NotBeNull().And.BeEmpty();
        }
        /// <summary>
        /// Adds items to the user's personal recommendations. Accepts movies and shows.
        /// <para>OAuth authorization required.</para>
        /// <para>
        /// See <a href="https://trakt.docs.apiary.io/#reference/sync/get-personal-recommendations/add-items-to-personal-recommendations">"Trakt API Doc - Sync: Add to Personal Recommendations"</a> for more information.
        /// </para>
        /// <para>
        /// It is recommended to use the <see cref="ITraktSyncRecommendationsPostBuilder" /> to create an instance
        /// of the required <see cref="ITraktSyncRecommendationsPost" />.
        /// See also <seealso cref="TraktPost.NewSyncRecommendationsPost()" />.
        /// </para>
        /// </summary>
        /// <param name="recommendationsPost">An <see cref="ITraktSyncRecommendationsPost" /> instance containing all movies and shows, which should be added.</param>
        /// <param name="cancellationToken">
        /// Propagates notification that the request should be canceled.<para/>
        /// If provided, the exception <see cref="OperationCanceledException" /> should be catched.
        /// </param>
        /// <returns>An <see cref="ITraktSyncRecommendationsPostResponse" /> instance, which contains information about which items were added and not found.</returns>
        /// <exception cref="TraktException">Thrown, if the request fails.</exception>
        /// <exception cref="ArgumentNullException">Thrown if the given ratings post is null.</exception>
        /// <exception cref="ArgumentException">Thrown, if the given ratings post is empty.</exception>
        public Task <TraktResponse <ITraktSyncRecommendationsPostResponse> > AddPersonalRecommendationsAsync(ITraktSyncRecommendationsPost recommendationsPost,
                                                                                                             CancellationToken cancellationToken = default)
        {
            if (recommendationsPost == null)
            {
                throw new ArgumentNullException(nameof(recommendationsPost), "recommendations post must not be null");
            }

            var requestHandler = new RequestHandler(Client);

            return(requestHandler.ExecuteSingleItemRequestAsync(new SyncRecommendationsAddRequest
            {
                RequestBody = recommendationsPost
            },
                                                                cancellationToken));
        }