diff --git a/Octokit.Reactive/Clients/ObservableTeamsClient.cs b/Octokit.Reactive/Clients/ObservableTeamsClient.cs index 2b4bd0ec..0cb63575 100644 --- a/Octokit.Reactive/Clients/ObservableTeamsClient.cs +++ b/Octokit.Reactive/Clients/ObservableTeamsClient.cs @@ -224,7 +224,7 @@ namespace Octokit.Reactive { Ensure.ArgumentNotNull(options, "options"); - return _connection.GetAndFlattenAllPages(ApiUrls.TeamRepositories(id), options); + return _connection.GetAndFlattenAllPages(ApiUrls.TeamRepositories(id), null, AcceptHeaders.OrganizationPermissionsPreview, options); } /// diff --git a/Octokit.Tests.Integration/Clients/RepositoryCollaboratorClientTests.cs b/Octokit.Tests.Integration/Clients/RepositoryCollaboratorClientTests.cs index abfff650..1035ab35 100644 --- a/Octokit.Tests.Integration/Clients/RepositoryCollaboratorClientTests.cs +++ b/Octokit.Tests.Integration/Clients/RepositoryCollaboratorClientTests.cs @@ -24,6 +24,8 @@ public class RepositoryCollaboratorClientTests var collaborators = await fixture.GetAll(context.RepositoryOwner, context.RepositoryName); Assert.NotNull(collaborators); Assert.Equal(2, collaborators.Count); + Assert.NotNull(collaborators[0].Permissions); + Assert.NotNull(collaborators[1].Permissions); } } diff --git a/Octokit.Tests.Integration/Clients/TeamsClientTests.cs b/Octokit.Tests.Integration/Clients/TeamsClientTests.cs index 91b812a8..fecb5c1d 100644 --- a/Octokit.Tests.Integration/Clients/TeamsClientTests.cs +++ b/Octokit.Tests.Integration/Clients/TeamsClientTests.cs @@ -99,11 +99,11 @@ public class TeamsClientTests } } - public class TheGetMembersMethod + public class TheGetAllMembersMethod { readonly Team team; - public TheGetMembersMethod() + public TheGetAllMembersMethod() { var github = Helper.GetAuthenticatedClient(); @@ -121,6 +121,34 @@ public class TeamsClientTests } } + public class TheGetAllRepositoriesMethod + { + readonly Team _team; + + public TheGetAllRepositoriesMethod() + { + var github = Helper.GetAuthenticatedClient(); + + _team = github.Organization.Team.GetAll(Helper.Organization).Result.First(); + } + + [OrganizationTest] + public async Task GetsAllRepositories() + { + var github = Helper.GetAuthenticatedClient(); + + using (var repositoryContext = await github.CreateRepositoryContext(Helper.Organization, new NewRepository(Helper.MakeNameWithTimestamp("teamrepo")))) + { + github.Organization.Team.AddRepository(_team.Id, Helper.Organization, repositoryContext.RepositoryName); + + var repos = await github.Organization.Team.GetAllRepositories(_team.Id); + + Assert.True(repos.Count > 0); + Assert.NotNull(repos[0].Permissions); + } + } + } + public class TheAddOrUpdateTeamRepositoryMethod { private readonly IGitHubClient _github; diff --git a/Octokit.Tests.Integration/Reactive/ObservableRepositoryCollaboratorClientTests.cs b/Octokit.Tests.Integration/Reactive/ObservableRepositoryCollaboratorClientTests.cs index c6fc5464..f26eff9a 100644 --- a/Octokit.Tests.Integration/Reactive/ObservableRepositoryCollaboratorClientTests.cs +++ b/Octokit.Tests.Integration/Reactive/ObservableRepositoryCollaboratorClientTests.cs @@ -26,6 +26,8 @@ public class ObservableRepositoryCollaboratorClientTests var collaborators = await fixture.GetAll(context.RepositoryOwner, context.RepositoryName).ToList(); Assert.NotNull(collaborators); Assert.Equal(2, collaborators.Count); + Assert.NotNull(collaborators[0].Permissions); + Assert.NotNull(collaborators[1].Permissions); } } diff --git a/Octokit.Tests.Integration/Reactive/ObservableTeamsClientTests.cs b/Octokit.Tests.Integration/Reactive/ObservableTeamsClientTests.cs index d6743e8c..c6b9969d 100644 --- a/Octokit.Tests.Integration/Reactive/ObservableTeamsClientTests.cs +++ b/Octokit.Tests.Integration/Reactive/ObservableTeamsClientTests.cs @@ -4,15 +4,16 @@ using System.Threading.Tasks; using Octokit; using Octokit.Reactive; using Octokit.Tests.Integration; +using Octokit.Tests.Integration.Helpers; using Xunit; public class ObservableTeamsClientTests { - public class TheGetMembersMethod + public class TheGetAllMembersMethod { readonly Team _team; - public TheGetMembersMethod() + public TheGetAllMembersMethod() { var github = Helper.GetAuthenticatedClient(); @@ -23,12 +24,43 @@ public class ObservableTeamsClientTests public async Task GetsAllMembersWhenAuthenticated() { var github = Helper.GetAuthenticatedClient(); - var client = new ObservableTeamsClient(github); - var member = await client.GetAllMembers(_team.Id, ApiOptions.None); + var observable = client.GetAllMembers(_team.Id, ApiOptions.None); + var members = await observable.ToList(); - Assert.Equal(Helper.UserName, member.Login); + Assert.True(members.Count > 0); + Assert.True(members.Any(x => x.Login == Helper.UserName)); + } + } + + public class TheGetAllRepositoriesMethod + { + readonly Team _team; + + public TheGetAllRepositoriesMethod() + { + var github = Helper.GetAuthenticatedClient(); + + _team = github.Organization.Team.GetAll(Helper.Organization).Result.First(); + } + + [OrganizationTest] + public async Task GetsAllRepositories() + { + var github = Helper.GetAuthenticatedClient(); + var client = new ObservableTeamsClient(github); + + using (var repositoryContext = await github.CreateRepositoryContext(Helper.Organization, new NewRepository(Helper.MakeNameWithTimestamp("teamrepo")))) + { + client.AddRepository(_team.Id, Helper.Organization, repositoryContext.RepositoryName); + + var observable = client.GetAllRepositories(_team.Id, ApiOptions.None); + var repos = await observable.ToList(); + + Assert.True(repos.Count() > 0); + Assert.NotNull(repos[0].Permissions); + } } } } diff --git a/Octokit.Tests/Clients/RepoCollaboratorsClientTests.cs b/Octokit.Tests/Clients/RepoCollaboratorsClientTests.cs index 5c9921d4..d79c82a8 100644 --- a/Octokit.Tests/Clients/RepoCollaboratorsClientTests.cs +++ b/Octokit.Tests/Clients/RepoCollaboratorsClientTests.cs @@ -32,7 +32,7 @@ namespace Octokit.Tests.Clients var client = new RepoCollaboratorsClient(connection); client.GetAll("owner", "test"); - connection.Received().GetAll(Arg.Is(u => u.ToString() == "repos/owner/test/collaborators"), Args.ApiOptions); + connection.Received().GetAll(Arg.Is(u => u.ToString() == "repos/owner/test/collaborators"), null, "application/vnd.github.ironman-preview+json", Args.ApiOptions); } [Fact] @@ -51,7 +51,7 @@ namespace Octokit.Tests.Clients client.GetAll("owner", "test", options); connection.Received() - .GetAll(Arg.Is(u => u.ToString() == "repos/owner/test/collaborators"), options); + .GetAll(Arg.Is(u => u.ToString() == "repos/owner/test/collaborators"), null, "application/vnd.github.ironman-preview+json", options); } [Fact] diff --git a/Octokit.Tests/Clients/TeamsClientTests.cs b/Octokit.Tests/Clients/TeamsClientTests.cs index 3144cd98..1d06195a 100644 --- a/Octokit.Tests/Clients/TeamsClientTests.cs +++ b/Octokit.Tests/Clients/TeamsClientTests.cs @@ -221,7 +221,7 @@ namespace Octokit.Tests.Clients } } - public class TheRRemoveMembershipMethod + public class TheRemoveMembershipMethod { [Fact] public void RequestsTheCorrectUrl() @@ -256,6 +256,8 @@ namespace Octokit.Tests.Clients connection.Received().GetAll( Arg.Is(u => u.ToString() == "teams/1/repos"), + null, + "application/vnd.github.ironman-preview+json", Args.ApiOptions); } } diff --git a/Octokit/Clients/RepoCollaboratorsClient.cs b/Octokit/Clients/RepoCollaboratorsClient.cs index d72ea217..cf1f5a35 100644 --- a/Octokit/Clients/RepoCollaboratorsClient.cs +++ b/Octokit/Clients/RepoCollaboratorsClient.cs @@ -57,7 +57,7 @@ namespace Octokit Ensure.ArgumentNotNullOrEmptyString(repo, "repo"); Ensure.ArgumentNotNull(options, "options"); - return ApiConnection.GetAll(ApiUrls.RepoCollaborators(owner, repo), options); + return ApiConnection.GetAll(ApiUrls.RepoCollaborators(owner, repo), null, AcceptHeaders.OrganizationPermissionsPreview, options); } /// diff --git a/Octokit/Clients/TeamsClient.cs b/Octokit/Clients/TeamsClient.cs index c928e6a1..e398e6d3 100644 --- a/Octokit/Clients/TeamsClient.cs +++ b/Octokit/Clients/TeamsClient.cs @@ -276,22 +276,7 @@ namespace Octokit var endpoint = ApiUrls.TeamRepositories(id); - return ApiConnection.GetAll(endpoint, options); - } - - /// - /// Returns all (ies) associated with the given team. - /// - /// The team identifier - /// - /// See the API documentation for more information. - /// - /// A list of the team's (ies). - public Task> GetRepositories(int id) - { - var endpoint = ApiUrls.TeamRepositories(id); - - return ApiConnection.GetAll(endpoint); + return ApiConnection.GetAll(endpoint, null, AcceptHeaders.OrganizationPermissionsPreview, options); } /// diff --git a/Octokit/Helpers/AcceptHeaders.cs b/Octokit/Helpers/AcceptHeaders.cs index 95f81792..8d988723 100644 --- a/Octokit/Helpers/AcceptHeaders.cs +++ b/Octokit/Helpers/AcceptHeaders.cs @@ -10,6 +10,8 @@ namespace Octokit public const string RedirectsPreviewThenStableVersionJson = "application/vnd.github.quicksilver-preview+json; charset=utf-8, application/vnd.github.v3+json; charset=utf-8"; + public const string OrganizationPermissionsPreview = "application/vnd.github.ironman-preview+json"; + public const string LicensesApiPreview = "application/vnd.github.drax-preview+json"; public const string ProtectedBranchesApiPreview = "application/vnd.github.loki-preview+json"; @@ -22,9 +24,7 @@ namespace Octokit public const string SquashCommitPreview = "application/vnd.github.polaris-preview+json"; - public const string MigrationsApiPreview = " application/vnd.github.wyandotte-preview+json"; - - public const string OrganizationPermissionsPreview = "application/vnd.github.ironman-preview+json"; + public const string MigrationsApiPreview = "application/vnd.github.wyandotte-preview+json"; [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Gpg")] public const string GpgKeysPreview = "application/vnd.github.cryptographer-preview"; diff --git a/Octokit/Models/Response/User.cs b/Octokit/Models/Response/User.cs index 5c7c515e..2cd22753 100644 --- a/Octokit/Models/Response/User.cs +++ b/Octokit/Models/Response/User.cs @@ -13,14 +13,17 @@ namespace Octokit { public User() { } - public User(string avatarUrl, string bio, string blog, int collaborators, string company, DateTimeOffset createdAt, int diskUsage, string email, int followers, int following, bool? hireable, string htmlUrl, int totalPrivateRepos, int id, string location, string login, string name, int ownedPrivateRepos, Plan plan, int privateGists, int publicGists, int publicRepos, string url, bool siteAdmin, string ldapDistinguishedName, DateTimeOffset? suspendedAt) + public User(string avatarUrl, string bio, string blog, int collaborators, string company, DateTimeOffset createdAt, int diskUsage, string email, int followers, int following, bool? hireable, string htmlUrl, int totalPrivateRepos, int id, string location, string login, string name, int ownedPrivateRepos, Plan plan, int privateGists, int publicGists, int publicRepos, string url, RepositoryPermissions permissions, bool siteAdmin, string ldapDistinguishedName, DateTimeOffset? suspendedAt) : base(avatarUrl, bio, blog, collaborators, company, createdAt, diskUsage, email, followers, following, hireable, htmlUrl, totalPrivateRepos, id, location, login, name, ownedPrivateRepos, plan, privateGists, publicGists, publicRepos, AccountType.User, url) { + Permissions = permissions; SiteAdmin = siteAdmin; LdapDistinguishedName = ldapDistinguishedName; SuspendedAt = suspendedAt; } + public RepositoryPermissions Permissions { get; protected set; } + /// /// Whether or not the user is an administrator of the site ///