diff --git a/Octokit.Reactive/Clients/IObservableStatisticsClient.cs b/Octokit.Reactive/Clients/IObservableStatisticsClient.cs
index 5bb9a8bc..798602c4 100644
--- a/Octokit.Reactive/Clients/IObservableStatisticsClient.cs
+++ b/Octokit.Reactive/Clients/IObservableStatisticsClient.cs
@@ -3,46 +3,77 @@ using System.Collections.Generic;
namespace Octokit.Reactive
{
+ ///
+ /// A client for GitHub's Repository Statistics API.
+ ///
+ ///
+ /// See the Repository Statistics API documentation for more information.
+ ///
public interface IObservableStatisticsClient
{
///
/// Returns a list of for the given repository
///
/// The owner of the repository
- /// The name of the repository
- /// A list of
- IObservable> GetContributors(string owner, string repositoryName);
+ /// The name of the repository
+ IObservable> GetContributors(string owner, string name);
+
+ ///
+ /// Returns a list of for the given repository
+ ///
+ /// The ID of the repository
+ IObservable> GetContributors(int repositoryId);
///
/// Returns the last year of commit activity grouped by week.
///
/// The owner of the repository
- /// The name of the repository
- /// The last year of
- IObservable GetCommitActivity(string owner, string repositoryName);
+ /// The name of the repository
+ IObservable GetCommitActivity(string owner, string name);
+
+ ///
+ /// Returns the last year of commit activity grouped by week.
+ ///
+ /// The ID of the repository
+ IObservable GetCommitActivity(int repositoryId);
///
/// Returns a weekly aggregate of the number of additions and deletions pushed to a repository.
///
/// The owner of the repository
- /// The name of the repository
- /// Returns a weekly aggregate of the number additions and deletion
- IObservable GetCodeFrequency(string owner, string repositoryName);
+ /// The name of the repository
+ IObservable GetCodeFrequency(string owner, string name);
+
+ ///
+ /// Returns a weekly aggregate of the number of additions and deletions pushed to a repository.
+ ///
+ /// The ID of the repository
+ IObservable GetCodeFrequency(int repositoryId);
///
/// Returns the total commit counts for the owner and total commit counts in total.
///
/// The owner of the repository
- /// The name of the repository
- /// Returns from oldest week to now
- IObservable GetParticipation(string owner, string repositoryName);
+ /// The name of the repository
+ IObservable GetParticipation(string owner, string name);
+
+ ///
+ /// Returns the total commit counts for the owner and total commit counts in total.
+ ///
+ /// The ID of the repository
+ IObservable GetParticipation(int repositoryId);
///
/// Returns a list of the number of commits per hour in each day
///
/// The owner of the repository
- /// The name of the repository
- /// Returns commit counts per hour in each day
- IObservable GetPunchCard(string owner, string repositoryName);
+ /// The name of the repository
+ IObservable GetPunchCard(string owner, string name);
+
+ ///
+ /// Returns a list of the number of commits per hour in each day
+ ///
+ /// The ID of the repository
+ IObservable GetPunchCard(int repositoryId);
}
}
\ No newline at end of file
diff --git a/Octokit.Reactive/Clients/ObservableStatisticsClient.cs b/Octokit.Reactive/Clients/ObservableStatisticsClient.cs
index 74acaa64..f67ecfbe 100644
--- a/Octokit.Reactive/Clients/ObservableStatisticsClient.cs
+++ b/Octokit.Reactive/Clients/ObservableStatisticsClient.cs
@@ -4,6 +4,12 @@ using System.Reactive.Threading.Tasks;
namespace Octokit.Reactive
{
+ ///
+ /// A client for GitHub's Repository Statistics API.
+ ///
+ ///
+ /// See the Repository Statistics API documentation for more information.
+ ///
public class ObservableStatisticsClient : IObservableStatisticsClient
{
readonly IGitHubClient _client;
@@ -11,6 +17,7 @@ namespace Octokit.Reactive
public ObservableStatisticsClient(IGitHubClient client)
{
Ensure.ArgumentNotNull(client, "client");
+
_client = client;
}
@@ -18,70 +25,110 @@ namespace Octokit.Reactive
/// Returns a list of for the given repository
///
/// The owner of the repository
- /// The name of the repository
- /// A list of
- public IObservable> GetContributors(string owner, string repositoryName)
+ /// The name of the repository
+ public IObservable> GetContributors(string owner, string name)
{
Ensure.ArgumentNotNullOrEmptyString(owner, "owner");
- Ensure.ArgumentNotNullOrEmptyString(repositoryName, "repositoryName");
+ Ensure.ArgumentNotNullOrEmptyString(name, "name");
- return _client.Repository.Statistics.GetContributors(owner, repositoryName).ToObservable();
+ return _client.Repository.Statistics.GetContributors(owner, name).ToObservable();
+ }
+
+ ///
+ /// Returns a list of for the given repository
+ ///
+ /// The ID of the repository
+ public IObservable> GetContributors(int repositoryId)
+ {
+ return _client.Repository.Statistics.GetContributors(repositoryId).ToObservable();
}
///
/// Returns the last year of commit activity grouped by week.
///
/// The owner of the repository
- /// The name of the repository
- /// The last year of
- public IObservable GetCommitActivity(string owner, string repositoryName)
+ /// The name of the repository
+ public IObservable GetCommitActivity(string owner, string name)
{
Ensure.ArgumentNotNullOrEmptyString(owner, "owner");
- Ensure.ArgumentNotNullOrEmptyString(repositoryName, "repositoryName");
+ Ensure.ArgumentNotNullOrEmptyString(name, "name");
- return _client.Repository.Statistics.GetCommitActivity(owner, repositoryName).ToObservable();
+ return _client.Repository.Statistics.GetCommitActivity(owner, name).ToObservable();
+ }
+
+ ///
+ /// Returns the last year of commit activity grouped by week.
+ ///
+ /// The ID of the repository
+ public IObservable GetCommitActivity(int repositoryId)
+ {
+ return _client.Repository.Statistics.GetCommitActivity(repositoryId).ToObservable();
}
///
/// Returns a weekly aggregate of the number of additions and deletions pushed to a repository.
///
/// The owner of the repository
- /// The name of the repository
- /// Returns a weekly aggregate of the number additions and deletion
- public IObservable GetCodeFrequency(string owner, string repositoryName)
+ /// The name of the repository
+ public IObservable GetCodeFrequency(string owner, string name)
{
Ensure.ArgumentNotNullOrEmptyString(owner, "owner");
- Ensure.ArgumentNotNullOrEmptyString(repositoryName, "repositoryName");
+ Ensure.ArgumentNotNullOrEmptyString(name, "name");
- return _client.Repository.Statistics.GetCodeFrequency(owner, repositoryName).ToObservable();
+ return _client.Repository.Statistics.GetCodeFrequency(owner, name).ToObservable();
+ }
+
+ ///
+ /// Returns a weekly aggregate of the number of additions and deletions pushed to a repository.
+ ///
+ /// The ID of the repository
+ public IObservable GetCodeFrequency(int repositoryId)
+ {
+ return _client.Repository.Statistics.GetCodeFrequency(repositoryId).ToObservable();
}
///
/// Returns the total commit counts for the owner and total commit counts in total.
///
/// The owner of the repository
- /// The name of the repository
- /// Returns from oldest week to now
- public IObservable GetParticipation(string owner, string repositoryName)
+ /// The name of the repository
+ public IObservable GetParticipation(string owner, string name)
{
Ensure.ArgumentNotNullOrEmptyString(owner, "owner");
- Ensure.ArgumentNotNullOrEmptyString(repositoryName, "repositoryName");
+ Ensure.ArgumentNotNullOrEmptyString(name, "name");
- return _client.Repository.Statistics.GetParticipation(owner, repositoryName).ToObservable();
+ return _client.Repository.Statistics.GetParticipation(owner, name).ToObservable();
+ }
+
+ ///
+ /// Returns the total commit counts for the owner and total commit counts in total.
+ ///
+ /// The ID of the repository
+ public IObservable GetParticipation(int repositoryId)
+ {
+ return _client.Repository.Statistics.GetParticipation(repositoryId).ToObservable();
}
///
/// Returns a list of the number of commits per hour in each day
///
/// The owner of the repository
- /// The name of the repository
- /// Returns commit counts per hour in each day
- public IObservable GetPunchCard(string owner, string repositoryName)
+ /// The name of the repository
+ public IObservable GetPunchCard(string owner, string name)
{
Ensure.ArgumentNotNullOrEmptyString(owner, "owner");
- Ensure.ArgumentNotNullOrEmptyString(repositoryName, "repositoryName");
+ Ensure.ArgumentNotNullOrEmptyString(name, "name");
- return _client.Repository.Statistics.GetPunchCard(owner, repositoryName).ToObservable();
+ return _client.Repository.Statistics.GetPunchCard(owner, name).ToObservable();
+ }
+
+ ///
+ /// Returns a list of the number of commits per hour in each day
+ ///
+ /// The ID of the repository
+ public IObservable GetPunchCard(int repositoryId)
+ {
+ return _client.Repository.Statistics.GetPunchCard(repositoryId).ToObservable();
}
}
-}
\ No newline at end of file
+}
diff --git a/Octokit.Tests.Integration/Clients/StatisticsClientTests.cs b/Octokit.Tests.Integration/Clients/StatisticsClientTests.cs
index 2c257917..7efca125 100644
--- a/Octokit.Tests.Integration/Clients/StatisticsClientTests.cs
+++ b/Octokit.Tests.Integration/Clients/StatisticsClientTests.cs
@@ -37,6 +37,27 @@ namespace Octokit.Tests.Integration.Clients
}
}
+ [IntegrationTest]
+ public async Task CanCreateAndRetrieveContributorsWithRepositoryId()
+ {
+ using (var context = await _client.CreateRepositoryContext("public-repo"))
+ {
+ var repository = new RepositorySummary(context);
+ await CommitToRepository(repository);
+ var contributors = await _client.Repository.Statistics.GetContributors(context.Repository.Id);
+
+ Assert.NotNull(contributors);
+ Assert.Equal(1, contributors.Count);
+
+ var soleContributor = contributors.First();
+ Assert.NotNull(soleContributor.Author);
+ Assert.True(soleContributor.Author.Login == repository.Owner);
+
+ Assert.Equal(1, soleContributor.Weeks.Count);
+ Assert.Equal(1, soleContributor.Total);
+ }
+ }
+
[IntegrationTest]
public async Task CanCreateAndRetrieveEmptyContributors()
{
@@ -51,6 +72,19 @@ namespace Octokit.Tests.Integration.Clients
}
}
+ [IntegrationTest]
+ public async Task CanCreateAndRetrieveEmptyContributorsWithRepositoryId()
+ {
+ var newRepository = new NewRepository(Helper.MakeNameWithTimestamp("public-repo")) { AutoInit = false };
+ using (var context = await _client.CreateRepositoryContext(newRepository))
+ {
+ var contributors = await _client.Repository.Statistics.GetContributors(context.Repository.Id);
+
+ Assert.NotNull(contributors);
+ Assert.Empty(contributors);
+ }
+ }
+
[IntegrationTest]
public async Task CanGetCommitActivityForTheLastYear()
{
@@ -58,6 +92,7 @@ namespace Octokit.Tests.Integration.Clients
{
var repository = new RepositorySummary(context);
await CommitToRepository(repository);
+
var commitActivities = await _client.Repository.Statistics.GetCommitActivity(repository.Owner, repository.Name);
Assert.NotNull(commitActivities);
Assert.Equal(52, commitActivities.Activity.Count);
@@ -68,6 +103,24 @@ namespace Octokit.Tests.Integration.Clients
}
}
+ [IntegrationTest]
+ public async Task CanGetCommitActivityForTheLastYearWithRepositoryId()
+ {
+ using (var context = await _client.CreateRepositoryContext("public-repo"))
+ {
+ var repository = new RepositorySummary(context);
+ await CommitToRepository(repository);
+
+ var commitActivities = await _client.Repository.Statistics.GetCommitActivity(context.Repository.Id);
+ Assert.NotNull(commitActivities);
+ Assert.Equal(52, commitActivities.Activity.Count);
+
+ var thisWeek = commitActivities.Activity.Last();
+ Assert.Equal(1, thisWeek.Total);
+ Assert.NotNull(thisWeek.Days);
+ }
+ }
+
[IntegrationTest]
public async Task CanGetAdditionsAndDeletionsPerWeek()
{
@@ -81,6 +134,20 @@ namespace Octokit.Tests.Integration.Clients
}
}
+ [IntegrationTest]
+ public async Task CanGetAdditionsAndDeletionsPerWeekWithRepositoryId()
+ {
+ using (var context = await _client.CreateRepositoryContext("public-repo"))
+ {
+ var repository = new RepositorySummary(context);
+ await CommitToRepository(repository);
+
+ var commitActivities = await _client.Repository.Statistics.GetCodeFrequency(context.Repository.Id);
+ Assert.NotNull(commitActivities);
+ Assert.True(commitActivities.AdditionsAndDeletionsByWeek.Any());
+ }
+ }
+
[IntegrationTest]
public async Task CanGetParticipationStatistics()
{
@@ -93,6 +160,18 @@ namespace Octokit.Tests.Integration.Clients
}
}
+ [IntegrationTest]
+ public async Task CanGetParticipationStatisticsWithRepositoryId()
+ {
+ using (var context = await _client.CreateRepositoryContext("public-repo"))
+ {
+ var repository = new RepositorySummary(context);
+ await CommitToRepository(repository);
+ var weeklyCommitCounts = await _client.Repository.Statistics.GetParticipation(context.Repository.Id);
+ Assert.Equal(52, weeklyCommitCounts.All.Count);
+ }
+ }
+
[IntegrationTest]
public async Task CanGetPunchCardForRepository()
{
@@ -106,6 +185,20 @@ namespace Octokit.Tests.Integration.Clients
}
}
+ [IntegrationTest]
+ public async Task CanGetPunchCardForRepositoryWithRepositoryId()
+ {
+ using (var context = await _client.CreateRepositoryContext("public-repo"))
+ {
+ var repository = new RepositorySummary(context);
+ await CommitToRepository(repository);
+
+ var punchCard = await _client.Repository.Statistics.GetPunchCard(context.Repository.Id);
+ Assert.NotNull(punchCard);
+ Assert.NotNull(punchCard.PunchPoints);
+ }
+ }
+
private async Task CommitToRepository(RepositorySummary repositorySummary)
{
var owner = repositorySummary.Owner;
diff --git a/Octokit.Tests/Clients/StatisticsClientTests.cs b/Octokit.Tests/Clients/StatisticsClientTests.cs
index 6b2b6ece..c117bd03 100644
--- a/Octokit.Tests/Clients/StatisticsClientTests.cs
+++ b/Octokit.Tests/Clients/StatisticsClientTests.cs
@@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
+using System.Threading;
using System.Threading.Tasks;
using NSubstitute;
using Octokit.Helpers;
@@ -22,32 +23,87 @@ namespace Octokit.Tests.Clients
public class TheGetContributorsMethod
{
[Fact]
- public async Task RetrievesContributorsForCorrectUrl()
+ public async Task RequestsCorrectUrl()
{
- var expectedEndPoint = new Uri("repos/username/repositoryName/stats/contributors", UriKind.Relative);
- var client = Substitute.For();
+ var expectedEndPoint = new Uri("repos/owner/name/stats/contributors", UriKind.Relative);
IReadOnlyList contributors = new ReadOnlyCollection(new[] { new Contributor() });
- client.GetQueuedOperation(expectedEndPoint, Args.CancellationToken)
- .Returns(Task.FromResult(contributors));
- var statisticsClient = new StatisticsClient(client);
- var result = await statisticsClient.GetContributors("username", "repositoryName");
+ var connection = Substitute.For();
+ connection.GetQueuedOperation(expectedEndPoint, Args.CancellationToken)
+ .Returns(Task.FromResult(contributors));
+
+ var client = new StatisticsClient(connection);
+
+ var result = await client.GetContributors("owner", "name");
Assert.Equal(1, result.Count);
}
[Fact]
- public async Task ThrowsIfGivenNullOwner()
+ public async Task RequestsCorrectUrlWithRepositoryId()
{
- var statisticsClient = new StatisticsClient(Substitute.For());
- await Assert.ThrowsAsync(() => statisticsClient.GetContributors(null, "repositoryName"));
+ var expectedEndPoint = new Uri("repositories/1/stats/contributors", UriKind.Relative);
+ IReadOnlyList contributors = new ReadOnlyCollection(new[] { new Contributor() });
+
+ var connection = Substitute.For();
+ connection.GetQueuedOperation(expectedEndPoint, Args.CancellationToken)
+ .Returns(Task.FromResult(contributors));
+
+ var client = new StatisticsClient(connection);
+
+ var result = await client.GetContributors(1);
+
+ Assert.Equal(1, result.Count);
}
[Fact]
- public async Task ThrowsIfGivenNullRepositoryName()
+ public async Task RequestsCorrectUrlWithCancellactionToken()
{
- var statisticsClient = new StatisticsClient(Substitute.For());
- await Assert.ThrowsAsync(() => statisticsClient.GetContributors("owner", null));
+ var expectedEndPoint = new Uri("repos/owner/name/stats/contributors", UriKind.Relative);
+ IReadOnlyList contributors = new ReadOnlyCollection(new[] { new Contributor() });
+ var cancellationToken = new CancellationToken(true);
+
+ var connection = Substitute.For();
+
+ connection.GetQueuedOperation(expectedEndPoint, cancellationToken)
+ .Returns(Task.FromResult(contributors));
+
+ var client = new StatisticsClient(connection);
+
+ var result = await client.GetContributors("owner", "name", cancellationToken);
+
+ Assert.Equal(1, result.Count);
+ }
+
+ [Fact]
+ public async Task RequestsCorrectUrlWithRepositoryIdWithCancellactionToken()
+ {
+ var expectedEndPoint = new Uri("repositories/1/stats/contributors", UriKind.Relative);
+ IReadOnlyList contributors = new ReadOnlyCollection(new[] { new Contributor() });
+ var cancellationToken = new CancellationToken(true);
+
+ var connection = Substitute.For();
+
+ connection.GetQueuedOperation(expectedEndPoint, cancellationToken)
+ .Returns(Task.FromResult(contributors));
+
+ var client = new StatisticsClient(connection);
+
+ var result = await client.GetContributors(1, cancellationToken);
+
+ Assert.Equal(1, result.Count);
+ }
+
+ [Fact]
+ public async Task EnsureNonNullArguments()
+ {
+ var client = new StatisticsClient(Substitute.For());
+
+ await Assert.ThrowsAsync(() => client.GetContributors(null, "name"));
+ await Assert.ThrowsAsync(() => client.GetContributors("owner", null));
+
+ await Assert.ThrowsAsync(() => client.GetContributors("", "name"));
+ await Assert.ThrowsAsync(() => client.GetContributors("owner", ""));
}
}
@@ -56,7 +112,7 @@ namespace Octokit.Tests.Clients
[Fact]
public async Task RequestsCorrectUrl()
{
- var expectedEndPoint = new Uri("repos/username/repositoryName/stats/commit_activity", UriKind.Relative);
+ var expectedEndPoint = new Uri("repos/owner/name/stats/commit_activity", UriKind.Relative);
var data = new WeeklyCommitActivity(new[] { 1, 2 }, 100, 42);
IReadOnlyList response = new ReadOnlyCollection(new[] { data });
@@ -65,7 +121,7 @@ namespace Octokit.Tests.Clients
.Returns(Task.FromResult(response));
var statisticsClient = new StatisticsClient(client);
- var result = await statisticsClient.GetCommitActivity("username", "repositoryName");
+ var result = await statisticsClient.GetCommitActivity("owner", "name");
Assert.Equal(2, result.Activity[0].Days.Count);
Assert.Equal(1, result.Activity[0].Days[0]);
@@ -75,17 +131,82 @@ namespace Octokit.Tests.Clients
}
[Fact]
- public async Task ThrowsIfGivenNullOwner()
+ public async Task RequestsCorrectUrlWithRepositoryId()
{
- var statisticsClient = new StatisticsClient(Substitute.For());
- await Assert.ThrowsAsync(() => statisticsClient.GetCommitActivity(null, "repositoryName"));
+ var expectedEndPoint = new Uri("repositories/1/stats/commit_activity", UriKind.Relative);
+
+ var data = new WeeklyCommitActivity(new[] { 1, 2 }, 100, 42);
+ IReadOnlyList response = new ReadOnlyCollection(new[] { data });
+ var client = Substitute.For();
+ client.GetQueuedOperation(expectedEndPoint, Args.CancellationToken)
+ .Returns(Task.FromResult(response));
+ var statisticsClient = new StatisticsClient(client);
+
+ var result = await statisticsClient.GetCommitActivity(1);
+
+ Assert.Equal(2, result.Activity[0].Days.Count);
+ Assert.Equal(1, result.Activity[0].Days[0]);
+ Assert.Equal(2, result.Activity[0].Days[1]);
+ Assert.Equal(100, result.Activity[0].Total);
+ Assert.Equal(42, result.Activity[0].Week);
}
[Fact]
- public async Task ThrowsIfGivenNullRepositoryName()
+ public async Task RequestsCorrectUrlWithCancellationToken()
{
- var statisticsClient = new StatisticsClient(Substitute.For());
- await Assert.ThrowsAsync(() => statisticsClient.GetCommitActivity("owner", null));
+ var expectedEndPoint = new Uri("repos/owner/name/stats/commit_activity", UriKind.Relative);
+ var cancellationToken = new CancellationToken();
+
+ var data = new WeeklyCommitActivity(new[] { 1, 2 }, 100, 42);
+ IReadOnlyList response = new ReadOnlyCollection(new[] { data });
+ var connection = Substitute.For();
+ connection.GetQueuedOperation(expectedEndPoint, cancellationToken)
+ .Returns(Task.FromResult(response));
+
+ var client = new StatisticsClient(connection);
+
+ var result = await client.GetCommitActivity("owner", "name", cancellationToken);
+
+ Assert.Equal(2, result.Activity[0].Days.Count);
+ Assert.Equal(1, result.Activity[0].Days[0]);
+ Assert.Equal(2, result.Activity[0].Days[1]);
+ Assert.Equal(100, result.Activity[0].Total);
+ Assert.Equal(42, result.Activity[0].Week);
+ }
+
+ [Fact]
+ public async Task RequestsCorrectUrlWithRepositoryIdWithCancellationToken()
+ {
+ var expectedEndPoint = new Uri("repositories/1/stats/commit_activity", UriKind.Relative);
+ var cancellationToken = new CancellationToken();
+
+ var data = new WeeklyCommitActivity(new[] { 1, 2 }, 100, 42);
+ IReadOnlyList response = new ReadOnlyCollection(new[] { data });
+ var connection = Substitute.For();
+ connection.GetQueuedOperation(expectedEndPoint, cancellationToken)
+ .Returns(Task.FromResult(response));
+
+ var client = new StatisticsClient(connection);
+
+ var result = await client.GetCommitActivity(1, cancellationToken);
+
+ Assert.Equal(2, result.Activity[0].Days.Count);
+ Assert.Equal(1, result.Activity[0].Days[0]);
+ Assert.Equal(2, result.Activity[0].Days[1]);
+ Assert.Equal(100, result.Activity[0].Total);
+ Assert.Equal(42, result.Activity[0].Week);
+ }
+
+ [Fact]
+ public async Task EnsureNonNullArguments()
+ {
+ var client = new StatisticsClient(Substitute.For());
+
+ await Assert.ThrowsAsync(() => client.GetCommitActivity(null, "name"));
+ await Assert.ThrowsAsync(() => client.GetCommitActivity("owner", null));
+
+ await Assert.ThrowsAsync(() => client.GetCommitActivity("", "name"));
+ await Assert.ThrowsAsync(() => client.GetCommitActivity("owner", ""));
}
}
@@ -94,7 +215,7 @@ namespace Octokit.Tests.Clients
[Fact]
public async Task RequestsCorrectUrl()
{
- var expectedEndPoint = new Uri("repos/username/repositoryName/stats/code_frequency", UriKind.Relative);
+ var expectedEndPoint = new Uri("repos/owner/name/stats/code_frequency", UriKind.Relative);
long firstTimestamp = 159670861;
long secondTimestamp = 0;
@@ -108,7 +229,7 @@ namespace Octokit.Tests.Clients
.Returns(Task.FromResult(data));
var statisticsClient = new StatisticsClient(client);
- var codeFrequency = await statisticsClient.GetCodeFrequency("username", "repositoryName");
+ var codeFrequency = await statisticsClient.GetCodeFrequency("owner", "name");
Assert.Equal(2, codeFrequency.AdditionsAndDeletionsByWeek.Count);
Assert.Equal(firstTimestamp.FromUnixTime(), codeFrequency.AdditionsAndDeletionsByWeek[0].Timestamp);
@@ -120,17 +241,103 @@ namespace Octokit.Tests.Clients
}
[Fact]
- public async Task ThrowsIfGivenNullOwner()
+ public async Task RequestsCorrectUrlWithRepositoryId()
{
- var statisticsClient = new StatisticsClient(Substitute.For());
- await Assert.ThrowsAsync(() => statisticsClient.GetCodeFrequency(null, "repositoryName"));
+ var expectedEndPoint = new Uri("repositories/1/stats/code_frequency", UriKind.Relative);
+
+ long firstTimestamp = 159670861;
+ long secondTimestamp = 0;
+ IReadOnlyList data = new ReadOnlyCollection(new[]
+ {
+ new[] { firstTimestamp, 10, 52 },
+ new[] { secondTimestamp, 0, 9 }
+ });
+ var client = Substitute.For();
+ client.GetQueuedOperation(expectedEndPoint, Args.CancellationToken)
+ .Returns(Task.FromResult(data));
+ var statisticsClient = new StatisticsClient(client);
+
+ var codeFrequency = await statisticsClient.GetCodeFrequency(1);
+
+ Assert.Equal(2, codeFrequency.AdditionsAndDeletionsByWeek.Count);
+ Assert.Equal(firstTimestamp.FromUnixTime(), codeFrequency.AdditionsAndDeletionsByWeek[0].Timestamp);
+ Assert.Equal(10, codeFrequency.AdditionsAndDeletionsByWeek[0].Additions);
+ Assert.Equal(52, codeFrequency.AdditionsAndDeletionsByWeek[0].Deletions);
+ Assert.Equal(secondTimestamp.FromUnixTime(), codeFrequency.AdditionsAndDeletionsByWeek[1].Timestamp);
+ Assert.Equal(0, codeFrequency.AdditionsAndDeletionsByWeek[1].Additions);
+ Assert.Equal(9, codeFrequency.AdditionsAndDeletionsByWeek[1].Deletions);
}
[Fact]
- public async Task ThrowsIfGivenNullRepositoryName()
+ public async Task RequestsCorrectUrlWithCancellationToken()
{
- var statisticsClient = new StatisticsClient(Substitute.For());
- await Assert.ThrowsAsync(() => statisticsClient.GetCodeFrequency("owner", null));
+ var expectedEndPoint = new Uri("repos/owner/name/stats/code_frequency", UriKind.Relative);
+
+ var cancellationToken = new CancellationToken();
+ long firstTimestamp = 159670861;
+ long secondTimestamp = 0;
+ IReadOnlyList data = new ReadOnlyCollection(new[]
+ {
+ new[] { firstTimestamp, 10, 52 },
+ new[] { secondTimestamp, 0, 9 }
+ });
+
+ var connection = Substitute.For();
+ connection.GetQueuedOperation(expectedEndPoint, cancellationToken)
+ .Returns(Task.FromResult(data));
+ var client = new StatisticsClient(connection);
+
+ var codeFrequency = await client.GetCodeFrequency("owner", "name", cancellationToken);
+
+ Assert.Equal(2, codeFrequency.AdditionsAndDeletionsByWeek.Count);
+ Assert.Equal(firstTimestamp.FromUnixTime(), codeFrequency.AdditionsAndDeletionsByWeek[0].Timestamp);
+ Assert.Equal(10, codeFrequency.AdditionsAndDeletionsByWeek[0].Additions);
+ Assert.Equal(52, codeFrequency.AdditionsAndDeletionsByWeek[0].Deletions);
+ Assert.Equal(secondTimestamp.FromUnixTime(), codeFrequency.AdditionsAndDeletionsByWeek[1].Timestamp);
+ Assert.Equal(0, codeFrequency.AdditionsAndDeletionsByWeek[1].Additions);
+ Assert.Equal(9, codeFrequency.AdditionsAndDeletionsByWeek[1].Deletions);
+ }
+
+ [Fact]
+ public async Task RequestsCorrectUrlWithRepositoryIdWithCancellationToken()
+ {
+ var expectedEndPoint = new Uri("repositories/1/stats/code_frequency", UriKind.Relative);
+
+ var cancellationToken = new CancellationToken();
+ long firstTimestamp = 159670861;
+ long secondTimestamp = 0;
+ IReadOnlyList data = new ReadOnlyCollection(new[]
+ {
+ new[] { firstTimestamp, 10, 52 },
+ new[] { secondTimestamp, 0, 9 }
+ });
+
+ var connection = Substitute.For();
+ connection.GetQueuedOperation(expectedEndPoint, cancellationToken)
+ .Returns(Task.FromResult(data));
+ var client = new StatisticsClient(connection);
+
+ var codeFrequency = await client.GetCodeFrequency(1, cancellationToken);
+
+ Assert.Equal(2, codeFrequency.AdditionsAndDeletionsByWeek.Count);
+ Assert.Equal(firstTimestamp.FromUnixTime(), codeFrequency.AdditionsAndDeletionsByWeek[0].Timestamp);
+ Assert.Equal(10, codeFrequency.AdditionsAndDeletionsByWeek[0].Additions);
+ Assert.Equal(52, codeFrequency.AdditionsAndDeletionsByWeek[0].Deletions);
+ Assert.Equal(secondTimestamp.FromUnixTime(), codeFrequency.AdditionsAndDeletionsByWeek[1].Timestamp);
+ Assert.Equal(0, codeFrequency.AdditionsAndDeletionsByWeek[1].Additions);
+ Assert.Equal(9, codeFrequency.AdditionsAndDeletionsByWeek[1].Deletions);
+ }
+
+ [Fact]
+ public async Task EnsureNonNullArguments()
+ {
+ var client = new StatisticsClient(Substitute.For());
+
+ await Assert.ThrowsAsync(() => client.GetCodeFrequency(null, "name"));
+ await Assert.ThrowsAsync(() => client.GetCodeFrequency("owner", null));
+
+ await Assert.ThrowsAsync(() => client.GetCodeFrequency("", "name"));
+ await Assert.ThrowsAsync(() => client.GetCodeFrequency("owner", ""));
}
}
@@ -139,37 +346,76 @@ namespace Octokit.Tests.Clients
[Fact]
public void RequestsCorrectUrl()
{
- var expectedEndPoint = new Uri("repos/username/repositoryName/stats/participation", UriKind.Relative);
+ var expectedEndPoint = new Uri("repos/owner/name/stats/participation", UriKind.Relative);
var client = Substitute.For();
var statisticsClient = new StatisticsClient(client);
- statisticsClient.GetParticipation("username", "repositoryName");
+ statisticsClient.GetParticipation("owner", "name");
client.Received().GetQueuedOperation(expectedEndPoint, Args.CancellationToken);
}
[Fact]
- public async Task ThrowsIfGivenNullOwner()
+ public void RequestsCorrectUrlWithRepositoryId()
{
- var statisticsClient = new StatisticsClient(Substitute.For());
- await Assert.ThrowsAsync(() => statisticsClient.GetParticipation(null, "repositoryName"));
+ var expectedEndPoint = new Uri("repositories/1/stats/participation", UriKind.Relative);
+
+ var client = Substitute.For();
+ var statisticsClient = new StatisticsClient(client);
+
+ statisticsClient.GetParticipation(1);
+
+ client.Received().GetQueuedOperation(expectedEndPoint, Args.CancellationToken);
}
[Fact]
- public async Task ThrowsIfGivenNullRepositoryName()
+ public void RequestsCorrectUrlWithCancellationToken()
{
- var statisticsClient = new StatisticsClient(Substitute.For());
- await Assert.ThrowsAsync(() => statisticsClient.GetParticipation("owner", null));
+ var expectedEndPoint = new Uri("repos/owner/name/stats/participation", UriKind.Relative);
+ var cancellationToken = new CancellationToken();
+
+ var client = Substitute.For();
+ var statisticsClient = new StatisticsClient(client);
+
+ statisticsClient.GetParticipation("owner", "name", cancellationToken);
+
+ client.Received().GetQueuedOperation(expectedEndPoint, cancellationToken);
+ }
+
+ [Fact]
+ public void RequestsCorrectUrlWithRepositoryIdWithCancellationToken()
+ {
+ var expectedEndPoint = new Uri("repositories/1/stats/participation", UriKind.Relative);
+ var cancellationToken = new CancellationToken();
+
+ var client = Substitute.For();
+ var statisticsClient = new StatisticsClient(client);
+
+ statisticsClient.GetParticipation(1, cancellationToken);
+
+ client.Received().GetQueuedOperation(expectedEndPoint, cancellationToken);
+ }
+
+ [Fact]
+ public async Task EnsureNonNullArguments()
+ {
+ var client = new StatisticsClient(Substitute.For());
+
+ await Assert.ThrowsAsync(() => client.GetParticipation(null, "name"));
+ await Assert.ThrowsAsync(() => client.GetParticipation("owner", null));
+
+ await Assert.ThrowsAsync(() => client.GetParticipation("", "name"));
+ await Assert.ThrowsAsync(() => client.GetParticipation("owner", ""));
}
}
public class TheGetHourlyCommitCountsMethod
{
[Fact]
- public async Task RetrievesPunchCard()
+ public async Task RequestsCorrectUrl()
{
- var expectedEndPoint = new Uri("repos/username/repositoryName/stats/punch_card", UriKind.Relative);
+ var expectedEndPoint = new Uri("repos/owner/name/stats/punch_card", UriKind.Relative);
var client = Substitute.For();
IReadOnlyList data = new ReadOnlyCollection(new[] { new[] { 2, 8, 42 } });
@@ -177,7 +423,7 @@ namespace Octokit.Tests.Clients
.Returns(Task.FromResult(data));
var statisticsClient = new StatisticsClient(client);
- var result = await statisticsClient.GetPunchCard("username", "repositoryName");
+ var result = await statisticsClient.GetPunchCard("owner", "name");
Assert.Equal(1, result.PunchPoints.Count);
Assert.Equal(DayOfWeek.Tuesday, result.PunchPoints[0].DayOfWeek);
@@ -186,17 +432,76 @@ namespace Octokit.Tests.Clients
}
[Fact]
- public async Task ThrowsIfGivenNullOwner()
+ public async Task RequestsCorrectUrlWithRepositoryId()
{
- var statisticsClient = new StatisticsClient(Substitute.For());
- await Assert.ThrowsAsync(() => statisticsClient.GetPunchCard(null, "repositoryName"));
+ var expectedEndPoint = new Uri("repositories/1/stats/punch_card", UriKind.Relative);
+
+ var client = Substitute.For();
+ IReadOnlyList data = new ReadOnlyCollection(new[] { new[] { 2, 8, 42 } });
+ client.GetQueuedOperation(expectedEndPoint, Args.CancellationToken)
+ .Returns(Task.FromResult(data));
+ var statisticsClient = new StatisticsClient(client);
+
+ var result = await statisticsClient.GetPunchCard(1);
+
+ Assert.Equal(1, result.PunchPoints.Count);
+ Assert.Equal(DayOfWeek.Tuesday, result.PunchPoints[0].DayOfWeek);
+ Assert.Equal(8, result.PunchPoints[0].HourOfTheDay);
+ Assert.Equal(42, result.PunchPoints[0].CommitCount);
}
[Fact]
- public async Task ThrowsIfGivenNullRepositoryName()
+ public async Task RequestsCorrectUrlWithCancellationToken()
{
- var statisticsClient = new StatisticsClient(Substitute.For());
- await Assert.ThrowsAsync(() => statisticsClient.GetPunchCard("owner", null));
+ var expectedEndPoint = new Uri("repos/owner/name/stats/punch_card", UriKind.Relative);
+ var cancellationToken = new CancellationToken();
+
+ var connection = Substitute.For();
+ IReadOnlyList data = new ReadOnlyCollection(new[] { new[] { 2, 8, 42 } });
+
+ connection.GetQueuedOperation(expectedEndPoint, cancellationToken)
+ .Returns(Task.FromResult(data));
+ var client = new StatisticsClient(connection);
+
+ var result = await client.GetPunchCard("owner", "name", cancellationToken);
+
+ Assert.Equal(1, result.PunchPoints.Count);
+ Assert.Equal(DayOfWeek.Tuesday, result.PunchPoints[0].DayOfWeek);
+ Assert.Equal(8, result.PunchPoints[0].HourOfTheDay);
+ Assert.Equal(42, result.PunchPoints[0].CommitCount);
+ }
+
+ [Fact]
+ public async Task RequestsCorrectUrlWithRepositoryIdWithCancellationToken()
+ {
+ var expectedEndPoint = new Uri("repositories/1/stats/punch_card", UriKind.Relative);
+ var cancellationToken = new CancellationToken();
+
+ var connection = Substitute.For();
+ IReadOnlyList data = new ReadOnlyCollection(new[] { new[] { 2, 8, 42 } });
+
+ connection.GetQueuedOperation(expectedEndPoint, cancellationToken)
+ .Returns(Task.FromResult(data));
+ var client = new StatisticsClient(connection);
+
+ var result = await client.GetPunchCard(1, cancellationToken);
+
+ Assert.Equal(1, result.PunchPoints.Count);
+ Assert.Equal(DayOfWeek.Tuesday, result.PunchPoints[0].DayOfWeek);
+ Assert.Equal(8, result.PunchPoints[0].HourOfTheDay);
+ Assert.Equal(42, result.PunchPoints[0].CommitCount);
+ }
+
+ [Fact]
+ public async Task EnsureNonNullArguments()
+ {
+ var client = new StatisticsClient(Substitute.For());
+
+ await Assert.ThrowsAsync(() => client.GetPunchCard(null, "name"));
+ await Assert.ThrowsAsync(() => client.GetPunchCard("owner", null));
+
+ await Assert.ThrowsAsync(() => client.GetPunchCard("", "name"));
+ await Assert.ThrowsAsync(() => client.GetPunchCard("owner", ""));
}
}
}
diff --git a/Octokit.Tests/Reactive/ObservableStatisticsClientTests.cs b/Octokit.Tests/Reactive/ObservableStatisticsClientTests.cs
index 25141dab..910ee1ee 100644
--- a/Octokit.Tests/Reactive/ObservableStatisticsClientTests.cs
+++ b/Octokit.Tests/Reactive/ObservableStatisticsClientTests.cs
@@ -1,6 +1,4 @@
using System;
-using System.Reactive.Threading.Tasks;
-using System.Threading.Tasks;
using NSubstitute;
using Octokit.Reactive;
using Xunit;
@@ -18,32 +16,189 @@ namespace Octokit.Tests.Reactive
}
}
- public class TheGetMethod
+ public class TheGetContributorsMethod
{
[Fact]
- public void GetsFromClientIssueMilestone()
+ public void RequestsCorrectUrl()
{
var gitHubClient = Substitute.For();
var statisticsClient = new ObservableStatisticsClient(gitHubClient);
- statisticsClient.GetContributors("username", "repositoryName");
+ statisticsClient.GetContributors("owner", "name");
- gitHubClient.Repository.Statistics.Received().GetContributors("username", "repositoryName");
+ gitHubClient.Repository.Statistics.Received().GetContributors("owner", "name");
}
[Fact]
- public async Task ThrowsIfGivenNullRepositoryName()
+ public void RequestsCorrectUrlWithRepositoryId()
{
- var statisticsClient = new ObservableStatisticsClient(Substitute.For());
- await Assert.ThrowsAsync(() => statisticsClient.GetContributors("owner", null).ToTask());
+ var gitHubClient = Substitute.For();
+ var statisticsClient = new ObservableStatisticsClient(gitHubClient);
+
+ statisticsClient.GetContributors(1);
+
+ gitHubClient.Repository.Statistics.Received().GetContributors(1);
}
[Fact]
- public async Task ThrowsIfGivenNullOwnerName()
+ public void EnsureNonNullArguments()
{
- var statisticsClient = new ObservableStatisticsClient(Substitute.For());
- await Assert.ThrowsAsync(() => statisticsClient.GetContributors(null, "repositoryName").ToTask());
+ var client = new ObservableStatisticsClient(Substitute.For());
+
+ Assert.Throws(() => client.GetContributors("owner", null));
+ Assert.Throws(() => client.GetContributors(null, "name"));
+
+ Assert.Throws(() => client.GetContributors("", "name"));
+ Assert.Throws(() => client.GetContributors("owner", ""));
+ }
+ }
+
+ public class TheGetCommitActivityMethod
+ {
+ [Fact]
+ public void RequestsCorrectUrl()
+ {
+ var gitHubClient = Substitute.For();
+ var statisticsClient = new ObservableStatisticsClient(gitHubClient);
+
+ statisticsClient.GetCommitActivity("owner", "name");
+
+ gitHubClient.Repository.Statistics.Received().GetCommitActivity("owner", "name");
+ }
+
+ [Fact]
+ public void RequestsCorrectUrlWithRepositoryId()
+ {
+ var gitHubClient = Substitute.For();
+ var statisticsClient = new ObservableStatisticsClient(gitHubClient);
+
+ statisticsClient.GetCommitActivity(1);
+
+ gitHubClient.Repository.Statistics.Received().GetCommitActivity(1);
+ }
+
+ [Fact]
+ public void EnsureNonNullArguments()
+ {
+ var client = new ObservableStatisticsClient(Substitute.For());
+
+ Assert.Throws(() => client.GetCommitActivity("owner", null));
+ Assert.Throws(() => client.GetCommitActivity(null, "name"));
+
+ Assert.Throws(() => client.GetCommitActivity("", "name"));
+ Assert.Throws(() => client.GetCommitActivity("owner", ""));
+ }
+ }
+
+ public class TheGetCodeFrequencyMethod
+ {
+ [Fact]
+ public void RequestsCorrectUrl()
+ {
+ var gitHubClient = Substitute.For();
+ var statisticsClient = new ObservableStatisticsClient(gitHubClient);
+
+ statisticsClient.GetCodeFrequency("owner", "name");
+
+ gitHubClient.Repository.Statistics.Received().GetCodeFrequency("owner", "name");
+ }
+
+ [Fact]
+ public void RequestsCorrectUrlWithRepositoryId()
+ {
+ var gitHubClient = Substitute.For();
+ var statisticsClient = new ObservableStatisticsClient(gitHubClient);
+
+ statisticsClient.GetCodeFrequency(1);
+
+ gitHubClient.Repository.Statistics.Received().GetCodeFrequency(1);
+ }
+
+ [Fact]
+ public void EnsureNonNullArguments()
+ {
+ var client = new ObservableStatisticsClient(Substitute.For());
+
+ Assert.Throws(() => client.GetCodeFrequency("owner", null));
+ Assert.Throws(() => client.GetCodeFrequency(null, "name"));
+
+ Assert.Throws(() => client.GetCodeFrequency("", "name"));
+ Assert.Throws(() => client.GetCodeFrequency("owner", ""));
+ }
+ }
+
+ public class TheGetParticipationMethod
+ {
+ [Fact]
+ public void RequestsCorrectUrl()
+ {
+ var gitHubClient = Substitute.For();
+ var statisticsClient = new ObservableStatisticsClient(gitHubClient);
+
+ statisticsClient.GetParticipation("owner", "name");
+
+ gitHubClient.Repository.Statistics.Received().GetParticipation("owner", "name");
+ }
+
+ [Fact]
+ public void RequestsCorrectUrlWithRepositoryId()
+ {
+ var gitHubClient = Substitute.For();
+ var statisticsClient = new ObservableStatisticsClient(gitHubClient);
+
+ statisticsClient.GetParticipation(1);
+
+ gitHubClient.Repository.Statistics.Received().GetParticipation(1);
+ }
+
+ [Fact]
+ public void EnsureNonNullArguments()
+ {
+ var client = new ObservableStatisticsClient(Substitute.For());
+
+ Assert.Throws(() => client.GetParticipation("owner", null));
+ Assert.Throws(() => client.GetParticipation(null, "name"));
+
+ Assert.Throws(() => client.GetParticipation("", "name"));
+ Assert.Throws(() => client.GetParticipation("owner", ""));
+ }
+ }
+
+ public class TheGetPunchCardMethod
+ {
+ [Fact]
+ public void RequestsCorrectUrl()
+ {
+ var gitHubClient = Substitute.For();
+ var statisticsClient = new ObservableStatisticsClient(gitHubClient);
+
+ statisticsClient.GetPunchCard("owner", "name");
+
+ gitHubClient.Repository.Statistics.Received().GetPunchCard("owner", "name");
+ }
+
+ [Fact]
+ public void RequestsCorrectUrlWithRepositoryId()
+ {
+ var gitHubClient = Substitute.For();
+ var statisticsClient = new ObservableStatisticsClient(gitHubClient);
+
+ statisticsClient.GetPunchCard(1);
+
+ gitHubClient.Repository.Statistics.Received().GetPunchCard(1);
+ }
+
+ [Fact]
+ public void EnsureNonNullArguments()
+ {
+ var client = new ObservableStatisticsClient(Substitute.For());
+
+ Assert.Throws(() => client.GetPunchCard("owner", null));
+ Assert.Throws(() => client.GetPunchCard(null, "name"));
+
+ Assert.Throws(() => client.GetPunchCard("", "name"));
+ Assert.Throws(() => client.GetPunchCard("owner", ""));
}
}
}
-}
\ No newline at end of file
+}
diff --git a/Octokit/Clients/IStatisticsClient.cs b/Octokit/Clients/IStatisticsClient.cs
index ff97aca9..6c7383cb 100644
--- a/Octokit/Clients/IStatisticsClient.cs
+++ b/Octokit/Clients/IStatisticsClient.cs
@@ -16,85 +16,140 @@ namespace Octokit
/// Returns a list of for the given repository
///
/// The owner of the repository
- /// The name of the repository
- /// A list of
- Task> GetContributors(string owner, string repositoryName);
+ /// The name of the repository
+ Task> GetContributors(string owner, string name);
+
+ ///
+ /// Returns a list of for the given repository
+ ///
+ /// The ID of the repository
+ Task> GetContributors(int repositoryId);
///
/// Returns a list of for the given repository
///
/// The owner of the repository
- /// The name of the repository
+ /// The name of the repository
/// A token used to cancel this potentially long running request
- /// A list of
- Task> GetContributors(string owner, string repositoryName, CancellationToken cancellationToken);
+ Task> GetContributors(string owner, string name, CancellationToken cancellationToken);
+
+ ///
+ /// Returns a list of for the given repository
+ ///
+ /// The ID of the repository
+ /// A token used to cancel this potentially long running request
+ Task> GetContributors(int repositoryId, CancellationToken cancellationToken);
///
/// Returns the last year of commit activity grouped by week.
///
/// The owner of the repository
- /// The name of the repository
- /// The last year of
- Task GetCommitActivity(string owner, string repositoryName);
+ /// The name of the repository
+ Task GetCommitActivity(string owner, string name);
+
+ ///
+ /// Returns the last year of commit activity grouped by week.
+ ///
+ /// The ID of the repository
+ Task GetCommitActivity(int repositoryId);
///
/// Returns the last year of commit activity grouped by week.
///
/// The owner of the repository
- /// The name of the repository
+ /// The name of the repository
/// A token used to cancel this potentially long running request
- /// The last year of
- Task GetCommitActivity(string owner, string repositoryName, CancellationToken cancellationToken);
+ Task GetCommitActivity(string owner, string name, CancellationToken cancellationToken);
+
+ ///
+ /// Returns the last year of commit activity grouped by week.
+ ///
+ /// The ID of the repository
+ /// A token used to cancel this potentially long running request
+ Task GetCommitActivity(int repositoryId, CancellationToken cancellationToken);
///
/// Returns a weekly aggregate of the number of additions and deletions pushed to a repository.
///
/// The owner of the repository
- /// The name of the repository
- /// Returns a weekly aggregate of the number additions and deletion
- Task GetCodeFrequency(string owner, string repositoryName);
+ /// The name of the repository
+ Task GetCodeFrequency(string owner, string name);
+
+ ///
+ /// Returns a weekly aggregate of the number of additions and deletions pushed to a repository.
+ ///
+ /// The ID of the repository
+ Task GetCodeFrequency(int repositoryId);
///
/// Returns a weekly aggregate of the number of additions and deletions pushed to a repository.
///
/// The owner of the repository
- /// The name of the repository
+ /// The name of the repository
/// A token used to cancel this potentially long running request
- /// Returns a weekly aggregate of the number additions and deletion
- Task GetCodeFrequency(string owner, string repositoryName, CancellationToken cancellationToken);
+ Task GetCodeFrequency(string owner, string name, CancellationToken cancellationToken);
+
+ ///
+ /// Returns a weekly aggregate of the number of additions and deletions pushed to a repository.
+ ///
+ /// The ID of the repository
+ /// A token used to cancel this potentially long running request
+ Task GetCodeFrequency(int repositoryId, CancellationToken cancellationToken);
///
/// Returns the total commit counts for the owner and total commit counts in total.
///
/// The owner of the repository
- /// The name of the repository
- /// Returns from oldest week to now
- Task GetParticipation(string owner, string repositoryName);
+ /// The name of the repository
+ Task GetParticipation(string owner, string name);
+
+ ///
+ /// Returns the total commit counts for the owner and total commit counts in total.
+ ///
+ /// The ID of the repository
+ Task GetParticipation(int repositoryId);
///
/// Returns the total commit counts for the owner and total commit counts in total.
///
/// The owner of the repository
- /// The name of the repository
+ /// The name of the repository
/// A token used to cancel this potentially long running request
- /// Returns from oldest week to now
- Task GetParticipation(string owner, string repositoryName, CancellationToken cancellationToken);
+ Task GetParticipation(string owner, string name, CancellationToken cancellationToken);
+
+ ///
+ /// Returns the total commit counts for the owner and total commit counts in total.
+ ///
+ /// The ID of the repository
+ /// A token used to cancel this potentially long running request
+ Task GetParticipation(int repositoryId, CancellationToken cancellationToken);
///
/// Returns a list of the number of commits per hour in each day
///
/// The owner of the repository
- /// The name of the repository
- /// Returns commit counts per hour in each day
- Task GetPunchCard(string owner, string repositoryName);
+ /// The name of the repository
+ Task GetPunchCard(string owner, string name);
+
+ ///
+ /// Returns a list of the number of commits per hour in each day
+ ///
+ /// The ID of the repository
+ Task GetPunchCard(int repositoryId);
///
/// Returns a list of the number of commits per hour in each day
///
/// The owner of the repository
- /// The name of the repository
+ /// The name of the repository
/// A token used to cancel this potentially long running request
- /// Returns commit counts per hour in each day
- Task GetPunchCard(string owner, string repositoryName, CancellationToken cancellationToken);
+ Task GetPunchCard(string owner, string name, CancellationToken cancellationToken);
+
+ ///
+ /// Returns a list of the number of commits per hour in each day
+ ///
+ /// The ID of the repository
+ /// A token used to cancel this potentially long running request
+ Task GetPunchCard(int repositoryId, CancellationToken cancellationToken);
}
}
\ No newline at end of file
diff --git a/Octokit/Clients/StatisticsClient.cs b/Octokit/Clients/StatisticsClient.cs
index e8bc929e..a5305122 100644
--- a/Octokit/Clients/StatisticsClient.cs
+++ b/Octokit/Clients/StatisticsClient.cs
@@ -25,53 +25,95 @@ namespace Octokit
/// Returns a list of for the given repository
///
/// The owner of the repository
- /// The name of the repository
- /// A list of
- public Task> GetContributors(string owner, string repositoryName)
+ /// The name of the repository
+ public Task> GetContributors(string owner, string name)
{
- return GetContributors(owner, repositoryName, CancellationToken.None);
+ Ensure.ArgumentNotNullOrEmptyString(owner, "owner");
+ Ensure.ArgumentNotNullOrEmptyString(name, "name");
+
+ return GetContributors(owner, name, CancellationToken.None);
+ }
+
+ ///
+ /// Returns a list of for the given repository
+ ///
+ /// The ID of the repository
+ public Task> GetContributors(int repositoryId)
+ {
+ return GetContributors(repositoryId, CancellationToken.None);
}
///
/// Returns a list of for the given repository
///
/// The owner of the repository
- /// The name of the repository
+ /// The name of the repository
/// A token used to cancel this potentially long running request
- /// A list of
- public Task> GetContributors(string owner, string repositoryName, CancellationToken cancellationToken)
+ public Task> GetContributors(string owner, string name, CancellationToken cancellationToken)
{
Ensure.ArgumentNotNullOrEmptyString(owner, "owner");
- Ensure.ArgumentNotNullOrEmptyString(repositoryName, "repositoryName");
+ Ensure.ArgumentNotNullOrEmptyString(name, "name");
- return ApiConnection.GetQueuedOperation(ApiUrls.StatsContributors(owner, repositoryName), cancellationToken);
+ return ApiConnection.GetQueuedOperation(ApiUrls.StatsContributors(owner, name), cancellationToken);
+ }
+
+ ///
+ /// Returns a list of for the given repository
+ ///
+ /// The ID of the repository
+ /// A token used to cancel this potentially long running request
+ public Task> GetContributors(int repositoryId, CancellationToken cancellationToken)
+ {
+ return ApiConnection.GetQueuedOperation(ApiUrls.StatsContributors(repositoryId), cancellationToken);
}
///
/// Returns the last year of commit activity grouped by week.
///
/// The owner of the repository
- /// The name of the repository
- /// The last year of
- public Task GetCommitActivity(string owner, string repositoryName)
+ /// The name of the repository
+ public Task GetCommitActivity(string owner, string name)
{
- return GetCommitActivity(owner, repositoryName, CancellationToken.None);
+ Ensure.ArgumentNotNullOrEmptyString(owner, "owner");
+ Ensure.ArgumentNotNullOrEmptyString(name, "name");
+
+ return GetCommitActivity(owner, name, CancellationToken.None);
+ }
+
+ ///
+ /// Returns the last year of commit activity grouped by week.
+ ///
+ /// The ID of the repository
+ public Task GetCommitActivity(int repositoryId)
+ {
+ return GetCommitActivity(repositoryId, CancellationToken.None);
}
///
/// Returns the last year of commit activity grouped by week.
///
/// The owner of the repository
- /// The name of the repository
+ /// The name of the repository
/// A token used to cancel this potentially long running request
- /// The last year of
- public async Task GetCommitActivity(string owner, string repositoryName, CancellationToken cancellationToken)
+ public async Task GetCommitActivity(string owner, string name, CancellationToken cancellationToken)
{
Ensure.ArgumentNotNullOrEmptyString(owner, "owner");
- Ensure.ArgumentNotNullOrEmptyString(repositoryName, "repositoryName");
+ Ensure.ArgumentNotNullOrEmptyString(name, "name");
var activity = await ApiConnection.GetQueuedOperation(
- ApiUrls.StatsCommitActivity(owner, repositoryName), cancellationToken).ConfigureAwait(false);
+ ApiUrls.StatsCommitActivity(owner, name), cancellationToken).ConfigureAwait(false);
+ return new CommitActivity(activity);
+ }
+
+ ///
+ /// Returns the last year of commit activity grouped by week.
+ ///
+ /// The ID of the repository
+ /// A token used to cancel this potentially long running request
+ public async Task GetCommitActivity(int repositoryId, CancellationToken cancellationToken)
+ {
+ var activity = await ApiConnection.GetQueuedOperation(
+ ApiUrls.StatsCommitActivity(repositoryId), cancellationToken).ConfigureAwait(false);
return new CommitActivity(activity);
}
@@ -79,27 +121,49 @@ namespace Octokit
/// Returns a weekly aggregate of the number of additions and deletions pushed to a repository.
///
/// The owner of the repository
- /// The name of the repository
- /// Returns a weekly aggregate of the number additions and deletion
- public Task GetCodeFrequency(string owner, string repositoryName)
+ /// The name of the repository
+ public Task GetCodeFrequency(string owner, string name)
{
- return GetCodeFrequency(owner, repositoryName, CancellationToken.None);
+ Ensure.ArgumentNotNullOrEmptyString(owner, "owner");
+ Ensure.ArgumentNotNullOrEmptyString(name, "name");
+
+ return GetCodeFrequency(owner, name, CancellationToken.None);
+ }
+
+ ///
+ /// Returns a weekly aggregate of the number of additions and deletions pushed to a repository.
+ ///
+ /// The ID of the repository
+ public Task GetCodeFrequency(int repositoryId)
+ {
+ return GetCodeFrequency(repositoryId, CancellationToken.None);
}
///
/// Returns a weekly aggregate of the number of additions and deletions pushed to a repository.
///
/// The owner of the repository
- /// The name of the repository
+ /// The name of the repository
/// A token used to cancel this potentially long running request
- /// Returns a weekly aggregate of the number additions and deletion
- public async Task GetCodeFrequency(string owner, string repositoryName, CancellationToken cancellationToken)
+ public async Task GetCodeFrequency(string owner, string name, CancellationToken cancellationToken)
{
Ensure.ArgumentNotNullOrEmptyString(owner, "owner");
- Ensure.ArgumentNotNullOrEmptyString(repositoryName, "repositoryName");
+ Ensure.ArgumentNotNullOrEmptyString(name, "name");
var rawFrequencies = await ApiConnection.GetQueuedOperation(
- ApiUrls.StatsCodeFrequency(owner, repositoryName), cancellationToken).ConfigureAwait(false);
+ ApiUrls.StatsCodeFrequency(owner, name), cancellationToken).ConfigureAwait(false);
+ return new CodeFrequency(rawFrequencies);
+ }
+
+ ///
+ /// Returns a weekly aggregate of the number of additions and deletions pushed to a repository.
+ ///
+ /// The ID of the repository
+ /// A token used to cancel this potentially long running request
+ public async Task GetCodeFrequency(int repositoryId, CancellationToken cancellationToken)
+ {
+ var rawFrequencies = await ApiConnection.GetQueuedOperation(
+ ApiUrls.StatsCodeFrequency(repositoryId), cancellationToken).ConfigureAwait(false);
return new CodeFrequency(rawFrequencies);
}
@@ -107,27 +171,49 @@ namespace Octokit
/// Returns the total commit counts for the owner and total commit counts in total.
///
/// The owner of the repository
- /// The name of the repository
- /// Returns from oldest week to now
- public Task GetParticipation(string owner, string repositoryName)
+ /// The name of the repository
+ public Task GetParticipation(string owner, string name)
{
- return GetParticipation(owner, repositoryName, CancellationToken.None);
+ Ensure.ArgumentNotNullOrEmptyString(owner, "owner");
+ Ensure.ArgumentNotNullOrEmptyString(name, "name");
+
+ return GetParticipation(owner, name, CancellationToken.None);
+ }
+
+ ///
+ /// Returns the total commit counts for the owner and total commit counts in total.
+ ///
+ /// The ID of the repository
+ public Task GetParticipation(int repositoryId)
+ {
+ return GetParticipation(repositoryId, CancellationToken.None);
}
///
/// Returns the total commit counts for the owner and total commit counts in total.
///
/// The owner of the repository
- /// The name of the repository
+ /// The name of the repository
/// A token used to cancel this potentially long running request
- /// Returns from oldest week to now
- public async Task GetParticipation(string owner, string repositoryName, CancellationToken cancellationToken)
+ public async Task GetParticipation(string owner, string name, CancellationToken cancellationToken)
{
Ensure.ArgumentNotNullOrEmptyString(owner, "owner");
- Ensure.ArgumentNotNullOrEmptyString(repositoryName, "repositoryName");
+ Ensure.ArgumentNotNullOrEmptyString(name, "name");
var result = await ApiConnection.GetQueuedOperation(
- ApiUrls.StatsParticipation(owner, repositoryName), cancellationToken).ConfigureAwait(false);
+ ApiUrls.StatsParticipation(owner, name), cancellationToken).ConfigureAwait(false);
+ return result.FirstOrDefault();
+ }
+
+ ///
+ /// Returns the total commit counts for the owner and total commit counts in total.
+ ///
+ /// The ID of the repository
+ /// A token used to cancel this potentially long running request
+ public async Task GetParticipation(int repositoryId, CancellationToken cancellationToken)
+ {
+ var result = await ApiConnection.GetQueuedOperation(
+ ApiUrls.StatsParticipation(repositoryId), cancellationToken).ConfigureAwait(false);
return result.FirstOrDefault();
}
@@ -135,27 +221,49 @@ namespace Octokit
/// Returns a list of the number of commits per hour in each day
///
/// The owner of the repository
- /// The name of the repository
- /// Returns commit counts per hour in each day
- public Task GetPunchCard(string owner, string repositoryName)
+ /// The name of the repository
+ public Task GetPunchCard(string owner, string name)
{
- return GetPunchCard(owner, repositoryName, CancellationToken.None);
+ Ensure.ArgumentNotNullOrEmptyString(owner, "owner");
+ Ensure.ArgumentNotNullOrEmptyString(name, "name");
+
+ return GetPunchCard(owner, name, CancellationToken.None);
+ }
+
+ ///
+ /// Returns a list of the number of commits per hour in each day
+ ///
+ /// The ID of the repository
+ public Task GetPunchCard(int repositoryId)
+ {
+ return GetPunchCard(repositoryId, CancellationToken.None);
}
///
/// Returns a list of the number of commits per hour in each day
///
/// The owner of the repository
- /// The name of the repository
+ /// The name of the repository
/// A token used to cancel this potentially long running request
- /// Returns commit counts per hour in each day
- public async Task GetPunchCard(string owner, string repositoryName, CancellationToken cancellationToken)
+ public async Task GetPunchCard(string owner, string name, CancellationToken cancellationToken)
{
Ensure.ArgumentNotNullOrEmptyString(owner, "owner");
- Ensure.ArgumentNotNullOrEmptyString(repositoryName, "repositoryName");
+ Ensure.ArgumentNotNullOrEmptyString(name, "name");
var punchCardData = await ApiConnection.GetQueuedOperation(
- ApiUrls.StatsPunchCard(owner, repositoryName), cancellationToken).ConfigureAwait(false);
+ ApiUrls.StatsPunchCard(owner, name), cancellationToken).ConfigureAwait(false);
+ return new PunchCard(punchCardData);
+ }
+
+ ///
+ /// Returns a list of the number of commits per hour in each day
+ ///
+ /// The ID of the repository
+ /// A token used to cancel this potentially long running request
+ public async Task GetPunchCard(int repositoryId, CancellationToken cancellationToken)
+ {
+ var punchCardData = await ApiConnection.GetQueuedOperation(
+ ApiUrls.StatsPunchCard(repositoryId), cancellationToken).ConfigureAwait(false);
return new PunchCard(punchCardData);
}
}