diff --git a/Octokit.Tests.Integration/Reactive/ObservableOrganizationMembersClientTests.cs b/Octokit.Tests.Integration/Reactive/ObservableOrganizationMembersClientTests.cs index 6095584ba3..aed9bcf5b7 100644 --- a/Octokit.Tests.Integration/Reactive/ObservableOrganizationMembersClientTests.cs +++ b/Octokit.Tests.Integration/Reactive/ObservableOrganizationMembersClientTests.cs @@ -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; @@ -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(() => _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 { diff --git a/Octokit.Tests/Reactive/ObservableOrganizationMembersClientTests.cs b/Octokit.Tests/Reactive/ObservableOrganizationMembersClientTests.cs index 6e3e44b435..1a03d209d1 100644 --- a/Octokit.Tests/Reactive/ObservableOrganizationMembersClientTests.cs +++ b/Octokit.Tests/Reactive/ObservableOrganizationMembersClientTests.cs @@ -361,6 +361,33 @@ public async Task EnsuresNonNullArguments() await Assert.ThrowsAsync(() => client.AddOrUpdateOrganizationMembership("org", "username", null).ToTask()); } } + + public class TheCreateOrganizationInvitationMethod + { + [Fact] + public void CreateOrganizationInvitationFromClientOrganizationMember() + { + var gitHubClient = Substitute.For(); + 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()); + + var organizationInvitationRequest = new OrganizationInvitationRequest(1); + + await Assert.ThrowsAsync(() => client.CreateOrganizationInvitation(null, organizationInvitationRequest).ToTask()); + await Assert.ThrowsAsync(() => client.CreateOrganizationInvitation("", organizationInvitationRequest).ToTask()); + await Assert.ThrowsAsync(() => client.CreateOrganizationInvitation("org", null).ToTask()); + } + } public class TheDeleteOrganizationMembershipMethod {