Files
octokit.net/Octokit.Tests.Integration/Clients/RepositoryCollaboratorClientTests.cs
Henrik Andersson 7c170213fd List pending organization / team invitations (#1640)
* Add methods for listing pending organization invites

* Add unit/integration tests

* Add methods for getting all pending invites for a team

* Add unit/integration tests

* 🔥 whitespace 🔥

* Move new enum to it's own correct file and location

* Invite(s) -> Invitation(s)

* Add helper functions for adding invitations and cleaning the invitations up at the end of the test

* Add methods with ApiOptions

* Fix helper methods for adding/removing invitations

* Forgot to actually pass in the ApiOptions to the API call

* Add tests for new ApiOptions methods

* tweak integration tests

* Update outside collaborator tests to use [OrganizationTest] attribute for consistency

* Update test accounts used

* use octokitnet-test2 account now it has 2FA turned on
2017-08-14 16:52:53 +10:00

479 lines
18 KiB
C#

using System;
using System.Threading.Tasks;
using Octokit;
using Octokit.Tests.Integration;
using Xunit;
using Octokit.Tests.Integration.Helpers;
public class RepositoryCollaboratorClientTests
{
public class TheGetAllMethod
{
[IntegrationTest]
public async Task ReturnsAllCollaborators()
{
var github = Helper.GetAuthenticatedClient();
var repoName = Helper.MakeNameWithTimestamp("public-repo");
using (var context = await github.CreateRepositoryContext(new NewRepository(repoName)))
{
var fixture = github.Repository.Collaborator;
// add a collaborator
await fixture.Add(context.RepositoryOwner, context.RepositoryName, "m-zuber-octokit-integration-tests");
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);
}
}
[IntegrationTest]
public async Task ReturnsAllCollaboratorsWithRepositoryId()
{
var github = Helper.GetAuthenticatedClient();
var repoName = Helper.MakeNameWithTimestamp("public-repo");
using (var context = await github.CreateRepositoryContext(new NewRepository(repoName)))
{
var fixture = github.Repository.Collaborator;
// add a collaborator
await fixture.Add(context.Repository.Id, "m-zuber-octokit-integration-tests");
var collaborators = await fixture.GetAll(context.Repository.Id);
Assert.NotNull(collaborators);
Assert.Equal(2, collaborators.Count);
}
}
[IntegrationTest]
public async Task ReturnsCorrectCountOfCollaboratorsWithoutStart()
{
var github = Helper.GetAuthenticatedClient();
var repoName = Helper.MakeNameWithTimestamp("public-repo");
using (var context = await github.CreateRepositoryContext(new NewRepository(repoName)))
{
var fixture = github.Repository.Collaborator;
// add some collaborators
await fixture.Add(context.RepositoryOwner, context.RepositoryName, "m-zuber-octokit-integration-tests");
var options = new ApiOptions
{
PageSize = 1,
PageCount = 1
};
var collaborators = await fixture.GetAll(context.RepositoryOwner, context.RepositoryName, options);
Assert.NotNull(collaborators);
Assert.Equal(1, collaborators.Count);
}
}
[IntegrationTest]
public async Task ReturnsCorrectCountOfCollaboratorsWithoutStartAndRepositoryId()
{
var github = Helper.GetAuthenticatedClient();
var repoName = Helper.MakeNameWithTimestamp("public-repo");
using (var context = await github.CreateRepositoryContext(new NewRepository(repoName)))
{
var fixture = github.Repository.Collaborator;
// add some collaborators
await fixture.Add(context.Repository.Id, "m-zuber-octokit-integration-tests");
var options = new ApiOptions
{
PageSize = 1,
PageCount = 1
};
var collaborators = await fixture.GetAll(context.Repository.Id, options);
Assert.NotNull(collaborators);
Assert.Equal(1, collaborators.Count);
}
}
[IntegrationTest]
public async Task ReturnsCorrectCountOfCollaboratorsWithStart()
{
var github = Helper.GetAuthenticatedClient();
var repoName = Helper.MakeNameWithTimestamp("public-repo");
using (var context = await github.CreateRepositoryContext(new NewRepository(repoName)))
{
var fixture = github.Repository.Collaborator;
// add some collaborators
await fixture.Add(context.RepositoryOwner, context.RepositoryName, "m-zuber-octokit-integration-tests");
var options = new ApiOptions
{
PageSize = 1,
PageCount = 1,
StartPage = 2
};
var collaborators = await fixture.GetAll(context.RepositoryOwner, context.RepositoryName, options);
Assert.NotNull(collaborators);
Assert.Equal(1, collaborators.Count);
}
}
[IntegrationTest]
public async Task ReturnsCorrectCountOfCollaboratorsWithStartAndRepositoryId()
{
var github = Helper.GetAuthenticatedClient();
var repoName = Helper.MakeNameWithTimestamp("public-repo");
using (var context = await github.CreateRepositoryContext(new NewRepository(repoName)))
{
var fixture = github.Repository.Collaborator;
// add some collaborators
await fixture.Add(context.Repository.Id, "m-zuber-octokit-integration-tests");
var options = new ApiOptions
{
PageSize = 1,
PageCount = 1,
StartPage = 2
};
var collaborators = await fixture.GetAll(context.Repository.Id, options);
Assert.NotNull(collaborators);
Assert.Equal(1, collaborators.Count);
}
}
[IntegrationTest]
public async Task ReturnsDistinctResultsBasedOnStartPage()
{
var github = Helper.GetAuthenticatedClient();
var repoName = Helper.MakeNameWithTimestamp("public-repo");
using (var context = await github.CreateRepositoryContext(new NewRepository(repoName)))
{
var fixture = github.Repository.Collaborator;
// add some collaborators
await fixture.Add(context.RepositoryOwner, context.RepositoryName, "m-zuber-octokit-integration-tests");
var startOptions = new ApiOptions
{
PageSize = 1,
PageCount = 1
};
var firstPage = await fixture.GetAll(context.RepositoryOwner, context.RepositoryName, startOptions);
var skipStartOptions = new ApiOptions
{
PageSize = 1,
PageCount = 1,
StartPage = 2
};
var secondPage = await fixture.GetAll(context.RepositoryOwner, context.RepositoryName, skipStartOptions);
Assert.NotEqual(firstPage[0].Id, secondPage[0].Id);
}
}
[IntegrationTest]
public async Task ReturnsDistinctResultsBasedOnStartPageWithRepositoryId()
{
var github = Helper.GetAuthenticatedClient();
var repoName = Helper.MakeNameWithTimestamp("public-repo");
using (var context = await github.CreateRepositoryContext(new NewRepository(repoName)))
{
var fixture = github.Repository.Collaborator;
// add some collaborators
await fixture.Add(context.Repository.Id, "m-zuber-octokit-integration-tests");
var startOptions = new ApiOptions
{
PageSize = 1,
PageCount = 1
};
var firstPage = await fixture.GetAll(context.Repository.Id, startOptions);
var skipStartOptions = new ApiOptions
{
PageSize = 1,
PageCount = 1,
StartPage = 2
};
var secondPage = await fixture.GetAll(context.Repository.Id, skipStartOptions);
Assert.NotEqual(firstPage[0].Id, secondPage[0].Id);
}
}
}
public class TheIsCollaboratorMethod
{
[IntegrationTest]
public async Task ReturnsTrueIfUserIsCollaborator()
{
var github = Helper.GetAuthenticatedClient();
var repoName = Helper.MakeNameWithTimestamp("public-repo");
using (var context = await github.CreateRepositoryContext(new NewRepository(repoName)))
{
var fixture = github.Repository.Collaborator;
// add a collaborator
await fixture.Add(context.RepositoryOwner, context.RepositoryName, "m-zuber-octokit-integration-tests");
var isCollab = await fixture.IsCollaborator(context.RepositoryOwner, context.RepositoryName, "m-zuber-octokit-integration-tests");
Assert.True(isCollab);
}
}
[IntegrationTest]
public async Task ReturnsTrueIfUserIsCollaboratorWithRepositoryId()
{
var github = Helper.GetAuthenticatedClient();
var repoName = Helper.MakeNameWithTimestamp("public-repo");
using (var context = await github.CreateRepositoryContext(new NewRepository(repoName)))
{
var fixture = github.Repository.Collaborator;
// add a collaborator
await fixture.Add(context.Repository.Id, "m-zuber-octokit-integration-tests");
var isCollab = await fixture.IsCollaborator(context.Repository.Id, "m-zuber-octokit-integration-tests");
Assert.True(isCollab);
}
}
}
public class TheReviewPermissionMethod
{
[IntegrationTest]
public async Task ReturnsReadPermissionForNonCollaborator()
{
var github = Helper.GetAuthenticatedClient();
var repoName = Helper.MakeNameWithTimestamp("public-repo");
using (var context = await github.CreateRepositoryContext(new NewRepository(repoName)))
{
var fixture = github.Repository.Collaborator;
var permission = await fixture.ReviewPermission(context.RepositoryOwner, context.RepositoryName, "octokitnet-test1");
Assert.Equal(PermissionLevel.Read, permission.Permission);
}
}
[IntegrationTest]
public async Task ReturnsReadPermissionForNonCollaboratorWithRepositoryId()
{
var github = Helper.GetAuthenticatedClient();
var repoName = Helper.MakeNameWithTimestamp("public-repo");
using (var context = await github.CreateRepositoryContext(new NewRepository(repoName)))
{
var fixture = github.Repository.Collaborator;
var permission = await fixture.ReviewPermission(context.RepositoryId, "octokitnet-test1");
Assert.Equal(PermissionLevel.Read, permission.Permission);
}
}
[IntegrationTest]
public async Task ReturnsWritePermissionForCollaborator()
{
var github = Helper.GetAuthenticatedClient();
var repoName = Helper.MakeNameWithTimestamp("public-repo");
using (var context = await github.CreateRepositoryContext(new NewRepository(repoName)))
{
var fixture = github.Repository.Collaborator;
// add a collaborator
await fixture.Add(context.RepositoryOwner, context.RepositoryName, "octokitnet-test1");
var permission = await fixture.ReviewPermission(context.RepositoryOwner, context.RepositoryName, "octokitnet-test1");
Assert.Equal(PermissionLevel.Write, permission.Permission);
}
}
[IntegrationTest]
public async Task ReturnsWritePermissionForCollaboratorWithRepositoryId()
{
var github = Helper.GetAuthenticatedClient();
var repoName = Helper.MakeNameWithTimestamp("public-repo");
using (var context = await github.CreateRepositoryContext(new NewRepository(repoName)))
{
var fixture = github.Repository.Collaborator;
// add a collaborator
await fixture.Add(context.RepositoryOwner, context.RepositoryName, "octokitnet-test1");
var permission = await fixture.ReviewPermission(context.RepositoryId, "octokitnet-test1");
Assert.Equal(PermissionLevel.Write, permission.Permission);
}
}
[IntegrationTest]
public async Task ReturnsAdminPermissionForOwner()
{
var github = Helper.GetAuthenticatedClient();
var repoName = Helper.MakeNameWithTimestamp("public-repo");
using (var context = await github.CreateRepositoryContext(new NewRepository(repoName)))
{
var fixture = github.Repository.Collaborator;
var permission = await fixture.ReviewPermission(context.RepositoryOwner, context.RepositoryName, context.RepositoryOwner);
Assert.Equal(PermissionLevel.Admin, permission.Permission);
}
}
[IntegrationTest]
public async Task ReturnsAdminPermissionForOwnerWithRepositoryId()
{
var github = Helper.GetAuthenticatedClient();
var repoName = Helper.MakeNameWithTimestamp("public-repo");
using (var context = await github.CreateRepositoryContext(new NewRepository(repoName)))
{
var fixture = github.Repository.Collaborator;
var permission = await fixture.ReviewPermission(context.RepositoryId, context.RepositoryOwner);
Assert.Equal(PermissionLevel.Admin, permission.Permission);
}
}
[PaidAccountTest]
public async Task ReturnsNonePermissionForPrivateRepository()
{
var github = Helper.GetAuthenticatedClient();
var userDetails = await github.User.Current();
if (userDetails.Plan.PrivateRepos == 0)
{
throw new Exception("Test cannot complete, account is on free plan");
}
var repoName = Helper.MakeNameWithTimestamp("private-repo");
using (var context = await github.CreateRepositoryContext(new NewRepository(repoName) { Private = true }))
{
var fixture = github.Repository.Collaborator;
var permission = await fixture.ReviewPermission(context.RepositoryOwner, context.RepositoryName, "octokitnet-test1");
Assert.Equal(PermissionLevel.None, permission.Permission);
}
}
[PaidAccountTest]
public async Task ReturnsNonePermissionForPrivateRepositoryWithRepositoryId()
{
var github = Helper.GetAuthenticatedClient();
var userDetails = await github.User.Current();
if (userDetails.Plan.PrivateRepos == 0)
{
throw new Exception("Test cannot complete, account is on free plan");
}
var repoName = Helper.MakeNameWithTimestamp("private-repo");
using (var context = await github.CreateRepositoryContext(new NewRepository(repoName) { Private = true }))
{
var fixture = github.Repository.Collaborator;
var permission = await fixture.ReviewPermission(context.RepositoryId, "octokitnet-test1");
Assert.Equal(PermissionLevel.None, permission.Permission);
}
}
}
public class TheDeleteMethod
{
[IntegrationTest]
public async Task CheckDeleteMethod()
{
var github = Helper.GetAuthenticatedClient();
var repoName = Helper.MakeNameWithTimestamp("public-repo");
using (var context = await github.CreateRepositoryContext(new NewRepository(repoName)))
{
var fixture = github.Repository.Collaborator;
// add a collaborator
await fixture.Add(context.RepositoryOwner, context.RepositoryName, "m-zuber-octokit-integration-tests");
// and remove
await fixture.Delete(context.RepositoryOwner, context.RepositoryName, "m-zuber-octokit-integration-tests");
var isCollab = await fixture.IsCollaborator(context.RepositoryOwner, context.RepositoryName, "m-zuber-octokit-integration-tests");
Assert.False(isCollab);
}
}
[IntegrationTest]
public async Task CheckDeleteMethodWithRepositoryId()
{
var github = Helper.GetAuthenticatedClient();
var repoName = Helper.MakeNameWithTimestamp("public-repo");
using (var context = await github.CreateRepositoryContext(new NewRepository(repoName)))
{
var fixture = github.Repository.Collaborator;
// add a collaborator
await fixture.Add(context.Repository.Id, "m-zuber-octokit-integration-tests");
// and remove
await fixture.Delete(context.Repository.Id, "m-zuber-octokit-integration-tests");
var isCollab = await fixture.IsCollaborator(context.Repository.Id, "m-zuber-octokit-integration-tests");
Assert.False(isCollab);
}
}
}
public class TheInviteMethod
{
[IntegrationTest]
public async Task CanInviteNewCollaborator()
{
var github = Helper.GetAuthenticatedClient();
var repoName = Helper.MakeNameWithTimestamp("public-repo");
using (var context = await github.CreateRepositoryContext(new NewRepository(repoName)))
{
var fixture = github.Repository.Collaborator;
var permission = new CollaboratorRequest(Permission.Push);
// invite a collaborator
var response = await fixture.Invite(context.RepositoryOwner, context.RepositoryName, "octokat", permission);
Assert.Equal("octokat", response.Invitee.Login);
Assert.Equal(InvitationPermissionType.Write, response.Permissions);
}
}
}
}