mirror of
https://github.com/zoriya/octokit.net.git
synced 2025-12-06 07:16:09 +00:00
Fix #2693 PageCount doesn't work if the query gets constructed with page number as the first query parameter (#2911)
Fix #2693 Co-authored-by: Keegan Campbell <me@kfcampbell.com>
This commit is contained in:
46
Octokit.Tests/Http/PaginationTests.cs
Normal file
46
Octokit.Tests/Http/PaginationTests.cs
Normal file
@@ -0,0 +1,46 @@
|
||||
using System;
|
||||
using Octokit.Models.Request.Enterprise;
|
||||
using Xunit;
|
||||
|
||||
namespace Octokit.Tests.Http
|
||||
{
|
||||
public class PaginationTests
|
||||
{
|
||||
public class TheShouldContinueMethod
|
||||
{
|
||||
[Fact]
|
||||
public void HandlesMissingUri()
|
||||
{
|
||||
var result = Pagination.ShouldContinue(null, null);
|
||||
Assert.False(result);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void HandlesIsDone()
|
||||
{
|
||||
var uri = new Uri("http://example.com");
|
||||
var options = new ApiOptionsExtended { IsDone = true };
|
||||
var result = Pagination.ShouldContinue(uri, options);
|
||||
Assert.False(result);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void HandlesPageCountPageFirstParam()
|
||||
{
|
||||
var uri = new Uri("http://example.com?page=2");
|
||||
var options = new ApiOptions { StartPage = 1, PageCount = 1 };
|
||||
var result = Pagination.ShouldContinue(uri, options);
|
||||
Assert.False(result);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void HandlesPageCountPageNotFirstParam()
|
||||
{
|
||||
var uri = new Uri("http://example.com?page_size=100&page=2");
|
||||
var options = new ApiOptions { StartPage = 1, PageCount = 1 };
|
||||
var result = Pagination.ShouldContinue(uri, options);
|
||||
Assert.False(result);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -41,8 +41,7 @@ namespace Octokit
|
||||
{
|
||||
var allValues = ToQueryStringDictionary(uri);
|
||||
|
||||
string pageValue;
|
||||
if (allValues.TryGetValue("page", out pageValue))
|
||||
if (allValues.TryGetValue("page", out var pageValue))
|
||||
{
|
||||
var startPage = options.StartPage ?? 1;
|
||||
var pageCount = options.PageCount.Value;
|
||||
@@ -61,8 +60,14 @@ namespace Octokit
|
||||
static Dictionary<string, string> ToQueryStringDictionary(Uri uri)
|
||||
{
|
||||
return uri.Query.Split('&')
|
||||
.Select(keyValue =>
|
||||
.Select((keyValue, i) =>
|
||||
{
|
||||
if (i == 0)
|
||||
{
|
||||
// Trim the leading '?' character from the first key-value pair
|
||||
keyValue = keyValue.Substring(1);
|
||||
}
|
||||
|
||||
var indexOf = keyValue.IndexOf('=');
|
||||
if (indexOf > 0)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user