diff --git a/Octokit.Reactive/Clients/IObservableRepositoryForksClient.cs b/Octokit.Reactive/Clients/IObservableRepositoryForksClient.cs
index bac871d5..ccc58d70 100644
--- a/Octokit.Reactive/Clients/IObservableRepositoryForksClient.cs
+++ b/Octokit.Reactive/Clients/IObservableRepositoryForksClient.cs
@@ -2,20 +2,72 @@
namespace Octokit.Reactive
{
+ ///
+ /// A client for GitHub's Repository Forks API.
+ ///
+ ///
+ /// See the Forks API documentation for more information.
+ ///
public interface IObservableRepositoryForksClient
{
///
/// Gets the list of forks defined for a repository
///
- /// See API documentation for more information.
- ///
- IObservable GetAll(string owner, string repositoryName, RepositoryForksListRequest request);
+ ///
+ /// See API documentation for more information.
+ ///
+ /// The owner of the repository
+ /// The name of the repository
+ /// A of s representing forks of specified repository.
+ IObservable GetAll(string owner, string name);
+
+ ///
+ /// Gets the list of forks defined for a repository
+ ///
+ ///
+ /// See API documentation for more information.
+ ///
+ /// The owner of the repository
+ /// The name of the repository
+ /// Options for changing the API response
+ /// A of s representing forks of specified repository.
+ IObservable GetAll(string owner, string name, ApiOptions options);
+
+ ///
+ /// Gets the list of forks defined for a repository
+ ///
+ ///
+ /// See API documentation for more information.
+ ///
+ /// The owner of the repository
+ /// The name of the repository
+ /// Used to request and filter a list of repository forks
+ /// A of s representing forks of specified repository.
+ IObservable GetAll(string owner, string name, RepositoryForksListRequest request);
+
+ ///
+ /// Gets the list of forks defined for a repository
+ ///
+ ///
+ /// See API documentation for more information.
+ ///
+ /// The owner of the repository
+ /// The name of the repository
+ /// Used to request and filter a list of repository forks
+ /// Options for changing the API response
+ /// A of s representing forks of specified repository.
+ IObservable GetAll(string owner, string name, RepositoryForksListRequest request, ApiOptions options);
///
/// Creates a fork for a repository. Specify organization in the fork parameter to create for an organization.
///
- /// See API documentation for more information.
- ///
- IObservable Create(string owner, string repositoryName, NewRepositoryFork fork);
+ ///
+ /// See API documentation for more information.
+ ///
+ /// The owner of the repository
+ /// The name of the repository
+ /// Used to fork a repository
+ /// A of representing the created fork of specified repository.
+ IObservable Create(string owner, string name, NewRepositoryFork fork);
}
}
diff --git a/Octokit.Reactive/Clients/ObservableRepositoryForksClient.cs b/Octokit.Reactive/Clients/ObservableRepositoryForksClient.cs
index 3238cd6c..25b0b325 100644
--- a/Octokit.Reactive/Clients/ObservableRepositoryForksClient.cs
+++ b/Octokit.Reactive/Clients/ObservableRepositoryForksClient.cs
@@ -4,6 +4,12 @@ using Octokit.Reactive.Internal;
namespace Octokit.Reactive
{
+ ///
+ /// A client for GitHub's Repository Forks API.
+ ///
+ ///
+ /// See the Forks API documentation for more information.
+ ///
public class ObservableRepositoryForksClient : IObservableRepositoryForksClient
{
readonly IRepositoryForksClient _client;
@@ -16,6 +22,7 @@ namespace Octokit.Reactive
public ObservableRepositoryForksClient(IGitHubClient client)
{
Ensure.ArgumentNotNull(client, "client");
+
_client = client.Repository.Forks;
_connection = client.Connection;
}
@@ -23,30 +30,95 @@ namespace Octokit.Reactive
///
/// Gets the list of forks defined for a repository
///
- /// See API documentation for more information.
- ///
- public IObservable GetAll(string owner, string repositoryName, RepositoryForksListRequest request)
+ ///
+ /// See API documentation for more information.
+ ///
+ /// The owner of the repository
+ /// The name of the repository
+ /// A of s representing forks of specified repository.
+ public IObservable GetAll(string owner, string name)
{
Ensure.ArgumentNotNullOrEmptyString(owner, "owner");
- Ensure.ArgumentNotNullOrEmptyString(repositoryName, "repositoryName");
+ Ensure.ArgumentNotNullOrEmptyString(name, "name");
- return request == null
- ? _connection.GetAndFlattenAllPages(ApiUrls.RepositoryForks(owner, repositoryName))
- : _connection.GetAndFlattenAllPages(ApiUrls.RepositoryForks(owner, repositoryName), request.ToParametersDictionary());
+ return GetAll(owner, name, ApiOptions.None);
+ }
+
+ ///
+ /// Gets the list of forks defined for a repository
+ ///
+ ///
+ /// See API documentation for more information.
+ ///
+ /// The owner of the repository
+ /// The name of the repository
+ /// Options for changing the API response
+ /// A of s representing forks of specified repository.
+ public IObservable GetAll(string owner, string name, ApiOptions options)
+ {
+ Ensure.ArgumentNotNullOrEmptyString(owner, "owner");
+ Ensure.ArgumentNotNullOrEmptyString(name, "name");
+ Ensure.ArgumentNotNull(options, "options");
+
+ return _connection.GetAndFlattenAllPages(ApiUrls.RepositoryForks(owner, name), options);
+ }
+
+ ///
+ /// Gets the list of forks defined for a repository
+ ///
+ ///
+ /// See API documentation for more information.
+ ///
+ /// The owner of the repository
+ /// The name of the repository
+ /// Used to request and filter a list of repository forks
+ /// A of s representing forks of specified repository.
+ public IObservable GetAll(string owner, string name, RepositoryForksListRequest request)
+ {
+ Ensure.ArgumentNotNullOrEmptyString(owner, "owner");
+ Ensure.ArgumentNotNullOrEmptyString(name, "name");
+
+ return GetAll(owner, name, request, ApiOptions.None);
+ }
+
+ ///
+ /// Gets the list of forks defined for a repository
+ ///
+ ///
+ /// See API documentation for more information.
+ ///
+ /// The owner of the repository
+ /// The name of the repository
+ /// Used to request and filter a list of repository forks
+ /// Options for changing the API response
+ /// A of s representing forks of specified repository.
+ public IObservable GetAll(string owner, string name, RepositoryForksListRequest request, ApiOptions options)
+ {
+ Ensure.ArgumentNotNullOrEmptyString(owner, "owner");
+ Ensure.ArgumentNotNullOrEmptyString(name, "name");
+ Ensure.ArgumentNotNull(options, "options");
+
+ return request == null ? _connection.GetAndFlattenAllPages(ApiUrls.RepositoryForks(owner, name), options) :
+ _connection.GetAndFlattenAllPages(ApiUrls.RepositoryForks(owner, name), request.ToParametersDictionary(), options);
}
///
/// Creates a fork for a repository. Specify organization in the fork parameter to create for an organization.
///
- /// See API documentation for more information.
- ///
- public IObservable Create(string owner, string repositoryName, NewRepositoryFork fork)
+ ///
+ /// See API documentation for more information.
+ ///
+ /// The owner of the repository
+ /// The name of the repository
+ /// Used to fork a repository
+ /// A of representing the created fork of specified repository.
+ public IObservable Create(string owner, string name, NewRepositoryFork fork)
{
Ensure.ArgumentNotNullOrEmptyString(owner, "owner");
- Ensure.ArgumentNotNullOrEmptyString(repositoryName, "repositoryName");
+ Ensure.ArgumentNotNullOrEmptyString(name, "name");
Ensure.ArgumentNotNull(fork, "fork");
- return _client.Create(owner, repositoryName, fork).ToObservable();
+ return _client.Create(owner, name, fork).ToObservable();
}
}
}
\ No newline at end of file
diff --git a/Octokit.Tests.Integration/Clients/RepositoryForksClientTests.cs b/Octokit.Tests.Integration/Clients/RepositoryForksClientTests.cs
index c1b64c6b..1898f397 100644
--- a/Octokit.Tests.Integration/Clients/RepositoryForksClientTests.cs
+++ b/Octokit.Tests.Integration/Clients/RepositoryForksClientTests.cs
@@ -13,13 +13,183 @@ namespace Octokit.Tests.Integration.Clients
{
var github = Helper.GetAuthenticatedClient();
- var forks = await github.Repository.Forks.GetAll("octokit", "octokit.net", null);
+ var forks = await github.Repository.Forks.GetAll("octokit", "octokit.net");
var masterFork = forks.FirstOrDefault(fork => fork.FullName == "TeamBinary/octokit.net");
Assert.NotNull(masterFork);
Assert.Equal("TeamBinary", masterFork.Owner.Login);
}
+ [IntegrationTest]
+ public async Task ReturnsCorrectCountOfForksWithoutStart()
+ {
+ var github = Helper.GetAuthenticatedClient();
+
+ var options = new ApiOptions
+ {
+ PageCount = 1,
+ PageSize = 1
+ };
+
+ var forks = await github.Repository.Forks.GetAll("octokit", "octokit.net", options);
+
+ Assert.Equal(1, forks.Count);
+ }
+
+ [IntegrationTest]
+ public async Task ReturnsCorrectCountOfForksWithStart()
+ {
+ var github = Helper.GetAuthenticatedClient();
+
+ var options = new ApiOptions
+ {
+ PageCount = 1,
+ PageSize = 1,
+ StartPage = 1
+ };
+
+ var forks = await github.Repository.Forks.GetAll("octokit", "octokit.net", options);
+
+ Assert.Equal(1, forks.Count);
+ }
+
+ [IntegrationTest]
+ public async Task ReturnsDistinctForksBasedOnStartPage()
+ {
+ var github = Helper.GetAuthenticatedClient();
+
+ var startOptions = new ApiOptions
+ {
+ PageCount = 1,
+ PageSize = 3,
+ StartPage = 1
+ };
+
+ var firstPage = await github.Repository.Forks.GetAll("octokit", "octokit.net", startOptions);
+
+ var skipStartOptions = new ApiOptions
+ {
+ PageCount = 1,
+ PageSize = 3,
+ StartPage = 2
+ };
+
+ var secondPage = await github.Repository.Forks.GetAll("octokit", "octokit.net", skipStartOptions);
+
+ Assert.Equal(3, firstPage.Count);
+ Assert.Equal(3, secondPage.Count);
+ Assert.NotEqual(firstPage[0].Id, secondPage[0].Id);
+ Assert.NotEqual(firstPage[1].Id, secondPage[1].Id);
+ Assert.NotEqual(firstPage[2].Id, secondPage[2].Id);
+ }
+
+ [IntegrationTest]
+ public async Task ReturnsCorrectCountOfForksWithoutStartParameterized()
+ {
+ var github = Helper.GetAuthenticatedClient();
+
+ var options = new ApiOptions
+ {
+ PageCount = 1,
+ PageSize = 1
+ };
+
+ var repositoryForksListRequest = new RepositoryForksListRequest { Sort = Sort.Newest };
+
+ var forks = await github.Repository.Forks.GetAll("octokit", "octokit.net", repositoryForksListRequest, options);
+
+ Assert.Equal(1, forks.Count);
+ }
+
+ [IntegrationTest]
+ public async Task ReturnsCorrectCountOfForksWithStartParameterized()
+ {
+ var github = Helper.GetAuthenticatedClient();
+
+ var options = new ApiOptions
+ {
+ PageCount = 1,
+ PageSize = 1,
+ StartPage = 1
+ };
+
+ var repositoryForksListRequest = new RepositoryForksListRequest { Sort = Sort.Newest };
+
+ var forks = await github.Repository.Forks.GetAll("octokit", "octokit.net", repositoryForksListRequest, options);
+
+ Assert.Equal(1, forks.Count);
+ }
+
+ [IntegrationTest]
+ public async Task ReturnsDistinctForksBasedOnStartPageParameterized()
+ {
+ var github = Helper.GetAuthenticatedClient();
+
+ var repositoryForksListRequest = new RepositoryForksListRequest { Sort = Sort.Newest };
+
+ var startOptions = new ApiOptions
+ {
+ PageCount = 1,
+ PageSize = 3,
+ StartPage = 1
+ };
+
+ var firstPage = await github.Repository.Forks.GetAll("octokit", "octokit.net", repositoryForksListRequest, startOptions);
+
+ var skipStartOptions = new ApiOptions
+ {
+ PageCount = 1,
+ PageSize = 3,
+ StartPage = 2
+ };
+
+ var secondPage = await github.Repository.Forks.GetAll("octokit", "octokit.net", repositoryForksListRequest, skipStartOptions);
+
+ Assert.Equal(3, firstPage.Count);
+ Assert.Equal(3, secondPage.Count);
+ Assert.NotEqual(firstPage[0].Id, secondPage[0].Id);
+ Assert.NotEqual(firstPage[1].Id, secondPage[1].Id);
+ Assert.NotEqual(firstPage[2].Id, secondPage[2].Id);
+ }
+
+ [IntegrationTest]
+ public async Task ReturnsForksForRepositorySortingTheResultWithOldestFirstWithApiOptions()
+ {
+ var github = Helper.GetAuthenticatedClient();
+
+ var repositoryForksListRequest = new RepositoryForksListRequest { Sort = Sort.Oldest };
+
+ var startOptions = new ApiOptions
+ {
+ PageCount = 1,
+ PageSize = 3,
+ StartPage = 1
+ };
+
+ var firstPage = await github.Repository.Forks.GetAll("octokit", "octokit.net", repositoryForksListRequest, startOptions);
+ var firstPageOrdered = firstPage.OrderBy(r => r.CreatedAt).ToList();
+
+ var skipStartOptions = new ApiOptions
+ {
+ PageCount = 1,
+ PageSize = 3,
+ StartPage = 1
+ };
+
+ var secondPage = await github.Repository.Forks.GetAll("octokit", "octokit.net", repositoryForksListRequest, skipStartOptions);
+ var secondPageOrdered = secondPage.OrderBy(r => r.CreatedAt).ToList();
+
+ for (var index = 0; index < firstPage.Count; index++)
+ {
+ Assert.Equal(firstPageOrdered[index].FullName, firstPage[index].FullName);
+ }
+
+ for (var index = 0; index < firstPage.Count; index++)
+ {
+ Assert.Equal(secondPageOrdered[index].FullName, secondPage[index].FullName);
+ }
+ }
+
[IntegrationTest]
public async Task ReturnsForksForRepositorySortingTheResultWithOldestFirst()
{
diff --git a/Octokit.Tests/Clients/RepositoryForksClientTests.cs b/Octokit.Tests/Clients/RepositoryForksClientTests.cs
index acc0f47a..32d8bccb 100644
--- a/Octokit.Tests/Clients/RepositoryForksClientTests.cs
+++ b/Octokit.Tests/Clients/RepositoryForksClientTests.cs
@@ -1,7 +1,7 @@
-using NSubstitute;
-using System;
+using System;
using System.Collections.Generic;
using System.Threading.Tasks;
+using NSubstitute;
using Xunit;
namespace Octokit.Tests.Clients
@@ -14,43 +14,98 @@ namespace Octokit.Tests.Clients
public void EnsuresNonNullArguments()
{
Assert.Throws(
- () => new RepositoryForksClient(null));
+ () => new RepositoryForksClient(null));
}
}
public class TheGetAllMethod
{
[Fact]
- public void RequestsCorrectUrl()
+ public async Task RequestsCorrectUrl()
{
var connection = Substitute.For();
- var client = new RepositoriesClient(connection);
+ var client = new RepositoryForksClient(connection);
- client.Forks.GetAll("fake", "repo", null);
+ await client.GetAll("fake", "repo");
- connection.Received().GetAll(Arg.Is(u => u.ToString() == "repos/fake/repo/forks"));
+ connection.Received().GetAll(Arg.Is(u => u.ToString() == "repos/fake/repo/forks"), Args.ApiOptions);
}
[Fact]
- public void RequestsCorrectUrlWithRequestParameters()
+ public async Task RequestsCorrectUrlWithApiOptions()
{
var connection = Substitute.For();
- var client = new RepositoriesClient(connection);
+ var client = new RepositoryForksClient(connection);
- client.Forks.GetAll("fake", "repo", new RepositoryForksListRequest { Sort = Sort.Stargazers });
+ var options = new ApiOptions
+ {
+ PageCount = 1,
+ StartPage = 1,
+ PageSize = 1
+ };
+
+ await client.GetAll("fake", "repo", options);
+
+ connection.Received().GetAll(Arg.Is(u => u.ToString() == "repos/fake/repo/forks"), options);
+ }
+
+ [Fact]
+ public async Task RequestsCorrectUrlWithRequestParameters()
+ {
+ var connection = Substitute.For();
+ var client = new RepositoryForksClient(connection);
+
+ await client.GetAll("fake", "repo", new RepositoryForksListRequest { Sort = Sort.Stargazers });
connection.Received().GetAll(
Arg.Is(u => u.ToString() == "repos/fake/repo/forks"),
- Arg.Is>(d => d["sort"] == "stargazers"));
+ Arg.Is>(d => d["sort"] == "stargazers"), Args.ApiOptions);
+ }
+
+ [Fact]
+ public async Task RequestsCorrectUrlWithRequestParametersWithApiOptions()
+ {
+ var connection = Substitute.For();
+ var client = new RepositoryForksClient(connection);
+
+ var options = new ApiOptions
+ {
+ PageCount = 1,
+ StartPage = 1,
+ PageSize = 1
+ };
+
+ await client.GetAll("fake", "repo", new RepositoryForksListRequest { Sort = Sort.Stargazers }, options);
+
+ connection.Received().GetAll(
+ Arg.Is(u => u.ToString() == "repos/fake/repo/forks"),
+ Arg.Is>(d => d["sort"] == "stargazers"), options);
}
[Fact]
public async Task EnsuresNonNullArguments()
{
- var client = new RepositoriesClient(Substitute.For());
+ var client = new RepositoryForksClient(Substitute.For());
- await Assert.ThrowsAsync(() => client.Forks.GetAll(null, "name", null));
- await Assert.ThrowsAsync(() => client.Forks.GetAll("owner", null, null));
+ await Assert.ThrowsAsync(() => client.GetAll(null, "name"));
+ await Assert.ThrowsAsync(() => client.GetAll("owner", null));
+ await Assert.ThrowsAsync(() => client.GetAll(null, "name", ApiOptions.None));
+ await Assert.ThrowsAsync(() => client.GetAll("owner", null, ApiOptions.None));
+ await Assert.ThrowsAsync(() => client.GetAll("owner", "name", (ApiOptions)null));
+ await Assert.ThrowsAsync(() => client.GetAll(null, "name", new RepositoryForksListRequest()));
+ await Assert.ThrowsAsync(() => client.GetAll("owner", null, new RepositoryForksListRequest()));
+ await Assert.ThrowsAsync(() => client.GetAll(null, "name", new RepositoryForksListRequest(), ApiOptions.None));
+ await Assert.ThrowsAsync(() => client.GetAll("owner", null, new RepositoryForksListRequest(), ApiOptions.None));
+ await Assert.ThrowsAsync(() => client.GetAll("owner", "name", new RepositoryForksListRequest(), null));
+
+ await Assert.ThrowsAsync(() => client.GetAll("", "name"));
+ await Assert.ThrowsAsync(() => client.GetAll("owner", ""));
+ await Assert.ThrowsAsync(() => client.GetAll("", "name", ApiOptions.None));
+ await Assert.ThrowsAsync(() => client.GetAll("owner", "", ApiOptions.None));
+ await Assert.ThrowsAsync(() => client.GetAll("", "name", new RepositoryForksListRequest()));
+ await Assert.ThrowsAsync(() => client.GetAll("owner", "", new RepositoryForksListRequest()));
+ await Assert.ThrowsAsync(() => client.GetAll("", "name", new RepositoryForksListRequest(), ApiOptions.None));
+ await Assert.ThrowsAsync(() => client.GetAll("owner", "", new RepositoryForksListRequest(), ApiOptions.None));
}
}
@@ -60,10 +115,11 @@ namespace Octokit.Tests.Clients
public void RequestsCorrectUrl()
{
var connection = Substitute.For();
- var client = new RepositoriesClient(connection);
+ var client = new RepositoryForksClient(connection);
+
var newRepositoryFork = new NewRepositoryFork();
- client.Forks.Create("fake", "repo", newRepositoryFork);
+ client.Create("fake", "repo", newRepositoryFork);
connection.Received().Post(Arg.Is(u => u.ToString() == "repos/fake/repo/forks"), newRepositoryFork);
}
@@ -71,24 +127,15 @@ namespace Octokit.Tests.Clients
[Fact]
public async Task EnsuresNonNullArguments()
{
- var client = new RepositoriesClient(Substitute.For());
+ var client = new RepositoryForksClient(Substitute.For());
- await Assert.ThrowsAsync(() => client.Forks.Create(null, "name", new NewRepositoryFork()));
- await Assert.ThrowsAsync(() => client.Forks.Create("owner", null, new NewRepositoryFork()));
- await Assert.ThrowsAsync(() => client.Forks.Create("owner", "name", null));
- }
+ await Assert.ThrowsAsync(() => client.Create(null, "name", new NewRepositoryFork()));
+ await Assert.ThrowsAsync(() => client.Create("owner", null, new NewRepositoryFork()));
+ await Assert.ThrowsAsync(() => client.Create("owner", "name", null));
- [Fact]
- public void UsesTheSuppliedHook()
- {
- var connection = Substitute.For();
- var client = new RepositoriesClient(connection);
- var newRepositoryFork = new NewRepositoryFork { Organization = "aName" };
-
- client.Forks.Create("owner", "repo", newRepositoryFork);
-
- connection.Received().Post(Arg.Any(), newRepositoryFork);
+ await Assert.ThrowsAsync(() => client.Create("", "name", new NewRepositoryFork()));
+ await Assert.ThrowsAsync(() => client.Create("owner", "", new NewRepositoryFork()));
}
}
}
-}
\ No newline at end of file
+}
diff --git a/Octokit.Tests/Octokit.Tests.csproj b/Octokit.Tests/Octokit.Tests.csproj
index ab7cfb98..9bc42615 100644
--- a/Octokit.Tests/Octokit.Tests.csproj
+++ b/Octokit.Tests/Octokit.Tests.csproj
@@ -229,6 +229,7 @@
+
diff --git a/Octokit.Tests/Reactive/ObservableRepositoryForksClientTests.cs b/Octokit.Tests/Reactive/ObservableRepositoryForksClientTests.cs
new file mode 100644
index 00000000..77acb660
--- /dev/null
+++ b/Octokit.Tests/Reactive/ObservableRepositoryForksClientTests.cs
@@ -0,0 +1,141 @@
+using System;
+using NSubstitute;
+using Octokit.Reactive;
+using Xunit;
+
+namespace Octokit.Tests.Reactive
+{
+ public class ObservableRepositoryForksClientTests
+ {
+ public class TheCtor
+ {
+ [Fact]
+ public void EnsuresNonNullArguments()
+ {
+ Assert.Throws(
+ () => new ObservableRepositoryForksClient(null));
+ }
+ }
+
+ public class TheGetAllMethod
+ {
+ [Fact]
+ public void RequestsCorrectUrl()
+ {
+ var gitHubClient = Substitute.For();
+ var client = new ObservableRepositoryForksClient(gitHubClient);
+
+ client.GetAll("fake", "repo");
+
+ gitHubClient.Received().Repository.Forks.GetAll("fake", "repo");
+ }
+
+ [Fact]
+ public void RequestsCorrectUrlWithApiOptions()
+ {
+ var gitHubClient = Substitute.For();
+ var client = new ObservableRepositoryForksClient(gitHubClient);
+
+ var options = new ApiOptions
+ {
+ PageCount = 1,
+ StartPage = 1,
+ PageSize = 1
+ };
+
+ client.GetAll("fake", "repo", options);
+
+ gitHubClient.Received().Repository.Forks.GetAll("fake", "repo", options);
+ }
+
+ [Fact]
+ public void RequestsCorrectUrlWithRequestParameters()
+ {
+ var gitHubClient = Substitute.For();
+ var client = new ObservableRepositoryForksClient(gitHubClient);
+
+ var repositoryForksListRequest = new RepositoryForksListRequest { Sort = Sort.Stargazers };
+
+ client.GetAll("fake", "repo", repositoryForksListRequest);
+
+ gitHubClient.Received().Repository.Forks.GetAll(
+ "fake", "repo", repositoryForksListRequest);
+ }
+
+ [Fact]
+ public void RequestsCorrectUrlWithRequestParametersWithApiOptions()
+ {
+ var gitHubClient = Substitute.For();
+ var client = new ObservableRepositoryForksClient(gitHubClient);
+
+ var options = new ApiOptions
+ {
+ PageCount = 1,
+ StartPage = 1,
+ PageSize = 1
+ };
+
+ var repositoryForksListRequest = new RepositoryForksListRequest { Sort = Sort.Stargazers };
+
+ client.GetAll("fake", "repo", repositoryForksListRequest, options);
+
+ gitHubClient.Received().Repository.Forks.GetAll("fake", "name", repositoryForksListRequest, options);
+ }
+
+ [Fact]
+ public void EnsuresNonNullArguments()
+ {
+ var client = new ObservableRepositoryForksClient(Substitute.For());
+
+ Assert.Throws(() => client.GetAll(null, "name"));
+ Assert.Throws(() => client.GetAll("owner", null));
+ Assert.Throws(() => client.GetAll(null, "name", ApiOptions.None));
+ Assert.Throws(() => client.GetAll("owner", null, ApiOptions.None));
+ Assert.Throws(() => client.GetAll("owner", "name", (ApiOptions)null));
+ Assert.Throws(() => client.GetAll(null, "name", new RepositoryForksListRequest()));
+ Assert.Throws(() => client.GetAll("owner", null, new RepositoryForksListRequest()));
+ Assert.Throws(() => client.GetAll(null, "name", new RepositoryForksListRequest(), ApiOptions.None));
+ Assert.Throws(() => client.GetAll("owner", null, new RepositoryForksListRequest(), ApiOptions.None));
+ Assert.Throws(() => client.GetAll("owner", "name", new RepositoryForksListRequest(), null));
+
+ Assert.Throws(() => client.GetAll("", "name"));
+ Assert.Throws(() => client.GetAll("owner", ""));
+ Assert.Throws(() => client.GetAll("", "name", ApiOptions.None));
+ Assert.Throws(() => client.GetAll("owner", "", ApiOptions.None));
+ Assert.Throws(() => client.GetAll("", "name", new RepositoryForksListRequest()));
+ Assert.Throws(() => client.GetAll("owner", "", new RepositoryForksListRequest()));
+ Assert.Throws(() => client.GetAll("", "name", new RepositoryForksListRequest(), ApiOptions.None));
+ Assert.Throws(() => client.GetAll("owner", "", new RepositoryForksListRequest(), ApiOptions.None));
+ }
+ }
+
+ public class TheCreateMethod
+ {
+ [Fact]
+ public void RequestsCorrectUrl()
+ {
+ var gitHubClient = Substitute.For();
+ var client = new ObservableRepositoryForksClient(gitHubClient);
+
+ var newRepositoryFork = new NewRepositoryFork();
+
+ client.Create("fake", "repo", newRepositoryFork);
+
+ gitHubClient.Received().Repository.Forks.Create("fake", "repo", newRepositoryFork);
+ }
+
+ [Fact]
+ public void EnsuresNonNullArguments()
+ {
+ var client = new ObservableRepositoryForksClient(Substitute.For());
+
+ Assert.Throws(() => client.Create(null, "name", new NewRepositoryFork()));
+ Assert.Throws(() => client.Create("owner", null, new NewRepositoryFork()));
+ Assert.Throws(() => client.Create("owner", "name", null));
+
+ Assert.Throws(() => client.Create("", "name", new NewRepositoryFork()));
+ Assert.Throws(() => client.Create("owner", "", new NewRepositoryFork()));
+ }
+ }
+ }
+}
diff --git a/Octokit/Clients/IRepositoryForksClient.cs b/Octokit/Clients/IRepositoryForksClient.cs
index 8d026244..742b38d0 100644
--- a/Octokit/Clients/IRepositoryForksClient.cs
+++ b/Octokit/Clients/IRepositoryForksClient.cs
@@ -3,20 +3,72 @@ using System.Threading.Tasks;
namespace Octokit
{
+ ///
+ /// A client for GitHub's Repository Forks API.
+ ///
+ ///
+ /// See the Forks API documentation for more information.
+ ///
public interface IRepositoryForksClient
{
///
/// Gets the list of forks defined for a repository
///
- /// See API documentation for more information.
- ///
- Task> GetAll(string owner, string repositoryName, RepositoryForksListRequest request);
+ ///
+ /// See API documentation for more information.
+ ///
+ /// The owner of the repository
+ /// The name of the repository
+ /// A of s representing forks of specified repository.
+ Task> GetAll(string owner, string name);
+
+ ///
+ /// Gets the list of forks defined for a repository
+ ///
+ ///
+ /// See API documentation for more information.
+ ///
+ /// The owner of the repository
+ /// The name of the repository
+ /// Options for changing the API response
+ /// A of s representing forks of specified repository.
+ Task> GetAll(string owner, string name, ApiOptions options);
+
+ ///
+ /// Gets the list of forks defined for a repository
+ ///
+ ///
+ /// See API documentation for more information.
+ ///
+ /// The owner of the repository
+ /// The name of the repository
+ /// Used to request and filter a list of repository forks
+ /// A of s representing forks of specified repository.
+ Task> GetAll(string owner, string name, RepositoryForksListRequest request);
+
+ ///
+ /// Gets the list of forks defined for a repository
+ ///
+ ///
+ /// See API documentation for more information.
+ ///
+ /// The owner of the repository
+ /// The name of the repository
+ /// Used to request and filter a list of repository forks
+ /// Options for changing the API response
+ /// A of s representing forks of specified repository.
+ Task> GetAll(string owner, string name, RepositoryForksListRequest request, ApiOptions options);
///
/// Creates a fork for a repository. Specify organization in the fork parameter to create for an organization.
///
- /// See API documentation for more information.
- ///
- Task Create(string owner, string repositoryName, NewRepositoryFork fork);
+ ///
+ /// See API documentation for more information.
+ ///
+ /// The owner of the repository
+ /// The name of the repository
+ /// Used to fork a repository
+ /// A representing the created fork of specified repository.
+ Task Create(string owner, string name, NewRepositoryFork fork);
}
}
diff --git a/Octokit/Clients/RepositoryForksClient.cs b/Octokit/Clients/RepositoryForksClient.cs
index c45a634b..0915cde3 100644
--- a/Octokit/Clients/RepositoryForksClient.cs
+++ b/Octokit/Clients/RepositoryForksClient.cs
@@ -3,6 +3,12 @@ using System.Threading.Tasks;
namespace Octokit
{
+ ///
+ /// A client for GitHub's Repository Forks API.
+ ///
+ ///
+ /// See the Forks API documentation for more information.
+ ///
public class RepositoryForksClient : ApiClient, IRepositoryForksClient
{
///
@@ -17,30 +23,96 @@ namespace Octokit
///
/// Gets the list of forks defined for a repository
///
- /// See API documentation for more information.
- ///
- public Task> GetAll(string owner, string repositoryName, RepositoryForksListRequest request)
+ ///
+ /// See API documentation for more information.
+ ///
+ /// The owner of the repository
+ /// The name of the repository
+ /// A of s representing forks of specified repository.
+ public Task> GetAll(string owner, string name)
{
Ensure.ArgumentNotNullOrEmptyString(owner, "owner");
- Ensure.ArgumentNotNullOrEmptyString(repositoryName, "repositoryName");
+ Ensure.ArgumentNotNullOrEmptyString(name, "name");
+
+ return GetAll(owner, name, ApiOptions.None);
+ }
+
+ ///
+ /// Gets the list of forks defined for a repository
+ ///
+ ///
+ /// See API documentation for more information.
+ ///
+ /// The owner of the repository
+ /// The name of the repository
+ /// Options for changing the API response
+ /// A of s representing forks of specified repository.
+ public Task> GetAll(string owner, string name, ApiOptions options)
+ {
+ Ensure.ArgumentNotNullOrEmptyString(owner, "owner");
+ Ensure.ArgumentNotNullOrEmptyString(name, "name");
+ Ensure.ArgumentNotNull(options, "options");
+
+ return ApiConnection.GetAll(ApiUrls.RepositoryForks(owner, name), options);
+ }
+
+ ///
+ /// Gets the list of forks defined for a repository
+ ///
+ ///
+ /// See API documentation for more information.
+ ///
+ /// The owner of the repository
+ /// The name of the repository
+ /// Used to request and filter a list of repository forks
+ /// A of s representing forks of specified repository.
+ public Task> GetAll(string owner, string name, RepositoryForksListRequest request)
+ {
+ Ensure.ArgumentNotNullOrEmptyString(owner, "owner");
+ Ensure.ArgumentNotNullOrEmptyString(name, "name");
+
+ return GetAll(owner, name, request, ApiOptions.None);
+ }
+
+ ///
+ /// Gets the list of forks defined for a repository
+ ///
+ ///
+ /// See API documentation for more information.
+ ///
+ /// The owner of the repository
+ /// The name of the repository
+ /// Used to request and filter a list of repository forks
+ /// Options for changing the API response
+ /// A of s representing forks of specified repository.
+ public Task> GetAll(string owner, string name, RepositoryForksListRequest request, ApiOptions options)
+ {
+ Ensure.ArgumentNotNullOrEmptyString(owner, "owner");
+ Ensure.ArgumentNotNullOrEmptyString(name, "name");
+ Ensure.ArgumentNotNull(options, "options");
return request == null
- ? ApiConnection.GetAll(ApiUrls.RepositoryForks(owner, repositoryName))
- : ApiConnection.GetAll(ApiUrls.RepositoryForks(owner, repositoryName), request.ToParametersDictionary());
+ ? ApiConnection.GetAll(ApiUrls.RepositoryForks(owner, name), options) :
+ ApiConnection.GetAll(ApiUrls.RepositoryForks(owner, name), request.ToParametersDictionary(), options);
}
///
/// Creates a fork for a repository. Specify organization in the fork parameter to create for an organization.
///
- /// See API documentation for more information.
- ///
- public Task Create(string owner, string repositoryName, NewRepositoryFork fork)
+ ///
+ /// See API documentation for more information.
+ ///
+ /// The owner of the repository
+ /// The name of the repository
+ /// Used to fork a repository
+ /// A representing the created fork of specified repository.
+ public Task Create(string owner, string name, NewRepositoryFork fork)
{
Ensure.ArgumentNotNullOrEmptyString(owner, "owner");
- Ensure.ArgumentNotNullOrEmptyString(repositoryName, "repositoryName");
+ Ensure.ArgumentNotNullOrEmptyString(name, "name");
Ensure.ArgumentNotNull(fork, "fork");
- return ApiConnection.Post(ApiUrls.RepositoryForks(owner, repositoryName), fork);
+ return ApiConnection.Post(ApiUrls.RepositoryForks(owner, name), fork);
}
}
-}
\ No newline at end of file
+}