public async Task <RateMovieResult> RateMovie(string sessionId, decimal rating, int mediaId, string guestSessionId = null, int retryCount = 0, int delayMilliseconds = 1000)
        {
            if (!string.IsNullOrEmpty(guestSessionId))
            {
                throw new NotImplementedException($"Rating with guest session is not supported by the method: {nameof(RateMovie)}, parameter: {nameof(guestSessionId)}={guestSessionId}");
            }

            string baseUrl = BASE_Address + BASE_Path + MOVIE_DETAILS_Path + "/" + mediaId + RATING_Path;

            var query = new Dictionary <string, string>();

            query.Add(API_KEY_Key, ApiKey);
            query.Add(SESSION_ID_Key, sessionId);

            string requestUri = QueryHelpers.AddQueryString(baseUrl, query);

            var jsonObj = new
            {
                value = rating
            };

            string json    = JsonConvert.SerializeObject(jsonObj);
            var    content = new StringContent(json, encoding: Encoding.UTF8, mediaType: "application/json");

            HttpRequestMessage request = new HttpRequestMessage
            {
                Content    = content,
                Method     = HttpMethod.Post,
                RequestUri = new Uri(requestUri)
            };

            HttpResponseMessage response = null;
            int counter = retryCount;

            try
            {
                response = await HttpClient.SendAsync(request);
            }
            catch { }
            while (response?.IsSuccessStatusCode != true && counter > 0)
            {
                await Task.Delay(delayMilliseconds);

                try
                {
                    --counter;
                    response = await HttpClient.SendAsync(request);
                }
                catch { }
            }
            RateMovieResult result = new RateMovieResult
            {
                HttpStatusCode = response?.StatusCode ?? HttpStatusCode.RequestTimeout
            };

            await ReadResponseAsStringIntoResultWhenSafe(result, response);

            return(result);
        }
示例#2
0
        // failure path
        public async Task WhenCalledWithInvalidMovieId_ReturnsErrorCode404()
        {
            decimal rating = 5.5m;

            RateMovieResult response = await _client.RateMovie(_settings.SessionId, rating : rating, mediaId : _invalidMovie, guestSessionId : null, retryCount : 0, delayMilliseconds : 1000);

            _output.WriteLine($"TMDB server's response code {response.HttpStatusCode}");
            Assert.True(response.HttpStatusCode == System.Net.HttpStatusCode.NotFound);
        }
示例#3
0
        // happy path
        public async Task WhenCalledOnUnratedMovie_RatesMovie()
        {
            decimal         rating   = 10m;
            RateMovieResult response = await _client.RateMovie(_settings.SessionId, rating : rating, mediaId : _movie, guestSessionId : null, retryCount : 0, delayMilliseconds : 1000);

            _output.WriteLine($"TMDB server's response code {response.HttpStatusCode}");
            _output.WriteLine($"TMDB server's response message {response.Json}");
            Assert.True(response.HttpStatusCode == System.Net.HttpStatusCode.Created);
        }
示例#4
0
        // happy path
        public async Task WhenCalledOnAlreadyRatedMovieWithDifferentRating_ReturnsSuccessUpdates()
        {
            decimal rating1 = 7.5m;
            decimal rating2 = 9.5m;
            await _client.RateMovie(_settings.SessionId, rating : rating1, mediaId : _movie, guestSessionId : null, retryCount : 0, delayMilliseconds : 1000);

            RateMovieResult response = await _client.RateMovie(_settings.SessionId, rating : rating2, mediaId : _movie, guestSessionId : null, retryCount : 0, delayMilliseconds : 1000);

            _output.WriteLine($"TMDB server's response code {response.HttpStatusCode}");
            _output.WriteLine($"TMDB server's response message {response.Json}");
            Assert.True(response.HttpStatusCode == System.Net.HttpStatusCode.Created);
        }