//TODO : Make sort option to enum public async Task <GetFavoriteMoviesResult> GetFavoriteMovies(string sessionId, int?accountId = null, string language = null, string sortBy = null, int?page = null, int retryCount = 0, int delayMilliseconds = 1000) { // no mistake here: missing "account_id" parameter add the string literal "{account_id}" as paths segment string baseUrl = BASE_Address + BASE_Path + ACCOUNT_DETAILS_Path + "/" + (accountId.HasValue ? accountId.Value.ToString() : "{account_id}") + FAVORITE_Path + MOVIES_Path; var query = new Dictionary <string, string>(); query.Add(API_KEY_Key, ApiKey); if (!string.IsNullOrEmpty(language)) { query.Add(LANGUAGE_Key, language); } if (page > 0) { query.Add(PAGE_Key, page.Value.ToString()); } if (!string.IsNullOrEmpty(sortBy)) { query.Add(SORTBY_Key, sortBy); } query.Add(SESSION_ID_Key, sessionId); string requestUri = QueryHelpers.AddQueryString(baseUrl, query); GetFavoriteMoviesResult result = await GetResponse <GetFavoriteMoviesResult>(retryCount, delayMilliseconds, requestUri); return(result); }
// failure path public async Task WhenCalledWithInvalidSessionId_ReturnsUnauthorized401() { _settings.SessionId = "invalidSessionId"; GetFavoriteMoviesResult result = await _client.GetFavoriteMovies(_settings.SessionId, accountId : null, language : null, sortBy : null, page : null, retryCount : 0); _output.WriteLine($"Server returned {result.HttpStatusCode}"); Assert.True(result.HttpStatusCode == System.Net.HttpStatusCode.Unauthorized); }
// empty the favorite list if not yet empty public async Task InitializeAsync() { GetFavoriteMoviesResult getFavoriteList = await _client.GetFavoriteMovies(_settings.SessionId); SearchResult moviesOnFavoriteList = JsonConvert.DeserializeObject <SearchResult>(getFavoriteList.Json); foreach (var movie in moviesOnFavoriteList.MovieDetailModels) { await _client.UpdateFavoriteList(_settings.SessionId, "movie", false, movie.Id); } }
// happy path public async Task WhenCalledOnEmptyList_ReturnsEmptyCollection() { GetFavoriteMoviesResult result = await _client.GetFavoriteMovies(_settings.SessionId, accountId : null, language : null, sortBy : null, page : null, retryCount : 0); _output.WriteLine($"Server returned {result.HttpStatusCode}"); _output.WriteLine($"Json: {result.Json}"); var favoriteList = JsonConvert.DeserializeObject <SearchResult>(result.Json); PrintMovieList(favoriteList); Assert.True(favoriteList.MovieDetailModels.Count == 0); }
// happy path public async Task WhenCalledOnNonemptyList_GivesBackList() { await _client.UpdateFavoriteList(_settings.SessionId, "movie", true, _movie1); await _client.UpdateFavoriteList(_settings.SessionId, "movie", true, _movie2); GetFavoriteMoviesResult result = await _client.GetFavoriteMovies(_settings.SessionId, accountId : null, language : null, sortBy : null, page : null, retryCount : 0); _output.WriteLine($"Server returned {result.HttpStatusCode}"); _output.WriteLine($"Json: {result.Json}"); var favoriteList = JsonConvert.DeserializeObject <SearchResult>(result.Json); PrintMovieList(favoriteList); Assert.True(favoriteList.MovieDetailModels.Count > 0); Assert.Contains(favoriteList.MovieDetailModels, movie => movie.Id == _movie1); Assert.Contains(favoriteList.MovieDetailModels, movie => movie.Id == _movie2); }
// happy path public async Task WhenCalledWithSortOption_RespectsSortRequest() { await _client.UpdateFavoriteList(_settings.SessionId, "movie", true, _movie1); await _client.UpdateFavoriteList(_settings.SessionId, "movie", true, _movie2); GetFavoriteMoviesResult resultAsc = await _client.GetFavoriteMovies(_settings.SessionId, accountId : null, language : null, sortBy : "created_at.asc", page : null, retryCount : 0); var favoriteListAsc = JsonConvert.DeserializeObject <SearchResult>(resultAsc.Json); var movieIdsAsc = favoriteListAsc.MovieDetailModels.Select(movie => movie.Id); GetFavoriteMoviesResult resultDesc = await _client.GetFavoriteMovies(_settings.SessionId, accountId : null, language : null, sortBy : "created_at.desc", page : null, retryCount : 0); var favoriteListDesc = JsonConvert.DeserializeObject <SearchResult>(resultDesc.Json); var movieIdsDesc = favoriteListDesc.MovieDetailModels.Select(movie => movie.Id); PrintMovieList(favoriteListAsc); PrintMovieList(favoriteListDesc); Assert.True(movieIdsAsc.Reverse().SequenceEqual(movieIdsDesc)); }