From 4e445093f781af08e6cc6c1e592d78fa8387da42 Mon Sep 17 00:00:00 2001 From: Haacked Date: Sun, 6 Oct 2013 22:26:09 -0700 Subject: [PATCH] Implement Miscellaneous Client emoji and markdown --- ...nt.cs => ObservableMiscellaneousClient.cs} | 7 ++-- Octokit.Reactive/IObservableGitHubClient.cs | 2 +- ...t.cs => IObservableMiscellaneousClient.cs} | 2 +- Octokit.Reactive/ObservableGitHubClient.cs | 4 +- Octokit.Reactive/Octokit.Reactive.csproj | 4 +- .../AutoCompleteClientTests.cs | 24 ----------- .../MiscellaneousClientTests.cs | 40 +++++++++++++++++++ .../Octokit.Tests.Integration.csproj | 2 +- ...ntTests.cs => MiscellaneousClientTests.cs} | 40 ++++++++++++++++--- Octokit.Tests/Octokit.Tests.csproj | 2 +- Octokit.Tests/OctokitRT.Tests.csproj | 3 +- ...mpleteClient.cs => MiscellaneousClient.cs} | 18 +++++---- Octokit/GitHubClient.cs | 4 +- Octokit/IGitHubClient.cs | 2 +- ...pleteClient.cs => IMiscellaneousClient.cs} | 6 +-- Octokit/Octokit.csproj | 4 +- Octokit/OctokitRT.csproj | 4 +- 17 files changed, 108 insertions(+), 60 deletions(-) rename Octokit.Reactive/Clients/{ObservableAutoCompleteClient.cs => ObservableMiscellaneousClient.cs} (61%) rename Octokit.Reactive/{IObservableAutoCompleteClient.cs => IObservableMiscellaneousClient.cs} (86%) delete mode 100644 Octokit.Tests.Integration/AutoCompleteClientTests.cs create mode 100644 Octokit.Tests.Integration/MiscellaneousClientTests.cs rename Octokit.Tests/Clients/{AutoCompleteClientTests.cs => MiscellaneousClientTests.cs} (50%) rename Octokit/Clients/{AutoCompleteClient.cs => MiscellaneousClient.cs} (64%) rename Octokit/{IAutoCompleteClient.cs => IMiscellaneousClient.cs} (69%) diff --git a/Octokit.Reactive/Clients/ObservableAutoCompleteClient.cs b/Octokit.Reactive/Clients/ObservableMiscellaneousClient.cs similarity index 61% rename from Octokit.Reactive/Clients/ObservableAutoCompleteClient.cs rename to Octokit.Reactive/Clients/ObservableMiscellaneousClient.cs index b5928e70..b9239f53 100644 --- a/Octokit.Reactive/Clients/ObservableAutoCompleteClient.cs +++ b/Octokit.Reactive/Clients/ObservableMiscellaneousClient.cs @@ -1,14 +1,13 @@ using System; -using System.Collections.Generic; using System.Reactive.Threading.Tasks; namespace Octokit.Reactive.Clients { - public class ObservableAutoCompleteClient : IObservableAutoCompleteClient + public class ObservableMiscellaneousClient : IObservableMiscellaneousClient { - readonly IAutoCompleteClient _client; + readonly IMiscellaneousClient _client; - public ObservableAutoCompleteClient(IAutoCompleteClient client) + public ObservableMiscellaneousClient(IMiscellaneousClient client) { Ensure.ArgumentNotNull(client, "client"); diff --git a/Octokit.Reactive/IObservableGitHubClient.cs b/Octokit.Reactive/IObservableGitHubClient.cs index eeb032cd..9fee46ed 100644 --- a/Octokit.Reactive/IObservableGitHubClient.cs +++ b/Octokit.Reactive/IObservableGitHubClient.cs @@ -3,7 +3,7 @@ public interface IObservableGitHubClient { IObservableAuthorizationsClient Authorization { get; } - IObservableAutoCompleteClient AutoComplete { get; } + IObservableMiscellaneousClient Miscellaneous { get; } IObservableOrganizationsClient Organization { get; } IObservableRepositoriesClient Repository { get; } IObservableSshKeysClient SshKey { get; } diff --git a/Octokit.Reactive/IObservableAutoCompleteClient.cs b/Octokit.Reactive/IObservableMiscellaneousClient.cs similarity index 86% rename from Octokit.Reactive/IObservableAutoCompleteClient.cs rename to Octokit.Reactive/IObservableMiscellaneousClient.cs index 415c5989..0c33d502 100644 --- a/Octokit.Reactive/IObservableAutoCompleteClient.cs +++ b/Octokit.Reactive/IObservableMiscellaneousClient.cs @@ -4,7 +4,7 @@ using System.Diagnostics.CodeAnalysis; namespace Octokit.Reactive { - public interface IObservableAutoCompleteClient + public interface IObservableMiscellaneousClient { [SuppressMessage("Microsoft.Design", "CA1024:UsePropertiesWhereAppropriate", Justification = "Makes a network request")] diff --git a/Octokit.Reactive/ObservableGitHubClient.cs b/Octokit.Reactive/ObservableGitHubClient.cs index 3ec62733..2862ae0f 100644 --- a/Octokit.Reactive/ObservableGitHubClient.cs +++ b/Octokit.Reactive/ObservableGitHubClient.cs @@ -9,7 +9,7 @@ namespace Octokit.Reactive Ensure.ArgumentNotNull(gitHubClient, "githubClient"); Authorization = new ObservableAuthorizationsClient(gitHubClient.Authorization); - AutoComplete = new ObservableAutoCompleteClient(gitHubClient.AutoComplete); + Miscellaneous = new ObservableMiscellaneousClient(gitHubClient.Miscellaneous); Organization = new ObservableOrganizationsClient(gitHubClient.Organization); Repository = new ObservableRepositoriesClient(gitHubClient.Repository); SshKey = new ObservableSshKeysClient(gitHubClient.SshKey); @@ -17,7 +17,7 @@ namespace Octokit.Reactive } public IObservableAuthorizationsClient Authorization { get; private set; } - public IObservableAutoCompleteClient AutoComplete { get; private set; } + public IObservableMiscellaneousClient Miscellaneous { get; private set; } public IObservableOrganizationsClient Organization { get; private set; } public IObservableRepositoriesClient Repository { get; private set; } public IObservableSshKeysClient SshKey { get; private set; } diff --git a/Octokit.Reactive/Octokit.Reactive.csproj b/Octokit.Reactive/Octokit.Reactive.csproj index e69fbcb0..069a6a8e 100644 --- a/Octokit.Reactive/Octokit.Reactive.csproj +++ b/Octokit.Reactive/Octokit.Reactive.csproj @@ -83,14 +83,14 @@ Helpers\Ensure.cs - + - + diff --git a/Octokit.Tests.Integration/AutoCompleteClientTests.cs b/Octokit.Tests.Integration/AutoCompleteClientTests.cs deleted file mode 100644 index 23d35905..00000000 --- a/Octokit.Tests.Integration/AutoCompleteClientTests.cs +++ /dev/null @@ -1,24 +0,0 @@ -using System.Threading.Tasks; -using Xunit; - -namespace Octokit.Tests.Integration -{ - public class AutoCompleteClientTests - { - public class TheGetEmojisMethod - { - [IntegrationTest] - public async Task GetsAllTheEmojis() - { - var github = new GitHubClient("Octokit Test Runner") - { - Credentials = AutomationSettings.Current.GitHubCredentials - }; - - var emojis = await github.AutoComplete.GetEmojis(); - - Assert.True(emojis.Count > 1); - } - } - } -} diff --git a/Octokit.Tests.Integration/MiscellaneousClientTests.cs b/Octokit.Tests.Integration/MiscellaneousClientTests.cs new file mode 100644 index 00000000..932917d7 --- /dev/null +++ b/Octokit.Tests.Integration/MiscellaneousClientTests.cs @@ -0,0 +1,40 @@ +using System.Threading.Tasks; +using Xunit; + +namespace Octokit.Tests.Integration +{ + public class MiscellaneousClientTests + { + public class TheGetEmojisMethod + { + [IntegrationTest] + public async Task GetsAllTheEmojis() + { + var github = new GitHubClient("Octokit Test Runner") + { + Credentials = AutomationSettings.Current.GitHubCredentials + }; + + var emojis = await github.Miscellaneous.GetEmojis(); + + Assert.True(emojis.Count > 1); + } + } + + public class TheRenderRawMarkdownMethod + { + [IntegrationTest] + public async Task CanRenderGitHubFlavoredMarkdown() + { + var github = new GitHubClient("Test Runner User Agent") + { + Credentials = AutomationSettings.Current.GitHubCredentials + }; + + var result = await github.Miscellaneous.RenderRawMarkdown("This is a **test**"); + + Assert.Equal("

This is a test

", result); + } + } + } +} diff --git a/Octokit.Tests.Integration/Octokit.Tests.Integration.csproj b/Octokit.Tests.Integration/Octokit.Tests.Integration.csproj index 2e2ddae2..b93222e0 100644 --- a/Octokit.Tests.Integration/Octokit.Tests.Integration.csproj +++ b/Octokit.Tests.Integration/Octokit.Tests.Integration.csproj @@ -46,9 +46,9 @@ - + diff --git a/Octokit.Tests/Clients/AutoCompleteClientTests.cs b/Octokit.Tests/Clients/MiscellaneousClientTests.cs similarity index 50% rename from Octokit.Tests/Clients/AutoCompleteClientTests.cs rename to Octokit.Tests/Clients/MiscellaneousClientTests.cs index 2492e141..835113f0 100644 --- a/Octokit.Tests/Clients/AutoCompleteClientTests.cs +++ b/Octokit.Tests/Clients/MiscellaneousClientTests.cs @@ -8,14 +8,33 @@ using Xunit; namespace Octokit.Tests.Clients { - public class AutoCompleteClientTests + public class MiscellaneousClientTests { - public class TheCtor + public class TheRenderRawMarkdownMethod { [Fact] - public void EnsuresArgumentsNotNull() + public async Task RequestsTheEmojiEndpoint() { - Assert.Throws(() => new AutoCompleteClient(null)); + var links = new Dictionary(); + var scopes = new List(); + IResponse response = new ApiResponse + { + ApiInfo = new ApiInfo(links, scopes, scopes, "", 1, 1), + Body = "Test" + }; + var connection = Substitute.For(); + connection.PostAsync(Args.Uri, "**Test**", "text/plain", "text/html") + .Returns(Task.FromResult(response)); + var client = new MiscellaneousClient(connection); + + var html = await client.RenderRawMarkdown("**Test**"); + + Assert.Equal("Test", html); + connection.Received() + .PostAsync(Arg.Is(u => u.ToString() == "/markdown/raw"), + "**Test**", + "text/plain", + "text/html"); } } @@ -37,14 +56,23 @@ namespace Octokit.Tests.Clients }; var connection = Substitute.For(); connection.GetAsync>(Args.Uri, null).Returns(Task.FromResult(response)); - var autoComplete = new AutoCompleteClient(connection); + var client = new MiscellaneousClient(connection); - var emojis = await autoComplete.GetEmojis(); + var emojis = await client.GetEmojis(); Assert.Equal(2, emojis.Count); connection.Received() .GetAsync>(Arg.Is(u => u.ToString() == "/emojis"), null); } } + + public class TheCtor + { + [Fact] + public void EnsuresArgumentsNotNull() + { + Assert.Throws(() => new MiscellaneousClient(null)); + } + } } } diff --git a/Octokit.Tests/Octokit.Tests.csproj b/Octokit.Tests/Octokit.Tests.csproj index 235256d6..378a5f6d 100644 --- a/Octokit.Tests/Octokit.Tests.csproj +++ b/Octokit.Tests/Octokit.Tests.csproj @@ -57,7 +57,7 @@ - + diff --git a/Octokit.Tests/OctokitRT.Tests.csproj b/Octokit.Tests/OctokitRT.Tests.csproj index fcf5d4f5..b8c80011 100644 --- a/Octokit.Tests/OctokitRT.Tests.csproj +++ b/Octokit.Tests/OctokitRT.Tests.csproj @@ -51,12 +51,13 @@ + + - diff --git a/Octokit/Clients/AutoCompleteClient.cs b/Octokit/Clients/MiscellaneousClient.cs similarity index 64% rename from Octokit/Clients/AutoCompleteClient.cs rename to Octokit/Clients/MiscellaneousClient.cs index 0b5430a7..41bda033 100644 --- a/Octokit/Clients/AutoCompleteClient.cs +++ b/Octokit/Clients/MiscellaneousClient.cs @@ -1,23 +1,20 @@ using System; +using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; -using System.Collections.Generic; using System.Threading.Tasks; using Octokit.Http; namespace Octokit.Clients { - /// - /// Calls API methods meant to support auto complete. - /// - public class AutoCompleteClient : IAutoCompleteClient + public class MiscellaneousClient : IMiscellaneousClient { readonly IConnection _connection; - public AutoCompleteClient(IConnection connection) + public MiscellaneousClient(IConnection connection) { Ensure.ArgumentNotNull(connection, "connection"); - + _connection = connection; } @@ -28,5 +25,12 @@ namespace Octokit.Clients return new ReadOnlyDictionary( response.BodyAsObject.ToDictionary(kvp => kvp.Key, kvp => new Uri(kvp.Value))); } + + public async Task RenderRawMarkdown(string markdown) + { + var endpoint = new Uri("/markdown/raw", UriKind.Relative); + var response = await _connection.PostAsync(endpoint, markdown, "text/plain", "text/html"); + return response.Body; + } } } diff --git a/Octokit/GitHubClient.cs b/Octokit/GitHubClient.cs index 6dc239c8..081c2194 100644 --- a/Octokit/GitHubClient.cs +++ b/Octokit/GitHubClient.cs @@ -36,7 +36,7 @@ namespace Octokit Connection = connection; Authorization = new AuthorizationsClient(new ApiConnection(connection)); - AutoComplete = new AutoCompleteClient(connection); + Miscellaneous = new MiscellaneousClient(connection); Organization = new OrganizationsClient(new ApiConnection(connection)); Repository = new RepositoriesClient(new ApiConnection(connection)); Release = new ReleasesClient(new ApiConnection(connection)); @@ -77,7 +77,7 @@ namespace Octokit public IConnection Connection { get; private set; } public IAuthorizationsClient Authorization { get; private set; } - public IAutoCompleteClient AutoComplete { get; private set; } + public IMiscellaneousClient Miscellaneous { get; private set; } public IOrganizationsClient Organization { get; private set; } public IRepositoriesClient Repository { get; private set; } public IReleasesClient Release { get; private set; } diff --git a/Octokit/IGitHubClient.cs b/Octokit/IGitHubClient.cs index c6b0266f..6b6a72ad 100644 --- a/Octokit/IGitHubClient.cs +++ b/Octokit/IGitHubClient.cs @@ -7,7 +7,7 @@ namespace Octokit IConnection Connection { get; } IAuthorizationsClient Authorization { get; } - IAutoCompleteClient AutoComplete { get; } + IMiscellaneousClient Miscellaneous { get; } IOrganizationsClient Organization { get; } IRepositoriesClient Repository { get; } IReleasesClient Release { get; } diff --git a/Octokit/IAutoCompleteClient.cs b/Octokit/IMiscellaneousClient.cs similarity index 69% rename from Octokit/IAutoCompleteClient.cs rename to Octokit/IMiscellaneousClient.cs index 0e26c259..5b5e2f4b 100644 --- a/Octokit/IAutoCompleteClient.cs +++ b/Octokit/IMiscellaneousClient.cs @@ -5,10 +5,10 @@ using System.Threading.Tasks; namespace Octokit { - public interface IAutoCompleteClient + public interface IMiscellaneousClient { - [SuppressMessage("Microsoft.Design", "CA1024:UsePropertiesWhereAppropriate", - Justification = "Makes a network request")] + [SuppressMessage("Microsoft.Design", "CA1024:UsePropertiesWhereAppropriate")] Task> GetEmojis(); + Task RenderRawMarkdown(string markdown); } } diff --git a/Octokit/Octokit.csproj b/Octokit/Octokit.csproj index b020b53e..d4227ada 100644 --- a/Octokit/Octokit.csproj +++ b/Octokit/Octokit.csproj @@ -77,12 +77,12 @@ + - @@ -105,8 +105,8 @@ - + diff --git a/Octokit/OctokitRT.csproj b/Octokit/OctokitRT.csproj index c5a4e8c3..04512f3a 100644 --- a/Octokit/OctokitRT.csproj +++ b/Octokit/OctokitRT.csproj @@ -108,7 +108,7 @@ - + @@ -132,8 +132,8 @@ - +