diff --git a/Octokit.Tests/Clients/SearchClientTests.cs b/Octokit.Tests/Clients/SearchClientTests.cs index ccb4f369..7a7daf1c 100644 --- a/Octokit.Tests/Clients/SearchClientTests.cs +++ b/Octokit.Tests/Clients/SearchClientTests.cs @@ -192,7 +192,7 @@ namespace Octokit.Tests.Clients //get repos where the Description contains rails and user/org is 'github' var request = new SearchRepositoriesRequest("rails"); request.Sort = RepoSearchSort.Forks; - + client.SearchRepo(request); connection.Received().GetAll(Arg.Is(u => u.ToString() == "search/repositories"), Arg.Any>()); @@ -244,7 +244,7 @@ namespace Octokit.Tests.Clients connection.Received().GetAll( Arg.Is(u => u.ToString() == "search/issues"), Arg.Is>(d => - d["sort"] == "Comments")); + d["sort"] == "comments")); } [Fact] @@ -254,15 +254,30 @@ namespace Octokit.Tests.Clients var client = new SearchClient(connection); var request = new SearchIssuesRequest("something"); request.Sort = IssueSearchSort.Updated; - request.Order = SortDirection.Descending; + request.Order = SortDirection.Ascending; + + client.SearchIssues(request); + + connection.Received().GetAll( + Arg.Is(u => u.ToString() == "search/issues"), + Arg.Is>(d => + d["sort"] == "updated" && + d["order"] == "asc")); + } + + [Fact] + public void TestingTheDefaultOrderParameter() + { + var connection = Substitute.For(); + var client = new SearchClient(connection); + var request = new SearchIssuesRequest("something"); client.SearchIssues(request); connection.Received().GetAll( Arg.Is(u => u.ToString() == "search/issues"), Arg.Is>(d => - d["sort"] == "Updated" && - d["order"] == "Descending")); + d["order"] == "desc")); } [Fact] diff --git a/Octokit/Helpers/EnumExtensions.cs b/Octokit/Helpers/EnumExtensions.cs new file mode 100644 index 00000000..267196f7 --- /dev/null +++ b/Octokit/Helpers/EnumExtensions.cs @@ -0,0 +1,24 @@ +using System; +using System.Linq; +using System.Reflection; +using Octokit.Internal; + +namespace Octokit +{ + static class EnumExtensions + { + public static string ToParameter(this Enum prop) + { + if (prop == null) return null; + + var member = prop.GetType().GetMember(prop.ToString()).FirstOrDefault(); + if (member == null) return null; + + var attribute = member.GetCustomAttributes(typeof(ParameterAttribute), false) + .Cast() + .FirstOrDefault(); + + return attribute != null ? attribute.Value : null; + } + } +} diff --git a/Octokit/Models/Request/SearchIssuesRequest.cs b/Octokit/Models/Request/SearchIssuesRequest.cs index b1aaa783..b54ca2bc 100644 --- a/Octokit/Models/Request/SearchIssuesRequest.cs +++ b/Octokit/Models/Request/SearchIssuesRequest.cs @@ -5,6 +5,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; using System.Globalization; +using System.Diagnostics.CodeAnalysis; namespace Octokit { @@ -69,7 +70,7 @@ namespace Octokit /// /// https://help.github.com/articles/searching-issues#type /// - [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1721:PropertyNamesShouldNotMatchGetMethods")] + [SuppressMessage("Microsoft.Naming", "CA1721:PropertyNamesShouldNotMatchGetMethods")] public IssueTypeQualifier? Type { get; set; } /// @@ -233,7 +234,7 @@ namespace Octokit return String.Join("+", parameters); } - [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Globalization", "CA1305:SpecifyIFormatProvider", MessageId = "System.Int32.ToString")] + [SuppressMessage("Microsoft.Globalization", "CA1305:SpecifyIFormatProvider", MessageId = "System.Int32.ToString")] public IDictionary Parameters { get @@ -241,8 +242,8 @@ namespace Octokit var d = new Dictionary(); d.Add("page", Page.ToString()); d.Add("per_page", PerPage.ToString()); - d.Add("sort", Sort.ToString()); - d.Add("order", Order.ToString()); + d.Add("sort", Sort.ToParameter()); + d.Add("order", Order.ToParameter()); var mergedParameters = MergeParameters(); d.Add("q", Term + (mergedParameters.IsNotBlank() ? "+" + mergedParameters : "")); return d; @@ -254,14 +255,17 @@ namespace Octokit /// /// search by number of comments /// + [Parameter(Value = "comments")] Comments, /// /// search by created /// + [Parameter(Value = "created")] Created, /// /// search by last updated /// + [Parameter(Value = "updated")] Updated } diff --git a/Octokit/Octokit-netcore45.csproj b/Octokit/Octokit-netcore45.csproj index 6f0a70d0..bb077574 100644 --- a/Octokit/Octokit-netcore45.csproj +++ b/Octokit/Octokit-netcore45.csproj @@ -117,6 +117,7 @@ + diff --git a/Octokit/Octokit.csproj b/Octokit/Octokit.csproj index f14a7134..febcad07 100644 --- a/Octokit/Octokit.csproj +++ b/Octokit/Octokit.csproj @@ -57,6 +57,9 @@ + + Code +