From df9ffd9b0d0f53f363056a3ee39f5084b7b2524e Mon Sep 17 00:00:00 2001 From: Henrik Andersson Date: Sun, 5 Jun 2016 21:29:49 +1000 Subject: [PATCH] Add unit and integration tests for ObservableUserGpgKeysClient --- .../Clients/UserGpgKeysClientTests.cs | 1 - .../ObservableGithubClientExtensions.cs | 28 ++++++ .../Octokit.Tests.Integration.csproj | 1 + .../ObservableUserGpgKeysClientTests.cs | 95 +++++++++++++++++++ Octokit.Tests/Octokit.Tests.csproj | 1 + .../ObservableUserGpgKeysClientTests.cs | 79 +++++++++++++++ 6 files changed, 204 insertions(+), 1 deletion(-) create mode 100644 Octokit.Tests.Integration/Reactive/ObservableUserGpgKeysClientTests.cs create mode 100644 Octokit.Tests/Reactive/ObservableUserGpgKeysClientTests.cs diff --git a/Octokit.Tests.Integration/Clients/UserGpgKeysClientTests.cs b/Octokit.Tests.Integration/Clients/UserGpgKeysClientTests.cs index f1929798..60ab3e1e 100644 --- a/Octokit.Tests.Integration/Clients/UserGpgKeysClientTests.cs +++ b/Octokit.Tests.Integration/Clients/UserGpgKeysClientTests.cs @@ -10,7 +10,6 @@ namespace Octokit.Tests.Integration.Clients { public class UserGpgKeysClientTests { - // Create a key readonly string knownKeyId = "E88402D2E127A23A"; readonly string knownPublicKey = "xsBNBFdTvCUBCADOaVtPoJTQOgMIVYEpI8uT60LA/kDqw/1OKn7ftKjAtxNVSgjQi/ZqZp8XKjTg2u6l4c/aPjER2BGTg90xCcbmpwq/kkQuHR4DK7dOlEOoTzDDESEFv6XXlXGCnxN8AD8YNvSO+Sy4+35ihuKUBAHDxmOl7ZAMH0STo10KuW82/DhfT3cCJNqmID7H+CW1H6IhwutPKt8XsVq2FQg2RMx+uX1KqkuBAd7b30KJ93SJqzgq5CC3DticaC0/WdZnxmYD01UvMAS6o/REs+SICdsyTxgBx/X8SIXuX2TD9PG/O2785JI5/xvBd4jU6bBH/4oWoHr3e/lyNqb1+GSeTFX3ABEBAAE="; diff --git a/Octokit.Tests.Integration/Helpers/ObservableGithubClientExtensions.cs b/Octokit.Tests.Integration/Helpers/ObservableGithubClientExtensions.cs index 12ab85f2..0d2dcf4e 100644 --- a/Octokit.Tests.Integration/Helpers/ObservableGithubClientExtensions.cs +++ b/Octokit.Tests.Integration/Helpers/ObservableGithubClientExtensions.cs @@ -52,5 +52,33 @@ namespace Octokit.Tests.Integration.Helpers return new PublicKeyContext(client.Connection, key); } + + internal static async Task CreateGpgKeyContext(this IObservableGitHubClient client) + { + // Create a key + string publicKey = @" +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: BCPG C# v1.6.1.0 + +mQENBFdTvCUBCADOaVtPoJTQOgMIVYEpI8uT60LA/kDqw/1OKn7ftKjAtxNVSgjQ +i/ZqZp8XKjTg2u6l4c/aPjER2BGTg90xCcbmpwq/kkQuHR4DK7dOlEOoTzDDESEF +v6XXlXGCnxN8AD8YNvSO+Sy4+35ihuKUBAHDxmOl7ZAMH0STo10KuW82/DhfT3cC +JNqmID7H+CW1H6IhwutPKt8XsVq2FQg2RMx+uX1KqkuBAd7b30KJ93SJqzgq5CC3 +DticaC0/WdZnxmYD01UvMAS6o/REs+SICdsyTxgBx/X8SIXuX2TD9PG/O2785JI5 +/xvBd4jU6bBH/4oWoHr3e/lyNqb1+GSeTFX3ABEBAAG0AIkBHAQQAQIABgUCV1O8 +JQAKCRDohALS4SeiOs/QB/9PMeFNdPkB1xfBm3qvTErqvhTcQspPibucYefG6JHL +vhm6iCOVBeCuPS4P/T8RTzb0qJaTdZZWcwZ9UjRVqF/RKwdMJTBKBHRegc5hRjLH +Koxk0zXosk+CapIR6eVhHe4IzpVVxZOvunsFOclIh+qHx9UzJhz9wSO/XBn/6Rzr +DGzE9fpK1JRKC0I3PuiDCNuZvojXeUsT/zuHYsz00wnA2Em7CmcWWng3nPUSHvBB +GUJ7YE7NvYXqT09PdhoZnf9p1wOugiuG6CLzWf8stlNV3mZptpP+sCGcz/UVffRO +VO/+BCBsaoT4g1FFOmJhbBAD3G72yslBnUJmqKP/39pi +=O7Yi +-----END PGP PUBLIC KEY BLOCK----- +"; + + var key = await client.User.GpgKeys.Create(new NewGpgKey(publicKey)); + + return new GpgKeyContext(key); + } } } \ No newline at end of file diff --git a/Octokit.Tests.Integration/Octokit.Tests.Integration.csproj b/Octokit.Tests.Integration/Octokit.Tests.Integration.csproj index 366d5b28..6748e034 100644 --- a/Octokit.Tests.Integration/Octokit.Tests.Integration.csproj +++ b/Octokit.Tests.Integration/Octokit.Tests.Integration.csproj @@ -168,6 +168,7 @@ + diff --git a/Octokit.Tests.Integration/Reactive/ObservableUserGpgKeysClientTests.cs b/Octokit.Tests.Integration/Reactive/ObservableUserGpgKeysClientTests.cs new file mode 100644 index 00000000..c24d756d --- /dev/null +++ b/Octokit.Tests.Integration/Reactive/ObservableUserGpgKeysClientTests.cs @@ -0,0 +1,95 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reactive.Linq; +using System.Text; +using System.Threading.Tasks; +using Octokit.Reactive; +using Octokit.Tests.Integration.Helpers; +using Xunit; + +namespace Octokit.Tests.Integration.Reactive +{ + public class ObservableUserGpgKeysClientTests + { + readonly string knownKeyId = "E88402D2E127A23A"; + readonly string knownPublicKey = "xsBNBFdTvCUBCADOaVtPoJTQOgMIVYEpI8uT60LA/kDqw/1OKn7ftKjAtxNVSgjQi/ZqZp8XKjTg2u6l4c/aPjER2BGTg90xCcbmpwq/kkQuHR4DK7dOlEOoTzDDESEFv6XXlXGCnxN8AD8YNvSO+Sy4+35ihuKUBAHDxmOl7ZAMH0STo10KuW82/DhfT3cCJNqmID7H+CW1H6IhwutPKt8XsVq2FQg2RMx+uX1KqkuBAd7b30KJ93SJqzgq5CC3DticaC0/WdZnxmYD01UvMAS6o/REs+SICdsyTxgBx/X8SIXuX2TD9PG/O2785JI5/xvBd4jU6bBH/4oWoHr3e/lyNqb1+GSeTFX3ABEBAAE="; + + readonly IObservableGitHubClient _gitHubClient; + + public ObservableUserGpgKeysClientTests() + { + _gitHubClient = new ObservableGitHubClient(Helper.GetBasicAuthClient()); + } + + [IntegrationTest] + public async Task CanGetAllForCurrentUser() + { + using (var context = _gitHubClient.CreateGpgKeyContext()) + { + var observable = _gitHubClient.User.GpgKeys.GetAllForCurrent(); + var keys = await observable.ToList(); + + Assert.NotEmpty(keys); + + var first = keys[0]; + Assert.NotNull(first.Id); + Assert.Null(first.PrimaryKeyId); + Assert.NotNull(first.KeyId); + Assert.NotNull(first.PublicKey); + Assert.Empty(first.Subkeys); + } + } + + [IntegrationTest] + public async Task CanGetKeyById() + { + using (var context = await _gitHubClient.CreateGpgKeyContext()) + { + var observable = _gitHubClient.User.GpgKeys.Get(context.GpgKeyId); + var key = await observable; + + Assert.Equal(knownKeyId, key.KeyId); + Assert.Equal(knownPublicKey, key.PublicKey); + } + } + + [IntegrationTest] + public async Task CanCreateAndDeleteKey() + { + string publicKey = @" +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: BCPG C# v1.6.1.0 + +mQENBFdTvCUBCADOaVtPoJTQOgMIVYEpI8uT60LA/kDqw/1OKn7ftKjAtxNVSgjQ +i/ZqZp8XKjTg2u6l4c/aPjER2BGTg90xCcbmpwq/kkQuHR4DK7dOlEOoTzDDESEF +v6XXlXGCnxN8AD8YNvSO+Sy4+35ihuKUBAHDxmOl7ZAMH0STo10KuW82/DhfT3cC +JNqmID7H+CW1H6IhwutPKt8XsVq2FQg2RMx+uX1KqkuBAd7b30KJ93SJqzgq5CC3 +DticaC0/WdZnxmYD01UvMAS6o/REs+SICdsyTxgBx/X8SIXuX2TD9PG/O2785JI5 +/xvBd4jU6bBH/4oWoHr3e/lyNqb1+GSeTFX3ABEBAAG0AIkBHAQQAQIABgUCV1O8 +JQAKCRDohALS4SeiOs/QB/9PMeFNdPkB1xfBm3qvTErqvhTcQspPibucYefG6JHL +vhm6iCOVBeCuPS4P/T8RTzb0qJaTdZZWcwZ9UjRVqF/RKwdMJTBKBHRegc5hRjLH +Koxk0zXosk+CapIR6eVhHe4IzpVVxZOvunsFOclIh+qHx9UzJhz9wSO/XBn/6Rzr +DGzE9fpK1JRKC0I3PuiDCNuZvojXeUsT/zuHYsz00wnA2Em7CmcWWng3nPUSHvBB +GUJ7YE7NvYXqT09PdhoZnf9p1wOugiuG6CLzWf8stlNV3mZptpP+sCGcz/UVffRO +VO/+BCBsaoT4g1FFOmJhbBAD3G72yslBnUJmqKP/39pi +=O7Yi +-----END PGP PUBLIC KEY BLOCK----- +"; + // Create a key + var observable = _gitHubClient.User.GpgKeys.Create(new NewGpgKey(publicKey)); + var key = await observable; + + Assert.NotNull(key); + Assert.Equal(knownKeyId, key.KeyId); + Assert.Equal(knownPublicKey, key.PublicKey); + + // Delete the key + await _gitHubClient.User.GpgKeys.Delete(key.Id); + + // Verify key no longer exists + var keys = await _gitHubClient.User.GpgKeys.GetAllForCurrent().ToList(); + Assert.False(keys.Any(k => k.KeyId == knownKeyId && k.PublicKey == knownPublicKey)); + } + } +} diff --git a/Octokit.Tests/Octokit.Tests.csproj b/Octokit.Tests/Octokit.Tests.csproj index ba9a8aad..ab7cfb98 100644 --- a/Octokit.Tests/Octokit.Tests.csproj +++ b/Octokit.Tests/Octokit.Tests.csproj @@ -238,6 +238,7 @@ + diff --git a/Octokit.Tests/Reactive/ObservableUserGpgKeysClientTests.cs b/Octokit.Tests/Reactive/ObservableUserGpgKeysClientTests.cs new file mode 100644 index 00000000..ca2cc0b6 --- /dev/null +++ b/Octokit.Tests/Reactive/ObservableUserGpgKeysClientTests.cs @@ -0,0 +1,79 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using NSubstitute; +using Octokit.Reactive; +using Xunit; + +namespace Octokit.Tests.Reactive +{ + public class ObservableUserGpgKeysClientTests + { + public class TheGetAllForCurrentMethod + { + [Fact] + public void CallsIntoClient() + { + var githubClient = Substitute.For(); + var client = new ObservableUserGpgKeysClient(githubClient); + + client.GetAllForCurrent(); + + githubClient.User.GpgKeys.Received().GetAllForCurrent(Arg.Any()); + } + } + + public class TheGetMethod + { + [Fact] + public void CallsIntoClient() + { + var githubClient = Substitute.For(); + var client = new ObservableUserGpgKeysClient(githubClient); + + client.Get(1); + + githubClient.User.GpgKeys.Received().Get(1); + } + } + + public class TheCreateMethod + { + [Fact] + public void CallsIntoClient() + { + var githubClient = Substitute.For(); + var client = new ObservableUserGpgKeysClient(githubClient); + + client.Create(new NewGpgKey("ABCDEFG")); + + githubClient.User.GpgKeys.Received().Create(Arg.Is(k => k.ArmoredPublicKey == "ABCDEFG")); + } + } + + public class TheDeleteMethod + { + [Fact] + public void CallsIntoClient() + { + var githubClient = Substitute.For(); + var client = new ObservableUserGpgKeysClient(githubClient); + + client.Delete(1); + + githubClient.User.GpgKeys.Received().Delete(1); + } + } + + public class TheCtor + { + [Fact] + public void EnsuresNonNullArguments() + { + Assert.Throws(() => new ObservableUserGpgKeysClient(null)); + } + } + } +}