Skip to content

Commit

Permalink
JENKINS-24433 Searchbox doesn't work properly inside a folder
Browse files Browse the repository at this point in the history
(cherry picked from commit 44db6ae)
  • Loading branch information
fbelzunc authored and olivergondza committed May 8, 2015
1 parent 0ce1810 commit 0c2f237
Show file tree
Hide file tree
Showing 3 changed files with 125 additions and 2 deletions.
2 changes: 1 addition & 1 deletion core/src/main/java/hudson/search/Search.java
Expand Up @@ -76,7 +76,7 @@ public void doIndex(StaplerRequest req, StaplerResponse rsp) throws IOException,
SuggestedItem target = find(index, query, smo);
if(target!=null) {
// found
rsp.sendRedirect2(a.getUrl()+target.getUrl());
rsp.sendRedirect2(req.getContextPath()+target.getUrl());
return;
}
}
Expand Down
2 changes: 1 addition & 1 deletion core/src/main/java/hudson/search/SuggestedItem.java
Expand Up @@ -81,7 +81,7 @@ public String getUrl() {

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);
}
Expand Down
123 changes: 123 additions & 0 deletions test/src/test/java/hudson/search/SearchTest.java
Expand Up @@ -105,6 +105,40 @@ public void testSearchByProjectName() throws Exception {
assertTrue(contents.contains(String.format("<title>%s [Jenkins]</title>", projectName)));
}

@Issue("JENKINS-24433")
@Test
public void testSearchByProjectNameBehindAFolder() throws Exception {
final String projectName = "testSearchByProjectName";
j.createFreeStyleProject(projectName);
j.createFolder("my-folder-1").createProject(FreeStyleProject.class, "my-job-1");

Page result = j.createWebClient().goTo("job/my-folder-1/search?q="+ projectName);

assertNotNull(result);
j.assertGoodStatus(result);

// make sure we've fetched the testSearchByDisplayName project page
String contents = result.getWebResponse().getContentAsString();
assertTrue(contents.contains(String.format("<title>%s [Jenkins]</title>", projectName)));
}

@Issue("JENKINS-24433")
@Test
public void testSearchByProjectNameInAFolder() throws Exception {
final String projectName = "testSearchByProjectName";
j.createFreeStyleProject(projectName);
j.createFolder("my-folder-1").createProject(FreeStyleProject.class, "my-job-1");

Page result = j.createWebClient().goTo("job/my-folder-1/search?q="+ "my-folder-1/my-job-1");

assertNotNull(result);
j.assertGoodStatus(result);

// make sure we've fetched the testSearchByDisplayName project page
String contents = result.getWebResponse().getContentAsString();
assertTrue(contents.contains(String.format("<title>%s [Jenkins]</title>", "my-job-1 [my-folder-1]")));
}

@Test
public void testSearchByDisplayName() throws Exception {
final String displayName = "displayName9999999";
Expand Down Expand Up @@ -225,6 +259,95 @@ else if(displayName.equals(name)) {
assertTrue(foundDispayName);
}

@Issue("JENKINS-24433")
@Test
public void testProjectNameBehindAFolderDisplayName() throws Exception {
final String projectName1 = "job-1";
final String displayName1 = "job-1";

final String projectName2 = "job-2";
final String displayName2 = "job-2";

FreeStyleProject project1 = j.createFreeStyleProject(projectName1);
project1.setDisplayName(displayName1);

FreeStyleProject project2 = j.createFolder("my-folder-1").createProject(FreeStyleProject.class, projectName2);
project2.setDisplayName(displayName2);

WebClient wc = j.createWebClient();
Page result = wc.goTo("job/my-folder-1/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(1, jsonArray.size());

boolean foundProjectName = false;
boolean foundDisplayName = false;
for(Object suggestion : jsonArray) {
JSONObject jsonSuggestion = (JSONObject)suggestion;

String name = (String)jsonSuggestion.get("name");
if(projectName1.equals(name)) {
foundProjectName = true;
}
if(displayName1.equals(name)) {
foundDisplayName = true;
}
}

assertTrue(foundProjectName);
assertTrue(foundDisplayName);
}

@Issue("JENKINS-24433")
@Test
public void testProjectNameInAFolderDisplayName() throws Exception {
final String projectName1 = "job-1";
final String displayName1 = "job-1";

final String projectName2 = "job-2";
final String displayName2 = "my-folder-1 job-2";

FreeStyleProject project1 = j.createFreeStyleProject(projectName1);
project1.setDisplayName(displayName1);

FreeStyleProject project2 = j.createFolder("my-folder-1").createProject(FreeStyleProject.class, projectName2);
project2.setDisplayName(displayName2);


WebClient wc = j.createWebClient();
Page result = wc.goTo("job/my-folder-1/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
*/
Expand Down

0 comments on commit 0c2f237

Please sign in to comment.