public async Task <NuGetPackageSearchResponse> SearchPackages(string searchTerm, string source)
        {
            if (string.IsNullOrEmpty(searchTerm))
            {
                throw new ArgumentNullException("searchTerm");
            }
            if (string.IsNullOrEmpty(source))
            {
                throw new ArgumentNullException("source");
            }

            NuGetFactory factory = new NuGetFactory(source);
            var          model   = new NuGetPackageSearchResponse
            {
                Request = new NuGetPackageSearchRequest
                {
                    SearchKeyword = searchTerm,
                    Source        = source,
                    SourceUrl     = factory.SourceUrl
                }
            };

            var searchResource = await factory.GetSearch();

            var packageMeta = await searchResource.Search(searchTerm, new SearchFilter { IncludePrerelease = true }, 0, 100, CancellationToken.None);

            var packagesFound = packageMeta.ToList();

            foreach (var searchInfo in packagesFound)
            {
                var result = new NuGetPackageSearchResult();
                result.Title         = searchInfo.Title;
                result.Summary       = searchInfo.Summary;
                result.DownloadCount = searchInfo.LatestPackageMetadata.DownloadCount;
                result.IconUri       = searchInfo.LatestPackageMetadata.IconUrl;
                result.PackageID     = searchInfo.Identity.Id;
                result.LatestVersion = searchInfo.LatestPackageMetadata.Identity.Version.ToNormalizedString();
                result.Authors       = searchInfo.LatestPackageMetadata.Authors;
                result.Tags          = searchInfo.LatestPackageMetadata.Tags;

                model.Results.Add(result);
            }

            return(model);
        }
        public async Task<NuGetPackageSearchResponse> SearchPackages(string searchTerm, string source)
        {
            if (string.IsNullOrEmpty(searchTerm))
                throw new ArgumentNullException("searchTerm");
            if (string.IsNullOrEmpty(source))
                throw new ArgumentNullException("source");

            NuGetFactory factory = new NuGetFactory(source);
            var model = new NuGetPackageSearchResponse
            {
                Request = new NuGetPackageSearchRequest
                {
                    SearchKeyword = searchTerm,
                    Source = source,
                    SourceUrl = factory.SourceUrl
                }
            };

            var searchResource = await factory.GetSearch();
            var packageMeta = await searchResource.Search(searchTerm, new SearchFilter { IncludePrerelease = true }, 0, 100, CancellationToken.None);
            var packagesFound = packageMeta.ToList();

            foreach (var searchInfo in packagesFound)
            {
                var result = new NuGetPackageSearchResult();
                result.Title = searchInfo.Title;
                result.Summary = searchInfo.Summary;
                result.DownloadCount = searchInfo.LatestPackageMetadata.DownloadCount;
                result.IconUri = searchInfo.LatestPackageMetadata.IconUrl;
                result.PackageID = searchInfo.Identity.Id;
                result.LatestVersion = searchInfo.LatestPackageMetadata.Identity.Version.ToNormalizedString();
                result.Authors = searchInfo.LatestPackageMetadata.Authors;
                result.Tags = searchInfo.LatestPackageMetadata.Tags;

                model.Results.Add(result);
            }

            return model;
        }
Example #3
0
        public async Task CanReadPackageInfo()
        {
            string nuGetOrgFeed = "https://api.nuget.org/v3/index.json";
            var    repository   = Repository.Factory.GetCoreV3(nuGetOrgFeed);
            ServiceIndexResourceV3            indexResource   = repository.GetResource <ServiceIndexResourceV3>();
            IReadOnlyList <ServiceIndexEntry> searchResources = indexResource.GetServiceEntries("SearchQueryService");
            string queryString = $"{searchResources[0].Uri}?q=Microsoft.DotNet.Common.ProjectTemplates.5.0&skip=0&take=10&prerelease=true&semVerLevel=2.0.0";
            Uri    queryUri    = new Uri(queryString);

            using (HttpClient client = new HttpClient())
                using (HttpResponseMessage response = await client.GetAsync(queryUri, CancellationToken.None).ConfigureAwait(false))
                {
                    if (response.IsSuccessStatusCode)
                    {
                        string responseText = await response.Content.ReadAsStringAsync(CancellationToken.None).ConfigureAwait(false);

                        NuGetPackageSearchResult resultsForPage = NuGetPackageSearchResult.FromJObject(JObject.Parse(responseText));
                        Assert.Equal(1, resultsForPage.TotalHits);
                        Assert.Equal(1, resultsForPage.Data.Count);

                        var packageInfo = resultsForPage.Data[0];

                        Assert.Equal("Microsoft.DotNet.Common.ProjectTemplates.5.0", packageInfo.Name);
                        Assert.NotEmpty(packageInfo.Version);
                        Assert.True(packageInfo.TotalDownloads > 0);
                        Assert.True(packageInfo.Verified);
                        Assert.Contains("Microsoft", packageInfo.Owners);
                        Assert.NotEmpty(packageInfo.Description);
                        Assert.NotEmpty(packageInfo.IconUrl);
                    }
                    else
                    {
                        Assert.True(false, "HTTP request failed.");
                    }
                }
        }