Skip to content

Commit 38c9ece

Browse files
IGitHubApiStatusService.IsAbuseRateLimit
1 parent bbbc7fd commit 38c9ece

3 files changed

Lines changed: 24 additions & 12 deletions

File tree

Src/GitHubApiStatus.UnitTests/Tests/Base/BaseTest.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ abstract class BaseTest
1515

1616
readonly static HttpClient _client = CreateGitHubHttpClient(new AuthenticationHeaderValue(GitHubConstants.AuthScheme, GitHubConstants.PersonalAccessToken), new ProductHeaderValue(nameof(GitHubApiStatus)));
1717

18-
protected GitHubApiStatusService GitHubApiStatusService { get; } = new GitHubApiStatusService(_client);
18+
protected IGitHubApiStatusService GitHubApiStatusService { get; } = new GitHubApiStatusService(_client);
1919

2020
[SetUp]
2121
protected virtual Task BeforeEachTest() => Task.CompletedTask;
@@ -36,9 +36,9 @@ protected static HttpResponseHeaders CreateHttpResponseHeaders(in int rateLimit,
3636
{
3737
Headers =
3838
{
39-
{ GitHubApiStatusService.RateLimitHeader, rateLimit.ToString() },
40-
{ GitHubApiStatusService.RateLimitResetHeader, GetTimeInUnixEpochSeconds(rateLimitResetTime).ToString() },
41-
{ GitHubApiStatusService.RateLimitRemainingHeader, remainingRequestCount.ToString() }
39+
{ GitHubApiStatus.GitHubApiStatusService.RateLimitHeader, rateLimit.ToString() },
40+
{ GitHubApiStatus.GitHubApiStatusService.RateLimitResetHeader, GetTimeInUnixEpochSeconds(rateLimitResetTime).ToString() },
41+
{ GitHubApiStatus.GitHubApiStatusService.RateLimitRemainingHeader, remainingRequestCount.ToString() }
4242
}
4343
};
4444

Src/GitHubApiStatus.UnitTests/Tests/GetApiRateLimitsTests_NoCancellationToken.cs

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,15 @@ public async Task GetApiRateLimits_ValidRestApiRequest()
1818
GitHubApiRateLimits gitHubApiRateLimits_Initial, gitHubApiRateLimits_Final;
1919

2020
var startTime = DateTimeOffset.UtcNow;
21+
var gitHubApiStatusService = (GitHubApiStatusService)GitHubApiStatusService;
2122

2223
//Act
23-
gitHubApiRateLimits_Initial = await GitHubApiStatusService.GetApiRateLimits().ConfigureAwait(false);
24+
gitHubApiRateLimits_Initial = await gitHubApiStatusService.GetApiRateLimits().ConfigureAwait(false);
2425
restApiStatus_Initial = gitHubApiRateLimits_Initial.RestApi;
2526

2627
await SendValidRestApiRequest().ConfigureAwait(false);
2728

28-
gitHubApiRateLimits_Final = await GitHubApiStatusService.GetApiRateLimits().ConfigureAwait(false);
29+
gitHubApiRateLimits_Final = await gitHubApiStatusService.GetApiRateLimits().ConfigureAwait(false);
2930
restApiStatus_Final = gitHubApiRateLimits_Final.RestApi;
3031

3132
//Assert
@@ -61,14 +62,15 @@ public async Task GetApiRateLimits_ValidGraphQLApiRequest()
6162
GitHubApiRateLimits gitHubApiRateLimits_Initial, gitHubApiRateLimits_Final;
6263

6364
var startTime = DateTimeOffset.UtcNow;
65+
var gitHubApiStatusService = (GitHubApiStatusService)GitHubApiStatusService;
6466

6567
//Act
66-
gitHubApiRateLimits_Initial = await GitHubApiStatusService.GetApiRateLimits().ConfigureAwait(false);
68+
gitHubApiRateLimits_Initial = await gitHubApiStatusService.GetApiRateLimits().ConfigureAwait(false);
6769
graphQLApiStatus_Initial = gitHubApiRateLimits_Initial.GraphQLApi;
6870

6971
await SendValidGraphQLApiRequest().ConfigureAwait(false);
7072

71-
gitHubApiRateLimits_Final = await GitHubApiStatusService.GetApiRateLimits().ConfigureAwait(false);
73+
gitHubApiRateLimits_Final = await gitHubApiStatusService.GetApiRateLimits().ConfigureAwait(false);
7274
graphQLApiStatus_Final = gitHubApiRateLimits_Final.GraphQLApi;
7375

7476
//Assert
@@ -103,14 +105,15 @@ public async Task GetApiRateLimits_ValidSearchApiRequest()
103105
GitHubApiRateLimits gitHubApiRateLimits_Initial, gitHubApiRateLimits_Final;
104106

105107
var startTime = DateTimeOffset.UtcNow;
108+
var gitHubApiStatusService = (GitHubApiStatusService)GitHubApiStatusService;
106109

107110
//Act
108-
gitHubApiRateLimits_Initial = await GitHubApiStatusService.GetApiRateLimits().ConfigureAwait(false);
111+
gitHubApiRateLimits_Initial = await gitHubApiStatusService.GetApiRateLimits().ConfigureAwait(false);
109112
searchApiStatus_Initial = gitHubApiRateLimits_Initial.SearchApi;
110113

111114
await SendValidSearchApiRequest().ConfigureAwait(false);
112115

113-
gitHubApiRateLimits_Final = await GitHubApiStatusService.GetApiRateLimits().ConfigureAwait(false);
116+
gitHubApiRateLimits_Final = await gitHubApiStatusService.GetApiRateLimits().ConfigureAwait(false);
114117
searchApiStatus_Final = gitHubApiRateLimits_Final.SearchApi;
115118

116119
//Assert
@@ -141,12 +144,13 @@ public async Task GetApiRateLimits_ValidSearchApiRequest()
141144
public void GetApiRateLimits_InvalidBearerToken()
142145
{
143146
//Arrange
144-
GitHubApiStatusService.SetAuthenticationHeaderValue(new AuthenticationHeaderValue(GitHubConstants.AuthScheme, "abc 123"));
147+
var gitHubApiStatusService = (GitHubApiStatusService)GitHubApiStatusService;
148+
gitHubApiStatusService.SetAuthenticationHeaderValue(new AuthenticationHeaderValue(GitHubConstants.AuthScheme, "abc 123"));
145149

146150
//Act
147151

148152
//Assert
149-
var httpRequestException = Assert.ThrowsAsync<HttpRequestException>(() => GitHubApiStatusService.GetApiRateLimits());
153+
var httpRequestException = Assert.ThrowsAsync<HttpRequestException>(() => gitHubApiStatusService.GetApiRateLimits());
150154
Assert.IsTrue(httpRequestException.Message.Contains("Unauthorized"));
151155
}
152156
}

Src/GitHubApiStatus/Interfaces/IGitHubApiStatusService.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,14 @@ public interface IGitHubApiStatusService
5353
/// <returns>Number of GitHub API Requests Remaining</returns>
5454
int GetRemainingRequestCount(in HttpResponseHeaders httpResponseHeaders);
5555

56+
/// <summary>
57+
/// Determines Whether GitHub's Abuse Rate Limit Has Been Reached
58+
/// </summary>
59+
/// <param name="httpResponseHeaders">HttpResponseHeaders from GitHub API Response</param>
60+
/// <param name="delta">Time Remaining in Retry-After Header</param>
61+
/// <returns></returns>
62+
bool IsAbuseRateLimit(in HttpResponseHeaders httpResponseHeaders, out TimeSpan? delta);
63+
5664
/// <summary>
5765
/// Determines Whether GitHub's Maximum API Limit Has Been Reached
5866
/// </summary>

0 commit comments

Comments
 (0)