diff --git a/changelog.html b/changelog.html index 6d6521d3d01305038904f4d1f4c666aca1cdb808..ab763a42a01a3e80d7068a5901c3aed9ffd37c10 100644 --- a/changelog.html +++ b/changelog.html @@ -55,7 +55,9 @@ Upcoming changes

What's new in 1.610 (2015/04/19)

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 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 */