public async Task ShouldProduceSearchResults() { // Arrange var searchParams = new SeriesSearchParams { Name = "The Bad Batch" }; var authToken = await GetAuthTokenAsync(); var sut = CreateDownloader(); // Act var actual = await sut.GetSeriesSearchResultsAsync(searchParams, authToken, null); // Assert Assert.That(actual, Is.Not.Null); Assert.That(actual, Is.Not.Empty); TheTvDbSeriesSearchResult response = JsonConvert.DeserializeObject <TheTvDbSeriesSearchResult>(actual); Assert.That(response, Is.Not.Null); Assert.That(response.Data, Is.Not.Null); Assert.That(response.Data.Length, Is.GreaterThan(0)); Assert.That(response.Data[0], Is.Not.Null); Assert.That(response.Data[0].SeriesName, Is.Not.Null); Assert.That(response.Data[0].SeriesName, Is.Not.Empty); Assert.That(response.Data[0].SeriesName, Is.EqualTo("The Bad Batch")); Assert.That(response.Data[0].Id, Is.EqualTo((int)KnownTvShowIds.StarWarsTheBadBatch)); }
public virtual async Task <Series[]> SearchAsync(SeriesSearchParams searchParams, IWebProxy proxyPreferences) { string authToken = await _authenticator.GetAuthTokenAsync(proxyPreferences); string json = await _apiDownloader.GetSeriesSearchResultsAsync(searchParams, authToken, proxyPreferences); TheTvDbSeriesSearchResult searchResults = JsonConvert.DeserializeObject <TheTvDbSeriesSearchResult>(json); TheTvDbSeries[] data = searchResults.Data?.Take(MaxSearchResults).ToArray(); Dictionary <string, Task <string> > imagesTasks = data? .Select(x => x.Id) .ToDictionary( x => x.ToString(), x => _apiDownloader .GetSeriesImagesAsync( new SeriesIdentifier { Id = x.ToString() }, authToken, proxyPreferences)) ; if (imagesTasks != null) { await Task.WhenAll(imagesTasks.Values.ToArray()); } List <Series> seriesResults = data? .Select(x => Adapt( x, JsonConvert.DeserializeObject <TheTvDbSeriesImageResults>(imagesTasks[x.Id.ToString()]?.Result))) .ToList(); return(seriesResults?.ToArray() ?? new Series[0]); }