diff --git a/Octokit.Tests.Integration/Clients/SearchClientTests.cs b/Octokit.Tests.Integration/Clients/SearchClientTests.cs index ba6f4d89fd..c4f6042da8 100644 --- a/Octokit.Tests.Integration/Clients/SearchClientTests.cs +++ b/Octokit.Tests.Integration/Clients/SearchClientTests.cs @@ -43,6 +43,19 @@ public async Task SearchForFunctionInCode() Assert.NotEmpty(repos.Items); } + [Fact] + public async Task SearchForFileNameInCode() + { + var request = new SearchCodeRequest("swag") + { + FileName = "readme.md" + }; + + var repos = await _gitHubClient.Search.SearchCode(request); + + Assert.NotEmpty(repos.Items); + } + [Fact] public async Task SearchForWordInCode() { diff --git a/Octokit.Tests/Clients/SearchClientTests.cs b/Octokit.Tests/Clients/SearchClientTests.cs index d089ab86af..47b478756f 100644 --- a/Octokit.Tests/Clients/SearchClientTests.cs +++ b/Octokit.Tests/Clients/SearchClientTests.cs @@ -1495,6 +1495,21 @@ public void TestingTheExtensionQualifier() Arg.Is>(d => d["q"] == "something+extension:cs")); } + [Fact] + public void TestingTheFileNameQualifier() + { + var connection = Substitute.For(); + var client = new SearchClient(connection); + var request = new SearchCodeRequest("something"); + request.FileName = "packages.config"; + + client.SearchCode(request); + + connection.Received().Get( + Arg.Is(u => u.ToString() == "search/code"), + Arg.Is>(d => d["q"] == "something+filename:packages.config")); + } + [Fact] public void TestingTheUserQualifier() { diff --git a/Octokit/Models/Request/SearchCodeRequest.cs b/Octokit/Models/Request/SearchCodeRequest.cs index 570b5fb814..21c89f2a85 100644 --- a/Octokit/Models/Request/SearchCodeRequest.cs +++ b/Octokit/Models/Request/SearchCodeRequest.cs @@ -106,6 +106,14 @@ public IEnumerable In /// public string Extension { get; set; } + /// + /// Matches specific file names + /// + /// + /// https://help.github.com/articles/searching-code/#search-by-filename + /// + public string FileName { get; set; } + /// /// Limits searches to a specific user. /// @@ -161,6 +169,11 @@ public override IReadOnlyList MergedQualifiers() parameters.Add(String.Format(CultureInfo.InvariantCulture, "extension:{0}", Extension)); } + if (FileName.IsNotBlank()) + { + parameters.Add(String.Format(CultureInfo.InvariantCulture, "filename:{0}", FileName)); + } + if (User.IsNotBlank()) { parameters.Add(String.Format(CultureInfo.InvariantCulture, "user:{0}", User));