From 8596019e1456efcaae0191e865802f10841a74b0 Mon Sep 17 00:00:00 2001 From: Brendan Forster Date: Fri, 17 Jul 2015 07:34:31 +0930 Subject: [PATCH] update SearchCodeRequest to use collection for Repos --- .../Clients/SearchClientTests.cs | 4 ++-- Octokit.Tests/Clients/SearchClientTests.cs | 6 ++--- Octokit/Models/Request/SearchCodeRequest.cs | 23 +++++++++++++++---- 3 files changed, 22 insertions(+), 11 deletions(-) diff --git a/Octokit.Tests.Integration/Clients/SearchClientTests.cs b/Octokit.Tests.Integration/Clients/SearchClientTests.cs index a6a058d9..a18a17ce 100644 --- a/Octokit.Tests.Integration/Clients/SearchClientTests.cs +++ b/Octokit.Tests.Integration/Clients/SearchClientTests.cs @@ -36,8 +36,8 @@ public class SearchClientTests [Fact] public async Task SearchForFunctionInCode() { - var request = new SearchCodeRequest("addClass"); - request.Repo = "jquery/jquery"; + var request = new SearchCodeRequest("addClass", "jquery", "jquery"); + var repos = await _gitHubClient.Search.SearchCode(request); Assert.NotEmpty(repos.Items); diff --git a/Octokit.Tests/Clients/SearchClientTests.cs b/Octokit.Tests/Clients/SearchClientTests.cs index 246b26de..ed59dbbe 100644 --- a/Octokit.Tests/Clients/SearchClientTests.cs +++ b/Octokit.Tests/Clients/SearchClientTests.cs @@ -1444,8 +1444,7 @@ namespace Octokit.Tests.Clients { var connection = Substitute.For(); var client = new SearchClient(connection); - var request = new SearchCodeRequest("something"); - request.Repo = "octokit.net"; + var request = new SearchCodeRequest("something", "octokit", "octokit.net"); client.SearchCode(request); @@ -1474,8 +1473,7 @@ namespace Octokit.Tests.Clients { var connection = Substitute.For(); var client = new SearchClient(connection); - var request = new SearchCodeRequest("something"); - request.Repo = "octokit.net"; + var request = new SearchCodeRequest("something", "octokit", "octokit.net"); request.Path = "tools/FAKE.core"; request.Extension = "fs"; diff --git a/Octokit/Models/Request/SearchCodeRequest.cs b/Octokit/Models/Request/SearchCodeRequest.cs index 0de5c1f9..95ddb1f5 100644 --- a/Octokit/Models/Request/SearchCodeRequest.cs +++ b/Octokit/Models/Request/SearchCodeRequest.cs @@ -16,7 +16,10 @@ namespace Octokit [DebuggerDisplay("{DebuggerDisplay,nq}")] public class SearchCodeRequest : BaseSearchRequest { - public SearchCodeRequest(string term) : base(term) { } + public SearchCodeRequest(string term) : base(term) + { + Repos = new Collection(); + } public SearchCodeRequest(string term, string owner, string name) : this(term) @@ -24,7 +27,9 @@ namespace Octokit Ensure.ArgumentNotNullOrEmptyString(owner, "owner"); Ensure.ArgumentNotNullOrEmptyString(name, "name"); - this.Repo = string.Format(CultureInfo.InvariantCulture, "{0}/{1}", owner, name); + var repo = string.Format(CultureInfo.InvariantCulture, "{0}/{1}", owner, name); + + Repos.Add(repo); } /// @@ -117,7 +122,8 @@ namespace Octokit /// /// https://help.github.com/articles/searching-code#users-organizations-and-repositories /// - public string Repo { get; set; } + [SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")] + public Collection Repos { get; set; } [SuppressMessage("Microsoft.Globalization", "CA1304:SpecifyCultureInfo", MessageId = "System.String.ToLower")] public override IReadOnlyList MergedQualifiers() @@ -162,9 +168,16 @@ namespace Octokit parameters.Add(String.Format(CultureInfo.InvariantCulture, "user:{0}", User)); } - if (Repo.IsNotBlank()) + if (Repos.Any()) { - parameters.Add(String.Format(CultureInfo.InvariantCulture, "repo:{0}", Repo)); + var invalidFormatRepos = Repos.Where(x => !x.IsNameWithOwnerFormat()); + if (invalidFormatRepos.Any()) + { + throw new RepositoryFormatException(invalidFormatRepos); + } + + parameters.Add( + string.Join("+", Repos.Select(x => "repo:" + x))); } return new ReadOnlyCollection(parameters);