-
Notifications
You must be signed in to change notification settings - Fork 1.1k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Begin implementation of Enterprise ManagementConsole API, redux (#2010)
* Initial implementation of ManagementConsole - maintenance mode * Add environment var support for management console password for integration tests * Add reactive client and unit tests * Update some xmlDoc * I think this is a better way to setup the underlying baseUri on IConneciton, to achieve managemet console access rather than requiring a specific GitHubClient that cant call normal API's Instead, the management client methods can check the base Url and if it contains /api/v3/ they can set their relative endpoint Uri to include a leading "/" which will cause the /api/v3/ to be removed. * Update EnterpriseClient.cs Fix xml comments * Update IEnterpriseClient.cs Fix xml comments * Still trying to get the xmDoc perfect, thanks app veyor :) * XmlDoc'ing my way to success * Add specific test attribute for management console tests * check chronic string empty/null * Use helper's password field in test * Tidy up maintenance mode tests by using a context/destructor to manage the initial/end state of maintenance mode * make internal and tidy up URL concatenation * move GHE endpoint fixup inside ApiUrls methods * Rework request object to be the correct structure so SimpleJsonSerializer can be used to serialize it. Remove MaintenanceDate class and just pass in the Date/string for when Still need to use UrlFormEncoding rather than json in the POST body though... * Create abstract base class for FormUrlEncoded parameters (similar to existing RequetParameters) and inherit from it in UpdateMaintenanceRequest * Fix maintenance context logic - destructor should always turn maintenance OFF regardless of initial requested state * Fix xml comment * Fix Xml comment * Those pesky xml comments! * Fine, I give up! * Fix string.Format * fix bad rebase * fix failing convention tests * restore missing whitespace * writing some docs * some edits * edit
- Loading branch information
Showing
37 changed files
with
965 additions
and
40 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
33 changes: 33 additions & 0 deletions
33
Octokit.Reactive/Clients/Enterprise/IObservableEnterpriseManagementConsoleClient.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
using System; | ||
using System.Diagnostics.CodeAnalysis; | ||
|
||
namespace Octokit.Reactive | ||
{ | ||
/// <summary> | ||
/// A client for GitHub's Enterprise Management Console API | ||
/// </summary> | ||
/// <remarks> | ||
/// See the <a href="https://developer.github.com/v3/enterprise/management_console/">Enterprise Management Console API documentation</a> for more information. | ||
/// </remarks> | ||
public interface IObservableEnterpriseManagementConsoleClient | ||
{ | ||
/// <summary> | ||
/// Gets GitHub Enterprise Maintenance Mode Status | ||
/// </summary> | ||
/// <remarks> | ||
/// https://developer.github.com/v3/enterprise/management_console/#check-maintenance-status | ||
/// </remarks> | ||
/// <returns>The <see cref="MaintenanceModeResponse"/>.</returns> | ||
[SuppressMessage("Microsoft.Design", "CA1024:UsePropertiesWhereAppropriate")] | ||
IObservable<MaintenanceModeResponse> GetMaintenanceMode(string managementConsolePassword); | ||
|
||
/// <summary> | ||
/// Sets GitHub Enterprise Maintenance Mode | ||
/// </summary> | ||
/// <remarks> | ||
/// https://developer.github.com/v3/enterprise/management_console/#check-maintenance-status | ||
/// </remarks> | ||
/// <returns>The <see cref="MaintenanceModeResponse"/>.</returns> | ||
IObservable<MaintenanceModeResponse> EditMaintenanceMode(UpdateMaintenanceRequest maintenance, string managementConsolePassword); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
52 changes: 52 additions & 0 deletions
52
Octokit.Reactive/Clients/Enterprise/ObservableEnterpriseManagementConsoleClient.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,52 @@ | ||
using System; | ||
using System.Reactive.Threading.Tasks; | ||
|
||
namespace Octokit.Reactive | ||
{ | ||
/// <summary> | ||
/// A client for GitHub's Enterprise Management Console API | ||
/// </summary> | ||
/// <remarks> | ||
/// See the <a href="https://developer.github.com/v3/enterprise/management_console/">Enterprise Management Console API documentation</a> for more information. | ||
/// </remarks> | ||
public class ObservableEnterpriseManagementConsoleClient : IObservableEnterpriseManagementConsoleClient | ||
{ | ||
readonly IEnterpriseManagementConsoleClient _client; | ||
|
||
public ObservableEnterpriseManagementConsoleClient(IGitHubClient client) | ||
{ | ||
Ensure.ArgumentNotNull(client, "client"); | ||
|
||
_client = client.Enterprise.ManagementConsole; | ||
} | ||
|
||
/// <summary> | ||
/// Gets GitHub Enterprise Maintenance Mode Status | ||
/// </summary> | ||
/// <remarks> | ||
/// https://developer.github.com/v3/enterprise/management_console/#check-maintenance-status | ||
/// </remarks> | ||
/// <returns>The <see cref="MaintenanceModeResponse"/>.</returns> | ||
public IObservable<MaintenanceModeResponse> GetMaintenanceMode(string managementConsolePassword) | ||
{ | ||
Ensure.ArgumentNotNullOrEmptyString(managementConsolePassword, "managementConsolePassword"); | ||
|
||
return _client.GetMaintenanceMode(managementConsolePassword).ToObservable(); | ||
} | ||
|
||
/// <summary> | ||
/// Sets GitHub Enterprise Maintenance Mode | ||
/// </summary> | ||
/// <remarks> | ||
/// https://developer.github.com/v3/enterprise/management_console/#check-maintenance-status | ||
/// </remarks> | ||
/// <returns>The <see cref="MaintenanceModeResponse"/>.</returns> | ||
public IObservable<MaintenanceModeResponse> EditMaintenanceMode(UpdateMaintenanceRequest maintenance, string managementConsolePassword) | ||
{ | ||
Ensure.ArgumentNotNull(maintenance, "maintenance"); | ||
Ensure.ArgumentNotNullOrEmptyString(managementConsolePassword, "managementConsolePassword"); | ||
|
||
return _client.EditMaintenanceMode(maintenance, managementConsolePassword).ToObservable(); | ||
} | ||
} | ||
} |
88 changes: 88 additions & 0 deletions
88
Octokit.Tests.Integration/Clients/Enterprise/EnterpriseManagementConsoleClientTests.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,88 @@ | ||
using System; | ||
using System.Threading.Tasks; | ||
using Octokit; | ||
using Octokit.Tests.Integration; | ||
using Octokit.Tests.Integration.Helpers; | ||
using Xunit; | ||
|
||
public class EnterpriseManagementConsoleClientTests | ||
{ | ||
readonly IGitHubClient _github; | ||
|
||
public EnterpriseManagementConsoleClientTests() | ||
{ | ||
_github = EnterpriseHelper.GetAuthenticatedClient(); | ||
} | ||
|
||
[GitHubEnterpriseManagementConsoleTest] | ||
public async Task CanGetMaintenanceMode() | ||
{ | ||
var maintenance = await _github.Enterprise.ManagementConsole.GetMaintenanceMode(EnterpriseHelper.ManagementConsolePassword); | ||
|
||
Assert.NotNull(maintenance); | ||
} | ||
|
||
[GitHubEnterpriseManagementConsoleTest] | ||
public async Task CanSetMaintenanceModeOff() | ||
{ | ||
using (_github.CreateMaintenanceModeContext(true)) | ||
{ | ||
// Set maintenance mode OFF now | ||
var maintenance = await | ||
_github.Enterprise.ManagementConsole.EditMaintenanceMode( | ||
new UpdateMaintenanceRequest(), | ||
EnterpriseHelper.ManagementConsolePassword); | ||
|
||
Assert.Equal(maintenance.Status, MaintenanceModeStatus.Off); | ||
} | ||
} | ||
|
||
[GitHubEnterpriseManagementConsoleTest] | ||
public async Task CanSetMaintenanceModeOnNow() | ||
{ | ||
using (_github.CreateMaintenanceModeContext(false)) | ||
{ | ||
// Set maintenance mode ON now | ||
var maintenance = await | ||
_github.Enterprise.ManagementConsole.EditMaintenanceMode( | ||
new UpdateMaintenanceRequest( | ||
new UpdateMaintenanceRequestDetails(true)), | ||
EnterpriseHelper.ManagementConsolePassword); | ||
|
||
Assert.Equal(maintenance.Status, MaintenanceModeStatus.On); | ||
} | ||
} | ||
|
||
[GitHubEnterpriseManagementConsoleTest] | ||
public async Task CanScheduleMaintenanceModeOnWithDateTime() | ||
{ | ||
using (_github.CreateMaintenanceModeContext(false)) | ||
{ | ||
// Schedule maintenance mode ON in 5 minutes | ||
var scheduledTime = DateTimeOffset.Now.AddMinutes(5); | ||
var maintenance = await | ||
_github.Enterprise.ManagementConsole.EditMaintenanceMode( | ||
new UpdateMaintenanceRequest( | ||
new UpdateMaintenanceRequestDetails(true, scheduledTime)), | ||
EnterpriseHelper.ManagementConsolePassword); | ||
|
||
Assert.Equal(maintenance.Status, MaintenanceModeStatus.Scheduled); | ||
} | ||
} | ||
|
||
[GitHubEnterpriseManagementConsoleTest] | ||
public async Task CanScheduleMaintenanceModeOnWithPhrase() | ||
{ | ||
using (_github.CreateMaintenanceModeContext(false)) | ||
{ | ||
// Schedule maintenance mode ON with phrase | ||
var maintenance = await | ||
_github.Enterprise.ManagementConsole.EditMaintenanceMode( | ||
new UpdateMaintenanceRequest( | ||
new UpdateMaintenanceRequestDetails(true, "tomorrow at 5pm")), | ||
EnterpriseHelper.ManagementConsolePassword); | ||
|
||
Assert.Equal(maintenance.Status, MaintenanceModeStatus.Scheduled); | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
38 changes: 38 additions & 0 deletions
38
Octokit.Tests.Integration/Helpers/GitHubEnterpriseManagementConsoleTestAttribute.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,38 @@ | ||
using System; | ||
using System.Collections.Generic; | ||
using System.Linq; | ||
using Xunit; | ||
using Xunit.Abstractions; | ||
using Xunit.Sdk; | ||
|
||
namespace Octokit.Tests.Integration | ||
{ | ||
public class GitHubEnterpriseManagementConsoleTestDiscoverer : IXunitTestCaseDiscoverer | ||
{ | ||
readonly IMessageSink diagnosticMessageSink; | ||
|
||
public GitHubEnterpriseManagementConsoleTestDiscoverer(IMessageSink diagnosticMessageSink) | ||
{ | ||
this.diagnosticMessageSink = diagnosticMessageSink; | ||
} | ||
|
||
public IEnumerable<IXunitTestCase> Discover(ITestFrameworkDiscoveryOptions discoveryOptions, ITestMethod testMethod, IAttributeInfo factAttribute) | ||
{ | ||
if (Helper.Credentials == null) | ||
return Enumerable.Empty<IXunitTestCase>(); | ||
|
||
if (!EnterpriseHelper.IsGitHubEnterpriseEnabled) | ||
return Enumerable.Empty<IXunitTestCase>(); | ||
|
||
if (String.IsNullOrEmpty(EnterpriseHelper.ManagementConsolePassword)) | ||
return Enumerable.Empty<IXunitTestCase>(); | ||
|
||
return new[] { new XunitTestCase(diagnosticMessageSink, discoveryOptions.MethodDisplayOrDefault(), testMethod) }; | ||
} | ||
} | ||
|
||
[XunitTestCaseDiscoverer("Octokit.Tests.Integration.GitHubEnterpriseManagementConsoleTestDiscoverer", "Octokit.Tests.Integration")] | ||
public class GitHubEnterpriseManagementConsoleTestAttribute : FactAttribute | ||
{ | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.