Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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);
}
}