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));
        }
예제 #2
0
        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]);
        }