mirror of
https://github.com/zoriya/octokit.net.git
synced 2026-06-08 12:42:32 +00:00
Merge pull request #171 from octokit/milestones-kill-your-rate-limit
ApplyParameters should respect existing querystring parameters
This commit is contained in:
@@ -36,7 +36,7 @@ namespace Octokit.Tests.Helpers
|
||||
Assert.Equal(new Uri("issues?foo=fooval&bar=barval", UriKind.Relative), uriWithParameters);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
[Fact(Skip="I don't believe this test is valid")]
|
||||
public void OverwritesExistingParameters()
|
||||
{
|
||||
var uri = new Uri("https://example.com?crap=crapola");
|
||||
@@ -62,6 +62,21 @@ namespace Octokit.Tests.Helpers
|
||||
Assert.Equal(uri, uriWithNullParameters);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void CombinesExistingParametersWithNewParameters()
|
||||
{
|
||||
var uri = new Uri("https://api.github.com/repositories/1/milestones?state=closed&sort=due_date&direction=asc&page=2");
|
||||
|
||||
var parameters = new Dictionary<string, string> { { "state", "open" }, { "sort", "other"} };
|
||||
|
||||
var actual = uri.ApplyParameters(parameters);
|
||||
|
||||
Assert.True(actual.Query.Contains("state=open"));
|
||||
Assert.True(actual.Query.Contains("sort=other"));
|
||||
Assert.True(actual.Query.Contains("direction=asc"));
|
||||
Assert.True(actual.Query.Contains("page=2"));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void EnsuresArgumentNotNull()
|
||||
{
|
||||
|
||||
@@ -12,6 +12,34 @@ namespace Octokit
|
||||
|
||||
if (parameters == null || !parameters.Any()) return uri;
|
||||
|
||||
string queryString;
|
||||
if (uri.IsAbsoluteUri)
|
||||
{
|
||||
queryString = uri.Query;
|
||||
}
|
||||
else
|
||||
{
|
||||
var hasQueryString = uri.OriginalString.IndexOf("?", StringComparison.Ordinal);
|
||||
queryString = hasQueryString == -1
|
||||
? ""
|
||||
: uri.OriginalString.Substring(hasQueryString);
|
||||
}
|
||||
|
||||
var values = queryString.Replace("?", "")
|
||||
.Split(new[] { '&' }, StringSplitOptions.RemoveEmptyEntries);
|
||||
|
||||
var existingParameters = values.ToDictionary(
|
||||
key => key.Substring(0, key.IndexOf('=')),
|
||||
value => value.Substring(value.IndexOf('=') + 1));
|
||||
|
||||
foreach (var existing in existingParameters)
|
||||
{
|
||||
if (!parameters.ContainsKey(existing.Key))
|
||||
{
|
||||
parameters.Add(existing);
|
||||
}
|
||||
}
|
||||
|
||||
string query = String.Join("&", parameters.Select(kvp => kvp.Key + "=" + kvp.Value));
|
||||
if (uri.IsAbsoluteUri)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user