mirror of
https://github.com/zoriya/octokit.net.git
synced 2025-12-06 07:16:09 +00:00
* Fix xUnit Warnings * Fix * Fix formatting in AsyncPaginationExtensionGenerator.cs --------- Co-authored-by: Keegan Campbell <me@kfcampbell.com>
458 lines
18 KiB
C#
458 lines
18 KiB
C#
using System.Collections.Generic;
|
|
using Octokit;
|
|
using Octokit.Tests.Integration;
|
|
using Octokit.Tests.Integration.Helpers;
|
|
using System.Linq;
|
|
using System.Threading.Tasks;
|
|
using Xunit;
|
|
|
|
public class RepositoryInvitationsClientTests
|
|
{
|
|
public class TheGetAllForRepositoryMethod
|
|
{
|
|
[IntegrationTest]
|
|
public async Task CanGetAllInvitations()
|
|
{
|
|
var github = Helper.GetAuthenticatedClient();
|
|
var collaborator = Helper.CredentialsSecondUser.Login;
|
|
var repoName = Helper.MakeNameWithTimestamp("public-repo");
|
|
|
|
using (var context = await github.CreateRepositoryContext(new NewRepository(repoName)))
|
|
{
|
|
var fixture = github.Repository.Collaborator;
|
|
var permission = new CollaboratorRequest("push");
|
|
|
|
// invite a collaborator
|
|
var response = await fixture.Invite(context.RepositoryOwner, context.RepositoryName, collaborator, permission);
|
|
|
|
Assert.Equal(collaborator, response.Invitee.Login);
|
|
Assert.Equal(InvitationPermissionType.Write, response.Permissions);
|
|
|
|
var invitations = await github.Repository.Invitation.GetAllForRepository(context.Repository.Id);
|
|
|
|
Assert.Single(invitations);
|
|
Assert.Equal(invitations[0].CreatedAt, response.CreatedAt);
|
|
Assert.Equal(invitations[0].Id, response.Id);
|
|
Assert.Equal(invitations[0].Invitee.Login, response.Invitee.Login);
|
|
Assert.Equal(invitations[0].Inviter.Login, response.Inviter.Login);
|
|
Assert.Equal(invitations[0].Permissions, response.Permissions);
|
|
Assert.Equal(invitations[0].Repository.Id, response.Repository.Id);
|
|
}
|
|
}
|
|
|
|
[DualAccountTest]
|
|
public async Task ReturnsCorrectCountOfInvitationsWithStart()
|
|
{
|
|
var collaborator1 = Helper.CredentialsSecondUser.Login;
|
|
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("push");
|
|
|
|
// invite a collaborator
|
|
var response1 = await fixture.Invite(context.RepositoryOwner, context.RepositoryName, collaborator1, permission);
|
|
|
|
Assert.Equal(collaborator1, response1.Invitee.Login);
|
|
Assert.Equal(InvitationPermissionType.Write, response1.Permissions);
|
|
|
|
var response2 = await fixture.Invite(context.RepositoryOwner, context.RepositoryName, context.RepositoryOwner, permission);
|
|
|
|
Assert.Equal(context.RepositoryOwner, response2.Invitee.Login);
|
|
Assert.Equal(InvitationPermissionType.Write, response2.Permissions);
|
|
|
|
var options = new ApiOptions
|
|
{
|
|
PageSize = 1,
|
|
PageCount = 1,
|
|
StartPage = 2
|
|
};
|
|
|
|
var invitations = await github.Repository.Invitation.GetAllForRepository(context.Repository.Id, options);
|
|
|
|
Assert.Single(invitations);
|
|
}
|
|
}
|
|
|
|
[DualAccountTest]
|
|
public async Task ReturnsCorrectCountOfInvitationsWithoutStart()
|
|
{
|
|
var collaborator = Helper.CredentialsSecondUser.Login;
|
|
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("push");
|
|
|
|
// invite a collaborator
|
|
var response = await fixture.Invite(context.RepositoryOwner, context.RepositoryName, collaborator, permission);
|
|
|
|
Assert.Equal(collaborator, response.Invitee.Login);
|
|
Assert.Equal(InvitationPermissionType.Write, response.Permissions);
|
|
|
|
var options = new ApiOptions
|
|
{
|
|
PageSize = 1,
|
|
PageCount = 1,
|
|
};
|
|
|
|
var invitations = await github.Repository.Invitation.GetAllForRepository(context.Repository.Id, options);
|
|
|
|
Assert.Single(invitations);
|
|
}
|
|
}
|
|
|
|
[IntegrationTest]
|
|
public async Task ReturnsDistinctInvitationsBasedOnStart()
|
|
{
|
|
var collaborator1 = Helper.CredentialsSecondUser.Login;
|
|
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("push");
|
|
|
|
// invite a collaborator
|
|
var response1 = await fixture.Invite(context.RepositoryOwner, context.RepositoryName, collaborator1, permission);
|
|
|
|
Assert.Equal(collaborator1, response1.Invitee.Login);
|
|
Assert.Equal(InvitationPermissionType.Write, response1.Permissions);
|
|
|
|
var response2 = await fixture.Invite(context.RepositoryOwner, context.RepositoryName, context.RepositoryOwner, permission);
|
|
|
|
Assert.Equal(context.RepositoryOwner, response2.Invitee.Login);
|
|
Assert.Equal(InvitationPermissionType.Write, response2.Permissions);
|
|
|
|
var startOptions = new ApiOptions
|
|
{
|
|
PageSize = 1,
|
|
PageCount = 1
|
|
};
|
|
|
|
var skipStartOptions = new ApiOptions
|
|
{
|
|
PageSize = 1,
|
|
PageCount = 1,
|
|
StartPage = 2
|
|
};
|
|
|
|
var firstInvitations = await github.Repository.Invitation.GetAllForRepository(context.Repository.Id, startOptions);
|
|
var secondInvitations = await github.Repository.Invitation.GetAllForRepository(context.Repository.Id, skipStartOptions);
|
|
|
|
Assert.NotEqual(firstInvitations[0].Invitee.Login, secondInvitations[0].Invitee.Login);
|
|
}
|
|
}
|
|
}
|
|
|
|
public class TheGetAllForCurrentMethod
|
|
{
|
|
[IntegrationTest]
|
|
public async Task CanGetAllInvitations()
|
|
{
|
|
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("push");
|
|
|
|
// invite a collaborator
|
|
var response = await fixture.Invite(context.RepositoryOwner, context.RepositoryName, context.RepositoryOwner, permission);
|
|
|
|
Assert.Equal(context.RepositoryOwner, response.Invitee.Login);
|
|
Assert.Equal(InvitationPermissionType.Write, response.Permissions);
|
|
|
|
var invitations = await github.Repository.Invitation.GetAllForCurrent();
|
|
|
|
Assert.True(invitations.Count >= 1);
|
|
Assert.NotNull(invitations.FirstOrDefault(i => i.CreatedAt == response.CreatedAt));
|
|
Assert.NotNull(invitations.FirstOrDefault(i => i.Id == response.Id));
|
|
Assert.NotNull(invitations.FirstOrDefault(i => i.Inviter.Login == response.Inviter.Login));
|
|
Assert.NotNull(invitations.FirstOrDefault(i => i.Invitee.Login == response.Invitee.Login));
|
|
Assert.NotNull(invitations.FirstOrDefault(i => i.Permissions == response.Permissions));
|
|
Assert.NotNull(invitations.FirstOrDefault(i => i.Repository.Id == response.Repository.Id));
|
|
}
|
|
}
|
|
|
|
[IntegrationTest]
|
|
public async Task ReturnsCorrectCountOfInvitationsWithStart()
|
|
{
|
|
var github = Helper.GetAuthenticatedClient();
|
|
var repoNames = Enumerable.Range(0, 2).Select(i => Helper.MakeNameWithTimestamp($"public-repo{i}")).ToList();
|
|
|
|
var contexts = new List<RepositoryContext>();
|
|
try
|
|
{
|
|
foreach (var repoName in repoNames)
|
|
{
|
|
contexts.Add(await github.CreateRepositoryContext(new NewRepository(repoName)));
|
|
}
|
|
var fixture = github.Repository.Collaborator;
|
|
var permission = new CollaboratorRequest("push");
|
|
|
|
// invite a collaborator to all repos
|
|
foreach (var context in contexts)
|
|
{
|
|
var response = await fixture.Invite(context.RepositoryOwner, context.RepositoryName, context.RepositoryOwner, permission);
|
|
|
|
Assert.Equal(context.RepositoryOwner, response.Invitee.Login);
|
|
Assert.Equal(InvitationPermissionType.Write, response.Permissions);
|
|
}
|
|
|
|
var startOptions = new ApiOptions
|
|
{
|
|
PageSize = 1,
|
|
PageCount = 1,
|
|
StartPage = 2
|
|
};
|
|
|
|
|
|
var invitations = await github.Repository.Invitation.GetAllForCurrent(startOptions);
|
|
Assert.Single(invitations);
|
|
}
|
|
finally
|
|
{
|
|
if (contexts != null)
|
|
{
|
|
foreach (var context in contexts)
|
|
{
|
|
context?.Dispose();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
[IntegrationTest]
|
|
public async Task ReturnsCorrectCountOfInvitationsWithoutStart()
|
|
{
|
|
var github = Helper.GetAuthenticatedClient();
|
|
var repoNames = Enumerable.Range(0, 2).Select(i => Helper.MakeNameWithTimestamp($"public-repo{i}")).ToList();
|
|
|
|
var contexts = new List<RepositoryContext>();
|
|
try
|
|
{
|
|
foreach (var repoName in repoNames)
|
|
{
|
|
contexts.Add(await github.CreateRepositoryContext(new NewRepository(repoName)));
|
|
}
|
|
var fixture = github.Repository.Collaborator;
|
|
var permission = new CollaboratorRequest("push");
|
|
|
|
// invite a collaborator to all repos
|
|
foreach (var context in contexts)
|
|
{
|
|
var response = await fixture.Invite(context.RepositoryOwner, context.RepositoryName, context.RepositoryOwner, permission);
|
|
|
|
Assert.Equal(context.RepositoryOwner, response.Invitee.Login);
|
|
Assert.Equal(InvitationPermissionType.Write, response.Permissions);
|
|
}
|
|
|
|
var startOptions = new ApiOptions
|
|
{
|
|
PageSize = 1,
|
|
PageCount = 1
|
|
};
|
|
|
|
|
|
var invitations = await github.Repository.Invitation.GetAllForCurrent(startOptions);
|
|
Assert.Single(invitations);
|
|
}
|
|
finally
|
|
{
|
|
if (contexts != null)
|
|
{
|
|
foreach (var context in contexts)
|
|
{
|
|
context?.Dispose();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
[IntegrationTest]
|
|
public async Task ReturnsDistinctInvitationsBasedOnStart()
|
|
{
|
|
var github = Helper.GetAuthenticatedClient();
|
|
var repoNames = Enumerable.Range(0, 2).Select(i => Helper.MakeNameWithTimestamp($"public-repo{i}")).ToList();
|
|
|
|
var contexts = new List<RepositoryContext>();
|
|
try
|
|
{
|
|
foreach (var repoName in repoNames)
|
|
{
|
|
contexts.Add(await github.CreateRepositoryContext(new NewRepository(repoName)));
|
|
}
|
|
var fixture = github.Repository.Collaborator;
|
|
var permission = new CollaboratorRequest("push");
|
|
|
|
// invite a collaborator to all repos
|
|
foreach (var context in contexts)
|
|
{
|
|
var response = await fixture.Invite(context.RepositoryOwner, context.RepositoryName, context.RepositoryOwner, permission);
|
|
|
|
Assert.Equal(context.RepositoryOwner, response.Invitee.Login);
|
|
Assert.Equal(InvitationPermissionType.Write, response.Permissions);
|
|
}
|
|
|
|
var startOptions = new ApiOptions
|
|
{
|
|
PageSize = 1,
|
|
PageCount = 1
|
|
};
|
|
|
|
var skipStartOptions = new ApiOptions
|
|
{
|
|
PageSize = 1,
|
|
PageCount = 1,
|
|
StartPage = 2
|
|
};
|
|
|
|
var firstInvitations = await github.Repository.Invitation.GetAllForCurrent(startOptions);
|
|
var secondInvitations = await github.Repository.Invitation.GetAllForCurrent(skipStartOptions);
|
|
|
|
var invitations = firstInvitations.Concat(secondInvitations).ToArray();
|
|
var invitationsLength = invitations.Length;
|
|
for (int i = 0; i < invitationsLength; i++)
|
|
{
|
|
for (int j = i + 1; j < invitationsLength; j++)
|
|
{
|
|
Assert.NotEqual(invitations[i].Repository.FullName, invitations[j].Repository.FullName);
|
|
}
|
|
}
|
|
}
|
|
finally
|
|
{
|
|
if (contexts != null)
|
|
{
|
|
foreach (var context in contexts)
|
|
{
|
|
context?.Dispose();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public class TheAcceptMethod
|
|
{
|
|
[IntegrationTest]
|
|
public async Task CanAcceptInvitation()
|
|
{
|
|
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("push");
|
|
|
|
// invite a collaborator
|
|
var response = await fixture.Invite(context.RepositoryOwner, context.RepositoryName, context.RepositoryOwner, permission);
|
|
|
|
Assert.Equal(context.RepositoryOwner, response.Invitee.Login);
|
|
Assert.Equal(InvitationPermissionType.Write, response.Permissions);
|
|
|
|
// Accept the invitation
|
|
var accepted = await github.Repository.Invitation.Accept(response.Id);
|
|
|
|
Assert.True(accepted);
|
|
}
|
|
}
|
|
}
|
|
|
|
public class TheDeclineMethod
|
|
{
|
|
[IntegrationTest]
|
|
public async Task CanDeclineInvitation()
|
|
{
|
|
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("push");
|
|
|
|
// invite a collaborator
|
|
var response = await fixture.Invite(context.RepositoryOwner, context.RepositoryName, context.RepositoryOwner, permission);
|
|
|
|
Assert.Equal(context.RepositoryOwner, response.Invitee.Login);
|
|
Assert.Equal(InvitationPermissionType.Write, response.Permissions);
|
|
|
|
// Decline the invitation
|
|
var declined = await github.Repository.Invitation.Decline(response.Id);
|
|
|
|
Assert.True(declined);
|
|
}
|
|
}
|
|
}
|
|
|
|
public class TheDeleteMethod
|
|
{
|
|
[IntegrationTest]
|
|
public async Task CanDeleteInvitation()
|
|
{
|
|
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("push");
|
|
|
|
// invite a collaborator
|
|
var response = await fixture.Invite(context.RepositoryOwner, context.RepositoryName, context.RepositoryOwner, permission);
|
|
|
|
Assert.Equal(context.RepositoryOwner, response.Invitee.Login);
|
|
Assert.Equal(InvitationPermissionType.Write, response.Permissions);
|
|
|
|
var delete = await github.Repository.Invitation.Delete(response.Repository.Id, response.Id);
|
|
|
|
Assert.True(delete);
|
|
}
|
|
}
|
|
}
|
|
|
|
public class TheUpdateMethod
|
|
{
|
|
[IntegrationTest]
|
|
public async Task CanUpdateInvitation()
|
|
{
|
|
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("push");
|
|
|
|
// invite a collaborator
|
|
var response = await fixture.Invite(context.RepositoryOwner, context.RepositoryName, context.RepositoryOwner, permission);
|
|
|
|
Assert.Equal(context.RepositoryOwner, response.Invitee.Login);
|
|
Assert.Equal(InvitationPermissionType.Write, response.Permissions);
|
|
|
|
var updatedInvitation = new InvitationUpdate(InvitationPermissionType.Admin);
|
|
|
|
var update = await github.Repository.Invitation.Edit(response.Repository.Id, response.Id, updatedInvitation);
|
|
|
|
Assert.Equal(updatedInvitation.Permissions, update.Permissions);
|
|
Assert.Equal(response.Id, update.Id);
|
|
Assert.Equal(response.Repository.Id, update.Repository.Id);
|
|
Assert.Equal(response.Invitee.Login, update.Invitee.Login);
|
|
Assert.Equal(response.Inviter.Login, update.Inviter.Login);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|