From 720cd17770c1157ca5ed5dfb1e4f950c304322c7 Mon Sep 17 00:00:00 2001
From: Jeff Foster <jeff.foster@acm.org>
Date: Mon, 10 Aug 2015 11:58:53 +0100
Subject: [PATCH 1/2] add filename for code search

---
 Octokit.Tests/Clients/SearchClientTests.cs  | 15 +++++++++++++++
 Octokit/Models/Request/SearchCodeRequest.cs | 13 +++++++++++++
 2 files changed, 28 insertions(+)

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<Dictionary<string, string>>(d => d["q"] == "something+extension:cs"));
             }
 
+            [Fact]
+            public void TestingTheFileNameQualifier()
+            {
+                var connection = Substitute.For<IApiConnection>();
+                var client = new SearchClient(connection);
+                var request = new SearchCodeRequest("something");
+                request.FileName = "packages.config";
+
+                client.SearchCode(request);
+
+                connection.Received().Get<SearchCodeResult>(
+                    Arg.Is<Uri>(u => u.ToString() == "search/code"),
+                    Arg.Is<Dictionary<string, string>>(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<CodeInQualifier> In
         /// </remarks>
         public string Extension { get; set; }
 
+        /// <summary>
+        /// Matches specific file names
+        /// </summary>
+        /// <remarks>
+        /// https://help.github.com/articles/searching-code/#search-by-filename
+        /// </remarks>
+        public string FileName { get; set; }
+
         /// <summary>
         /// Limits searches to a specific user.
         /// </summary>
@@ -161,6 +169,11 @@ public override IReadOnlyList<string> 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));

From 9634dd510c4ee93d4a36a8a26cc31f8ff427e84d Mon Sep 17 00:00:00 2001
From: Jeff Foster <jeff.foster@acm.org>
Date: Mon, 10 Aug 2015 14:54:47 +0100
Subject: [PATCH 2/2] A simple integration test

---
 .../Clients/SearchClientTests.cs                    | 13 +++++++++++++
 1 file changed, 13 insertions(+)

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()
     {