diff --git a/changelog.html b/changelog.html
index 6d6521d3d01305038904f4d1f4c666aca1cdb808..ab763a42a01a3e80d7068a5901c3aed9ffd37c10 100644
--- a/changelog.html
+++ b/changelog.html
@@ -55,7 +55,9 @@ Upcoming changes
- -
+
-
+ Search box did not work well inside folders.
+ (issue 24433)
diff --git a/core/src/main/java/hudson/search/Search.java b/core/src/main/java/hudson/search/Search.java
index f6f5d1051a154015702df42241899b96aea78152..c817a26dbd171ce5c9508bb16bb9e71ec13c9e41 100644
--- a/core/src/main/java/hudson/search/Search.java
+++ b/core/src/main/java/hudson/search/Search.java
@@ -76,7 +76,7 @@ public class Search {
SuggestedItem target = find(index, query, smo);
if(target!=null) {
// found
- rsp.sendRedirect2(a.getUrl()+target.getUrl());
+ rsp.sendRedirect2(req.getContextPath()+target.getUrl());
return;
}
}
diff --git a/core/src/main/java/hudson/search/SuggestedItem.java b/core/src/main/java/hudson/search/SuggestedItem.java
index 1dbcad9c3d0abfd10354cea6c29bd90779b8137b..31e5956ce4ed707cdd737a7412e0e5b5282744c9 100644
--- a/core/src/main/java/hudson/search/SuggestedItem.java
+++ b/core/src/main/java/hudson/search/SuggestedItem.java
@@ -81,7 +81,7 @@ public class SuggestedItem {
private static SuggestedItem build(SearchableModelObject searchContext, Item top) {
ItemGroup extends Item> parent = top.getParent();
- if (parent instanceof Item && parent != searchContext) {
+ if (parent instanceof Item) {
Item parentItem = (Item)parent;
return new SuggestedItem(build(searchContext, parentItem), top);
}
diff --git a/test/src/test/java/hudson/search/SearchTest.java b/test/src/test/java/hudson/search/SearchTest.java
index c90858e388c505deb1980f7d3d606420f5f84b02..090fab430b2d4012b3b6b2831667e6d0038eaf5a 100644
--- a/test/src/test/java/hudson/search/SearchTest.java
+++ b/test/src/test/java/hudson/search/SearchTest.java
@@ -32,6 +32,8 @@ import static org.junit.Assert.fail;
import hudson.model.FreeStyleProject;
import hudson.model.ListView;
+import java.net.URL;
+
import java.util.ArrayList;
import java.util.List;
@@ -105,6 +107,37 @@ public class SearchTest {
assertTrue(contents.contains(String.format("%s [Jenkins]", projectName)));
}
+ @Issue("JENKINS-24433")
+ @Test
+ public void testSearchByProjectNameBehindAFolder() throws Exception {
+ FreeStyleProject myFreeStyleProject = j.createFreeStyleProject("testSearchByProjectName");
+ MockFolder myMockFolder = j.createFolder("my-folder-1");
+
+ Page result = j.createWebClient().goTo(myMockFolder.getUrl() + "search?q="+ myFreeStyleProject.getName());
+
+ assertNotNull(result);
+ j.assertGoodStatus(result);
+
+ URL resultUrl = result.getWebResponse().getUrl();
+ assertTrue(resultUrl.toString().equals(j.getInstance().getRootUrl() + myFreeStyleProject.getUrl()));
+ }
+
+ @Issue("JENKINS-24433")
+ @Test
+ public void testSearchByProjectNameInAFolder() throws Exception {
+
+ MockFolder myMockFolder = j.createFolder("my-folder-1");
+ FreeStyleProject myFreeStyleProject = myMockFolder.createProject(FreeStyleProject.class, "my-job-1");
+
+ Page result = j.createWebClient().goTo(myMockFolder.getUrl() + "search?q=" + myFreeStyleProject.getFullName());
+
+ assertNotNull(result);
+ j.assertGoodStatus(result);
+
+ URL resultUrl = result.getWebResponse().getUrl();
+ assertTrue(resultUrl.toString().equals(j.getInstance().getRootUrl() + myFreeStyleProject.getUrl()));
+ }
+
@Test
public void testSearchByDisplayName() throws Exception {
final String displayName = "displayName9999999";
@@ -220,11 +253,98 @@ public class SearchTest {
foundDispayName = true;
}
}
-
+
assertTrue(foundProjectName);
assertTrue(foundDispayName);
}
+ @Issue("JENKINS-24433")
+ @Test
+ public void testProjectNameBehindAFolderDisplayName() throws Exception {
+ final String projectName1 = "job-1";
+ final String displayName1 = "job-1 display";
+
+ final String projectName2 = "job-2";
+ final String displayName2 = "job-2 display";
+
+ FreeStyleProject project1 = j.createFreeStyleProject(projectName1);
+ project1.setDisplayName(displayName1);
+
+ MockFolder myMockFolder = j.createFolder("my-folder-1");
+
+ FreeStyleProject project2 = myMockFolder.createProject(FreeStyleProject.class, projectName2);
+ project2.setDisplayName(displayName2);
+
+ WebClient wc = j.createWebClient();
+ Page result = wc.goTo(myMockFolder.getUrl() + "search/suggest?query=" + projectName1, "application/json");
+ assertNotNull(result);
+ j.assertGoodStatus(result);
+
+ String content = result.getWebResponse().getContentAsString();
+ JSONObject jsonContent = (JSONObject)JSONSerializer.toJSON(content);
+ assertNotNull(jsonContent);
+ JSONArray jsonArray = jsonContent.getJSONArray("suggestions");
+ assertNotNull(jsonArray);
+
+ assertEquals(2, jsonArray.size());
+
+ boolean foundDisplayName = false;
+ for(Object suggestion : jsonArray) {
+ JSONObject jsonSuggestion = (JSONObject)suggestion;
+
+ String name = (String)jsonSuggestion.get("name");
+ if(projectName1.equals(name)) {
+ foundDisplayName = true;
+ }
+ }
+
+ assertTrue(foundDisplayName);
+ }
+
+ @Issue("JENKINS-24433")
+ @Test
+ public void testProjectNameInAFolderDisplayName() throws Exception {
+ final String projectName1 = "job-1";
+ final String displayName1 = "job-1 display";
+
+ final String projectName2 = "job-2";
+ final String displayName2 = "my-folder-1 job-2";
+
+ FreeStyleProject project1 = j.createFreeStyleProject(projectName1);
+ project1.setDisplayName(displayName1);
+
+ MockFolder myMockFolder = j.createFolder("my-folder-1");
+
+ FreeStyleProject project2 = myMockFolder.createProject(FreeStyleProject.class, projectName2);
+ project2.setDisplayName(displayName2);
+
+ WebClient wc = j.createWebClient();
+ Page result = wc.goTo(myMockFolder.getUrl() + "search/suggest?query=" + projectName2, "application/json");
+ assertNotNull(result);
+ j.assertGoodStatus(result);
+
+ String content = result.getWebResponse().getContentAsString();
+ JSONObject jsonContent = (JSONObject)JSONSerializer.toJSON(content);
+ assertNotNull(jsonContent);
+ JSONArray jsonArray = jsonContent.getJSONArray("suggestions");
+ assertNotNull(jsonArray);
+
+ assertEquals(1, jsonArray.size());
+
+ boolean foundDisplayName = false;
+ for(Object suggestion : jsonArray) {
+ JSONObject jsonSuggestion = (JSONObject)suggestion;
+
+ String name = (String)jsonSuggestion.get("name");
+
+ if(displayName2.equals(name)) {
+ foundDisplayName = true;
+ }
+ }
+
+ assertTrue(foundDisplayName);
+ }
+
/**
* Disable/enable status shouldn't affect the search
*/