feat: Add create organization invitation via email (#2895)

* Add API request to create org invitation

* Add tests for create org invitation

* Add IObservable API request to create org invitation

* Add tests for IObservable create org invitation
This commit is contained in:
skyemcleman
2024-03-12 05:02:31 +11:00
committed by GitHub
parent d27d1f0a22
commit 41d5d240ec
13 changed files with 464 additions and 3 deletions
@@ -0,0 +1,87 @@
using System.Diagnostics;
using System.Globalization;
using Octokit.Internal;
namespace Octokit
{
/// <summary>
/// Used as part of the request to invite a user to an organization.
/// </summary>
[DebuggerDisplay("{DebuggerDisplay,nq}")]
public class OrganizationInvitationRequest
{
public OrganizationInvitationRequest(int inviteeId)
{
InviteeId = inviteeId;
}
public OrganizationInvitationRequest(string email)
{
Email = email;
}
public OrganizationInvitationRequest(int inviteeId, OrganizationMembershipRole role)
{
InviteeId = inviteeId;
Role = role;
}
public OrganizationInvitationRequest(string email, OrganizationMembershipRole role)
{
Email = email;
Role = role;
}
public OrganizationInvitationRequest(int inviteeId, int[] teamIds)
{
InviteeId = inviteeId;
TeamIds = teamIds;
}
public OrganizationInvitationRequest(string email, int[] teamIds)
{
Email = email;
TeamIds = teamIds;
}
public OrganizationInvitationRequest(int inviteeId, OrganizationMembershipRole role, int[] teamIds)
{
InviteeId = inviteeId;
Role = role;
TeamIds = teamIds;
}
public OrganizationInvitationRequest(string email, OrganizationMembershipRole role, int[] teamIds)
{
Email = email;
Role = role;
TeamIds = teamIds;
}
/// <summary>
/// The user ID of the person being invited. Required if Email is not specified.
/// </summary>
[Parameter(Key = "invitee_id")]
public int? InviteeId { get; set; }
/// <summary>
/// The email address of the person being invited. Required if InviteeId is not specified.
/// </summary>
[Parameter(Key = "email")]
public string Email { get; set; }
/// <summary>
/// The role to give the user in the organization. The default is <see cref="OrganizationMembershipRole.DirectMember"/>.
/// </summary>
[Parameter(Key = "role")]
public OrganizationMembershipRole Role { get; set; } = OrganizationMembershipRole.DirectMember;
/// <summary>
/// The IDs for the team(s) to invite new members to
/// </summary>
[Parameter(Key = "team_ids")]
public int[] TeamIds { get; set; }
internal string DebuggerDisplay => $"InviteeId: {InviteeId}; Email: {Email}; Role: {Role}; Team IDs: {(TeamIds != null ? string.Join(", ", TeamIds) : "")}";
}
}
@@ -12,7 +12,7 @@ namespace Octokit
{
}
public OrganizationMembershipInvitation(int id, string nodeId, string login, string email, OrganizationMembershipRole role, DateTimeOffset createdAt, User inviter)
public OrganizationMembershipInvitation(int id, string nodeId, string login, string email, OrganizationMembershipRole role, DateTimeOffset createdAt, User inviter, int teamCount)
{
Id = id;
NodeId = nodeId;
@@ -21,6 +21,7 @@ namespace Octokit
Role = role;
CreatedAt = createdAt;
Inviter = inviter;
TeamCount = teamCount;
}
public int Id { get; private set; }
@@ -35,6 +36,7 @@ namespace Octokit
public StringEnum<OrganizationMembershipRole> Role { get; private set; }
public DateTimeOffset CreatedAt { get; private set; }
public User Inviter { get; private set; }
public int TeamCount { get; private set; }
[SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode",
Justification = "Used by DebuggerDisplayAttribute")]