Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

(#3502) Return the PageSize if specified #3547

Merged
merged 3 commits into from
Nov 5, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -601,7 +601,7 @@ public void ShouldOutputWarningAboutThresholdBeingReached()
{
MockLogger.Messages.Should()
.ContainKey(LogLevel.Warn.ToString())
.WhoseValue.Should().ContainSingle(m => m == "The threshold of 2 packages per source has been met. Please refine your search, or specify a page to find any more results.");
.WhoseValue.Should().ContainSingle(m => m == "The threshold of 2 packages, or package versions, per source has been met. Please refine your search, or specify a page number to retrieve more results.");
}

[Fact]
Expand Down
18 changes: 14 additions & 4 deletions src/chocolatey/infrastructure.app/nuget/NugetList.cs
Original file line number Diff line number Diff line change
Expand Up @@ -148,6 +148,19 @@ private async static Task<IQueryable<IPackageSearchMetadata>> SearchPackagesAsyn
{
var takeNumber = GetTakeAmount(configuration);

if (takeNumber != 30)
{
var warning = "The page size has been specified to be {0:N0} packages. There are known issues with some repositories when you use a page size other than 30.".FormatWith(takeNumber);
if (configuration.RegularOutput)
{
"chocolatey".Log().Warn(warning);
}
else
{
"chocolatey".Log().Debug(warning);
}
}

var partResults = new HashSet<IPackageSearchMetadata>(new ComparePackageSearchMetadataIdOnly());
var latestResults = new List<IPackageSearchMetadata>();

Expand Down Expand Up @@ -305,13 +318,10 @@ private async static Task<IQueryable<IPackageSearchMetadata>> SearchPackagesAsyn

private static int GetTakeAmount(ChocolateyConfiguration configuration)
{
// We calculate the amount of items we take at the same time, while making
// sure to take the minimum value of 30 packages which we know is a safe value
// to take from CCR and other feeds to minimize any issues that can happen.

if (configuration.ListCommand.Page.HasValue || configuration.ListCommand.ExplicitPageSize)
{
return Math.Min(configuration.ListCommand.PageSize, 30);
return configuration.ListCommand.PageSize;
}

return 30;
Expand Down
64 changes: 64 additions & 0 deletions tests/pester-tests/features/PageSize.Tests.ps1
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
Describe 'Ensuring <Command> honours page size settings' -ForEach @(
@{
Command = 'search'
}
) -Tag PageSize {
BeforeAll {
Initialize-ChocolateyTestInstall
}

Context 'Page size <ProvidedSize>' -ForEach @(
@{
ExpectedExitCode = 1
ProvidedSize = 0
}
@{
ExpectedExitCode = 1
ProvidedSize = 101
}
@{
ExpectedExitCode = 0
ProvidedSize = 1
}
@{
ExpectedExitCode = 0
ProvidedSize = 30
}
@{
ExpectedExitCode = 0
ProvidedSize = 40
}
@{
ExpectedExitCode = 0
ProvidedSize = 100
}
) {
BeforeAll {
$Output = Invoke-Choco $Command --page-size $ProvidedSize
}

It 'Exits correctly (<ExpectedExitCode>)' {
$Output.ExitCode | Should -Be $ExpectedExitCode -Because $Output.String
}

It 'Outputs expected messages' {
$ExpectedMessage = if ($ExpectedExitCode -eq 1) {
"The page size has been specified to be $ProvidedSize packages. The page size cannot be lower than 1 package, and no larger than 100 packages."
} else {
if ($ProvidedSize -ne 30) {
"The page size has been specified to be $ProvidedSize packages. There are known issues with some repositories when you use a page size other than 30."
}
# There are currently 43 test packages in the repository.
# Any number above this amount will not result in the below message.
if ($ProvidedSize -le 40) {
"The threshold of $ProvidedSize packages, or package versions, per source has been met. Please refine your search, or specify a page number to retrieve more results."
}
}
foreach ($message in $ExpectedMessage) {
# The output here may contain duplicated line for the warning about non-30 page size.
# We have been unable to reproduce this output in any scenario other than in these tests.
$Output.Lines | Should -Contain $message -Because $Output.String
}
}
}
}
Loading