Skip to content

Commit

Permalink
feat: Adding seats and filled seats to plan response. (#2539)
Browse files Browse the repository at this point in the history
  • Loading branch information
JonruAlveus authored Aug 12, 2022
1 parent 176bf38 commit b866d66
Show file tree
Hide file tree
Showing 2 changed files with 49 additions and 28 deletions.
46 changes: 29 additions & 17 deletions Octokit.Tests.Integration/Clients/OrganizationClientTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,30 +8,23 @@ public class OrganizationClientTests
{
public class TheGetAllMethod
{
readonly IGitHubClient _github;
readonly IOrganizationsClient _organizationsClient;

public TheGetAllMethod()
{
_github = EnterpriseHelper.GetAuthenticatedClient();

_organizationsClient = _github.Organization;
}

[GitHubEnterpriseTest]
public async Task CanListAllOrganizations()
{
var github = EnterpriseHelper.GetAuthenticatedClient();
var organizationsClient = github.Organization;

string orgLogin1 = Helper.MakeNameWithTimestamp("MyOrganization1");
string orgName1 = string.Concat(orgLogin1, " Display Name 1");
string orgLogin2 = Helper.MakeNameWithTimestamp("MyOrganization2");
string orgName2 = string.Concat(orgLogin2, " Display Name 2");

var newOrganization1 = new NewOrganization(orgLogin1, EnterpriseHelper.UserName, orgName1);
var newOrganization2 = new NewOrganization(orgLogin2, EnterpriseHelper.UserName, orgName2);
await _github.Enterprise.Organization.Create(newOrganization1);
await _github.Enterprise.Organization.Create(newOrganization2);
await github.Enterprise.Organization.Create(newOrganization1);
await github.Enterprise.Organization.Create(newOrganization2);

var organizations = await _organizationsClient.GetAll();
var organizations = await organizationsClient.GetAll();

Assert.Contains(organizations, (org => org.Login == orgLogin1));
Assert.Contains(organizations, (org => org.Login == orgLogin2));
Expand All @@ -40,6 +33,9 @@ public async Task CanListAllOrganizations()
[GitHubEnterpriseTest]
public async Task ReturnsCorrectOrganizationsWithSince()
{
var github = EnterpriseHelper.GetAuthenticatedClient();
var organizationsClient = github.Organization;

string orgLogin1 = Helper.MakeNameWithTimestamp("MyOrganization1");
string orgName1 = string.Concat(orgLogin1, " Display Name 1");
string orgLogin2 = Helper.MakeNameWithTimestamp("MyOrganization2");
Expand All @@ -51,20 +47,36 @@ public async Task ReturnsCorrectOrganizationsWithSince()
var newOrganization2 = new NewOrganization(orgLogin2, EnterpriseHelper.UserName, orgName2);
var newOrganization3 = new NewOrganization(orgLogin3, EnterpriseHelper.UserName, orgName3);

var createdOrganization1 = await _github.Enterprise.Organization.Create(newOrganization1);
var createdOrganization2 = await _github.Enterprise.Organization.Create(newOrganization2);
var createdOrganization3 = await _github.Enterprise.Organization.Create(newOrganization3);
var createdOrganization1 = await github.Enterprise.Organization.Create(newOrganization1);
var createdOrganization2 = await github.Enterprise.Organization.Create(newOrganization2);
var createdOrganization3 = await github.Enterprise.Organization.Create(newOrganization3);

var requestParameter = new OrganizationRequest(createdOrganization1.Id);

var organizations = await _organizationsClient.GetAll(requestParameter);
var organizations = await organizationsClient.GetAll(requestParameter);

Assert.DoesNotContain(organizations, (org => org.Login == orgLogin1));
Assert.Contains(organizations, (org => org.Login == orgLogin2));
Assert.Contains(organizations, (org => org.Login == orgLogin3));
}
}

public class TheGetMethod
{
[IntegrationTest]
[PotentiallyFlakyTest]
public async Task GetFreeOrganization()
{
var github = Helper.GetAuthenticatedClient();

var organization = await
github.Organization.Get("snyrting6orggithub");

Assert.Equal(0, organization.Plan.Seats);
Assert.Equal(1, organization.Plan.FilledSeats);
}
}

public class TheGetAllForCurrentMethod
{
readonly IGitHubClient _github;
Expand Down
31 changes: 20 additions & 11 deletions Octokit/Models/Response/Plan.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
using Octokit.Internal;
using System.Diagnostics;
using System.Globalization;

namespace Octokit
{
Expand All @@ -11,46 +11,55 @@ public class Plan
{
public Plan() { }

public Plan(long collaborators, string name, long privateRepos, long space, string billingEmail)
public Plan(long collaborators, string name, long privateRepos, long space, string billingEmail, int filledSeats, int seats)
{
Collaborators = collaborators;
Name = name;
PrivateRepos = privateRepos;
Space = space;
BillingEmail = billingEmail;
FilledSeats = filledSeats;
Seats = seats;
}

/// <summary>
/// The number of collaborators allowed with this plan.
/// </summary>
/// <remarks>This returns <see cref="long"/> because GitHub Enterprise uses a sentinel value of 999999999999 to denote an "unlimited" number of collaborators.</remarks>
public long Collaborators { get; protected set; }
public long Collaborators { get; private set; }

/// <summary>
/// The name of the plan.
/// </summary>
public string Name { get; protected set; }
public string Name { get; private set; }

/// <summary>
/// The number of private repositories allowed with this plan.
/// </summary>
/// <remarks>This returns <see cref="long"/> because GitHub Enterprise uses a sentinel value of 999999999999 to denote an "unlimited" number of plans.</remarks>
public long PrivateRepos { get; protected set; }
public long PrivateRepos { get; private set; }

/// <summary>
/// The amount of disk space allowed with this plan.
/// </summary>
/// <remarks>This returns <see cref="long"/> because GitHub Enterprise uses a sentinel value of 999999999999 to denote an "unlimited" amount of disk space.</remarks>
public long Space { get; protected set; }
public long Space { get; private set; }

/// <summary>
/// The billing email for the organization. Only has a value in response to editing an organization.
/// </summary>
public string BillingEmail { get; protected set; }
public string BillingEmail { get; private set; }

internal string DebuggerDisplay
{
get { return string.Format(CultureInfo.InvariantCulture, "Name: {0}, Space: {1}, Private Repos: {2}, Collaborators: {3}", Name, Space, PrivateRepos, Collaborators); }
}
/// <summary>
/// The number of seats filled on this plan
/// </summary>
public int FilledSeats { get; private set; }

/// <summary>
/// The number of seats available for this plan
/// </summary>
public int Seats { get; private set; }

internal string DebuggerDisplay => new SimpleJsonSerializer().Serialize(this);
}
}

0 comments on commit b866d66

Please sign in to comment.