Skip to content

Commit

Permalink
Enable per Version DownloadCount (#3433)
Browse files Browse the repository at this point in the history
  • Loading branch information
campersau committed Jun 19, 2020
1 parent 131853a commit eb4ed52
Show file tree
Hide file tree
Showing 2 changed files with 45 additions and 13 deletions.
26 changes: 13 additions & 13 deletions src/NuGet.Core/NuGet.Protocol/Resources/PackageSearchResourceV3.cs
Expand Up @@ -83,19 +83,19 @@ public override async Task<IEnumerable<IPackageSearchMetadata>> SearchAsync(stri

private static IEnumerable<VersionInfo> GetVersions(PackageSearchMetadata metadata, SearchFilter filter)
{
var versions = metadata.ParsedVersions;

// TODO: in v2, we only have download count for all versions, not per version.
// To be consistent, in v3, we also use total download count for now.
var totalDownloadCount = versions.Select(v => v.DownloadCount).Sum();
versions = versions
.Select(v => v.Version)
.Where(v => filter.IncludePrerelease || !v.IsPrerelease)
.Concat(new[] { metadata.Version })
.Distinct()
.Select(v => new VersionInfo(v, totalDownloadCount))
.ToArray();

var uniqueVersions = new HashSet<Versioning.NuGetVersion>();
var versions = new List<VersionInfo>();
foreach (var ver in metadata.ParsedVersions)
{
if ((filter.IncludePrerelease || !ver.Version.IsPrerelease) && uniqueVersions.Add(ver.Version))
{
versions.Add(new VersionInfo(ver.Version, ver.DownloadCount));
}
}
if (uniqueVersions.Add(metadata.Version))
{
versions.Add(new VersionInfo(metadata.Version, metadata.DownloadCount));
}
return versions;
}

Expand Down
Expand Up @@ -105,6 +105,38 @@ public async Task PackageSearchResourceV3_GetMetadataAsync_NotFound()
Assert.Empty(packages);
}

[Fact]
public async Task PackageSearchResourceV3_GetMetadataAsync_VersionsDownloadCount()
{
// Arrange
var responses = new Dictionary<string, string>();
responses.Add("https://api-v3search-0.nuget.org/query?q=entityframework&skip=0&take=1&prerelease=false&semVerLevel=2.0.0",
ProtocolUtility.GetResource("NuGet.Protocol.Tests.compiler.resources.EntityFrameworkSearch.json", GetType()));
responses.Add("http://testsource.com/v3/index.json", JsonData.IndexWithoutFlatContainer);

var repo = StaticHttpHandler.CreateSource("http://testsource.com/v3/index.json", Repository.Provider.GetCoreV3(), responses);

var resource = await repo.GetResourceAsync<PackageSearchResource>();

// Act
var packages = await resource.SearchAsync(
"entityframework",
new SearchFilter(false),
skip: 0,
take: 1,
log: NullLogger.Instance,
cancellationToken: CancellationToken.None);

var package = packages.SingleOrDefault();

var versions = await package.GetVersionsAsync();

// Assert
Assert.Equal(28390569, package.DownloadCount);
Assert.Equal(14, versions.Count());
Assert.Equal(64099, versions.First().DownloadCount);
}

[Fact]
public async Task PackageSearchResourceV3_SearchEncoding()
{
Expand Down

0 comments on commit eb4ed52

Please sign in to comment.