diff --git a/Octokit.Reactive/Clients/ObservableRepositoriesClient.cs b/Octokit.Reactive/Clients/ObservableRepositoriesClient.cs index 1511259c..a4a40cff 100644 --- a/Octokit.Reactive/Clients/ObservableRepositoriesClient.cs +++ b/Octokit.Reactive/Clients/ObservableRepositoriesClient.cs @@ -63,5 +63,13 @@ namespace Octokit.Reactive.Clients return _client.GetReadme(owner, name).ToObservable(); } + + public IObservable GetReadmeHtml(string owner, string name) + { + Ensure.ArgumentNotNullOrEmptyString(owner, "owner"); + Ensure.ArgumentNotNullOrEmptyString(name, "name"); + + return _client.GetReadmeHtml(owner, name).ToObservable(); + } } } diff --git a/Octokit.Reactive/IObservableRepositoriesClient.cs b/Octokit.Reactive/IObservableRepositoriesClient.cs index 2dc6bb33..76482d25 100644 --- a/Octokit.Reactive/IObservableRepositoriesClient.cs +++ b/Octokit.Reactive/IObservableRepositoriesClient.cs @@ -62,5 +62,14 @@ namespace Octokit.Reactive /// The owner of the repository. /// The name of the repository. /// - IObservable GetReadme(string owner, string name); } + IObservable GetReadme(string owner, string name); + + /// + /// Returns just the HTML portion of the README without the surrounding HTML document. + /// + /// The owner of the repository. + /// The name of the repository. + /// + IObservable GetReadmeHtml(string owner, string name); + } } diff --git a/Octokit.Reactive/ObservableExtensions.cs b/Octokit.Reactive/ObservableExtensions.cs deleted file mode 100644 index bc2e582a..00000000 --- a/Octokit.Reactive/ObservableExtensions.cs +++ /dev/null @@ -1,20 +0,0 @@ -using System; -using System.Reactive.Linq; -using System.Reactive.Threading.Tasks; - -namespace Octokit.Reactive -{ - public static class ObservableExtensions - { - public static IObservable GetReadmeAsHtml(this IObservableRepositoriesClient client, - string owner, - string name) - { - Ensure.ArgumentNotNull(client, "client"); - Ensure.ArgumentNotNullOrEmptyString(owner, "owner"); - Ensure.ArgumentNotNullOrEmptyString(name, "name"); - - return client.GetReadme(owner, name).SelectMany(r => r.GetHtmlContent().ToObservable()); - } - } -} diff --git a/Octokit.Reactive/Octokit.Reactive.csproj b/Octokit.Reactive/Octokit.Reactive.csproj index 069a6a8e..10141099 100644 --- a/Octokit.Reactive/Octokit.Reactive.csproj +++ b/Octokit.Reactive/Octokit.Reactive.csproj @@ -97,7 +97,6 @@ - diff --git a/Octokit.Tests.Integration/RepositoriesClientTests.cs b/Octokit.Tests.Integration/RepositoriesClientTests.cs index 0af2769e..2246ef19 100644 --- a/Octokit.Tests.Integration/RepositoriesClientTests.cs +++ b/Octokit.Tests.Integration/RepositoriesClientTests.cs @@ -251,7 +251,7 @@ namespace Octokit.Tests.Integration public class TheGetReadmeMethod { [IntegrationTest] - public async Task ReturnsReadmeForOctokit() + public async Task ReturnsReadmeForSeeGit() { var github = new GitHubClient("Octokit Test Runner") { @@ -265,6 +265,20 @@ namespace Octokit.Tests.Integration Assert.Contains(@"
WARNING: This is some haacky code.", readMeHtml); } + + [IntegrationTest] + public async Task ReturnsReadmeHtmlForSeeGit() + { + var github = new GitHubClient("Octokit Test Runner") + { + Credentials = AutomationSettings.Current.GitHubCredentials + }; + + // TODO: Change this to request github/Octokit.net once we make this OSS. + var readmeHtml = await github.Repository.GetReadmeHtml("haacked", "seegit"); + Assert.True(readmeHtml.StartsWith("
WARNING: This is some haacky code.", readmeHtml); + } } } } diff --git a/Octokit.Tests/Clients/RepositoriesClientTests.cs b/Octokit.Tests/Clients/RepositoriesClientTests.cs index 123ca720..b500981b 100644 --- a/Octokit.Tests/Clients/RepositoriesClientTests.cs +++ b/Octokit.Tests/Clients/RepositoriesClientTests.cs @@ -173,5 +173,21 @@ namespace Octokit.Tests.Clients client.Received().GetHtml(Arg.Is(u => u.ToString() == "https://github.example.com/readme"), null); } } + + public class TheGetReadmeHtmlMethod + { + [Fact] + public async Task ReturnsReadmeHtml() + { + var client = Substitute.For>(); + client.GetHtml(Args.Uri, null).Returns(Task.FromResult("README")); + var reposEndpoint = new RepositoriesClient(client); + + var readme = await reposEndpoint.GetReadmeHtml("fake", "repo"); + + client.Received().GetHtml(Arg.Is(u => u.ToString() == "/repos/fake/repo/readme"), null); + Assert.Equal("README", readme); + } + } } } diff --git a/Octokit/Clients/RepositoriesClient.cs b/Octokit/Clients/RepositoriesClient.cs index 80accb1a..5f790486 100644 --- a/Octokit/Clients/RepositoriesClient.cs +++ b/Octokit/Clients/RepositoriesClient.cs @@ -70,5 +70,14 @@ namespace Octokit var readmeInfo = await Client.GetItem(endpoint, null); return new Readme(readmeInfo, Client); } + + public async Task GetReadmeHtml(string owner, string name) + { + Ensure.ArgumentNotNullOrEmptyString(owner, "owner"); + Ensure.ArgumentNotNullOrEmptyString(name, "name"); + + var endpoint = "/repos/{0}/{1}/readme".FormatUri(owner, name); + return await Client.GetHtml(endpoint, null); + } } } diff --git a/Octokit/IRepositoriesClient.cs b/Octokit/IRepositoriesClient.cs index e6028c21..2d4929f0 100644 --- a/Octokit/IRepositoriesClient.cs +++ b/Octokit/IRepositoriesClient.cs @@ -58,11 +58,19 @@ namespace Octokit Task> GetAllForOrg(string organization); /// - /// Returns the HTML rendered README. + /// Returns the associated with the specified repository. /// /// The owner of the repository. /// The name of the repository. /// Task GetReadme(string owner, string name); + + /// + /// Returns just the HTML portion of the README without the surrounding HTML document. + /// + /// The owner of the repository. + /// The name of the repository. + /// + Task GetReadmeHtml(string owner, string name); } }