Skip to content

Commit

Permalink
Add tests for IObservable create org invitation
Browse files Browse the repository at this point in the history
  • Loading branch information
skyemcleman committed Mar 8, 2024
1 parent 3ec7196 commit cae0bc8
Show file tree
Hide file tree
Showing 2 changed files with 121 additions and 1 deletion.
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
using System.Reactive.Linq;
using System;
using System.Reactive.Linq;
using System.Reactive.Threading.Tasks;
using System.Threading.Tasks;
using Octokit.Reactive;
using Octokit.Tests.Helpers;
using Octokit.Tests.Integration.Helpers;
using Xunit;

Expand Down Expand Up @@ -62,6 +64,97 @@ public async Task ReturnsUsersPendingAdminOrganizationMembership()
await _client.RemoveOrganizationMembership(Helper.Organization, "alfhenrik-test-2");
}
}

public class TheCreateOrganizationInvitationMethod
{
readonly IGitHubClient _gitHub;
readonly ObservableOrganizationMembersClient _client;

public TheCreateOrganizationInvitationMethod()
{
_gitHub = Helper.GetAuthenticatedClient();
_client = new ObservableOrganizationMembersClient(_gitHub);
}

[OrganizationTest]
public async Task ReturnsOrganizationMembershipInvitationViaUserId()
{
var user = await _gitHub.User.Get("alfhenrik-test-2");

var organizationInvitationRequest = new OrganizationInvitationRequest(user.Id);
var organizationMembershipInvitation = await _client.CreateOrganizationInvitation(Helper.Organization, organizationInvitationRequest);

Assert.Equal("alfhenrik-test-2", organizationMembershipInvitation.Login);
Assert.Equal(OrganizationMembershipRole.DirectMember, organizationMembershipInvitation.Role.Value);
Assert.Equal(Helper.UserName, organizationMembershipInvitation.Inviter.Login);

await _client.RemoveOrganizationMembership(Helper.Organization, "alfhenrik-test-2");
}

[OrganizationTest]
public async Task ReturnsOrganizationMembershipInvitationViaUserEmail()
{
var email = RandomEmailGenerator.GenerateRandomEmail();

var organizationInvitationRequest = new OrganizationInvitationRequest(email);
var organizationMembershipInvitation = await _client.CreateOrganizationInvitation(Helper.Organization, organizationInvitationRequest);

Assert.Equal(email, organizationMembershipInvitation.Email);
Assert.Equal(OrganizationMembershipRole.DirectMember, organizationMembershipInvitation.Role.Value);
Assert.Equal(Helper.UserName, organizationMembershipInvitation.Inviter.Login);

await _client.CancelOrganizationInvitation(Helper.Organization, organizationMembershipInvitation.Id);
}

[OrganizationTest]
public async Task ThrowsApiValidationExceptionForCurrentOrganizationMembers()
{
var user = await _gitHub.User.Get(Helper.UserName);
var organizationInvitationRequest = new OrganizationInvitationRequest(user.Id);

await Assert.ThrowsAsync<ApiValidationException>(() => _client.CreateOrganizationInvitation(Helper.Organization, organizationInvitationRequest).ToTask());
}

[OrganizationTest]
public async Task ReturnsOrganizationMembershipInvitationSingleTeam()
{
var user = await _gitHub.User.Get("alfhenrik-test-2");

var team1 = await _gitHub.Organization.Team.Create(Helper.Organization, new NewTeam("TestTeam1"));

var organizationInvitationRequest = new OrganizationInvitationRequest(user.Id, new int[] {team1.Id});
var organizationMembershipInvitation = await _client.CreateOrganizationInvitation(Helper.Organization, organizationInvitationRequest);

Assert.Equal("alfhenrik-test-2", organizationMembershipInvitation.Login);
Assert.Equal(OrganizationMembershipRole.DirectMember, organizationMembershipInvitation.Role.Value);
Assert.Equal(Helper.UserName, organizationMembershipInvitation.Inviter.Login);
Assert.Equal(1, organizationMembershipInvitation.TeamCount);

await _gitHub.Organization.Team.Delete(Helper.Organization, team1.Slug);
await _client.RemoveOrganizationMembership(Helper.Organization, "alfhenrik-test-2");
}

[OrganizationTest]
public async Task ReturnsOrganizationMembershipInvitationMultipleTeams()
{
var user = await _gitHub.User.Get("alfhenrik-test-2");

var team1 = await _gitHub.Organization.Team.Create(Helper.Organization, new NewTeam("TestTeam1"));
var team2 = await _gitHub.Organization.Team.Create(Helper.Organization, new NewTeam("TestTeam2"));

var organizationInvitationRequest = new OrganizationInvitationRequest(user.Id, new int[] {team1.Id, team2.Id});
var organizationMembershipInvitation = await _client.CreateOrganizationInvitation(Helper.Organization, organizationInvitationRequest);

Assert.Equal("alfhenrik-test-2", organizationMembershipInvitation.Login);
Assert.Equal(OrganizationMembershipRole.DirectMember, organizationMembershipInvitation.Role.Value);
Assert.Equal(Helper.UserName, organizationMembershipInvitation.Inviter.Login);
Assert.Equal(2, organizationMembershipInvitation.TeamCount);

await _gitHub.Organization.Team.Delete(Helper.Organization, team1.Slug);
await _gitHub.Organization.Team.Delete(Helper.Organization, team2.Slug);
await _client.RemoveOrganizationMembership(Helper.Organization, "alfhenrik-test-2");
}
}

public class TheRemoveOrganizationMembershipMethod
{
Expand Down
27 changes: 27 additions & 0 deletions Octokit.Tests/Reactive/ObservableOrganizationMembersClientTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -361,6 +361,33 @@ public async Task EnsuresNonNullArguments()
await Assert.ThrowsAsync<ArgumentNullException>(() => client.AddOrUpdateOrganizationMembership("org", "username", null).ToTask());
}
}

public class TheCreateOrganizationInvitationMethod
{
[Fact]
public void CreateOrganizationInvitationFromClientOrganizationMember()
{
var gitHubClient = Substitute.For<IGitHubClient>();
var client = new ObservableOrganizationMembersClient(gitHubClient);

var organizationInvitationRequest = new OrganizationInvitationRequest(1);
client.CreateOrganizationInvitation("org", organizationInvitationRequest);

gitHubClient.Organization.Member.Received().CreateOrganizationInvitation("org", organizationInvitationRequest);
}

[Fact]
public async Task EnsureNonNullArguments()
{
var client = new ObservableOrganizationMembersClient(Substitute.For<IGitHubClient>());

var organizationInvitationRequest = new OrganizationInvitationRequest(1);

await Assert.ThrowsAsync<ArgumentNullException>(() => client.CreateOrganizationInvitation(null, organizationInvitationRequest).ToTask());
await Assert.ThrowsAsync<ArgumentException>(() => client.CreateOrganizationInvitation("", organizationInvitationRequest).ToTask());
await Assert.ThrowsAsync<ArgumentNullException>(() => client.CreateOrganizationInvitation("org", null).ToTask());
}
}

public class TheDeleteOrganizationMembershipMethod
{
Expand Down

0 comments on commit cae0bc8

Please sign in to comment.