From edc89bb65ed007eab9a6780f18e75d0712f7e091 Mon Sep 17 00:00:00 2001 From: Andreea Nechifor Date: Tue, 31 Oct 2017 09:21:27 +0200 Subject: [PATCH] REPO-1154: Using spaces for term-based queries - nodes Cherry-picked from 50c6fb9923536e2d78228559a906923a018c5c26 develop to master --- .../alfresco/rest/api/impl/QueriesImpl.java | 7 ++- .../rest/api/tests/QueriesNodesApiTest.java | 49 +++++++++++++++++++ 2 files changed, 55 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/alfresco/rest/api/impl/QueriesImpl.java b/src/main/java/org/alfresco/rest/api/impl/QueriesImpl.java index 738f7c781b..d388aa2e85 100644 --- a/src/main/java/org/alfresco/rest/api/impl/QueriesImpl.java +++ b/src/main/java/org/alfresco/rest/api/impl/QueriesImpl.java @@ -189,7 +189,12 @@ public class QueriesImpl implements Queries, InitializingBean NodeRef nodeRef = nodes.validateOrLookupNode(rootNodeId, null); query.append("PATH:\"").append(getQNamePath(nodeRef.getId())).append("//*\" AND ("); } - query.append(term); + if (term != null) + { + query.append("\""); + query.append(term); + query.append("\""); + } if (rootNodeId != null) { query.append(")"); diff --git a/src/test/java/org/alfresco/rest/api/tests/QueriesNodesApiTest.java b/src/test/java/org/alfresco/rest/api/tests/QueriesNodesApiTest.java index f416db7961..0765e780c7 100644 --- a/src/test/java/org/alfresco/rest/api/tests/QueriesNodesApiTest.java +++ b/src/test/java/org/alfresco/rest/api/tests/QueriesNodesApiTest.java @@ -85,6 +85,55 @@ public class QueriesNodesApiTest extends AbstractSingleNetworkSiteTest } return result; } + + /** + * Test basic api for nodes using parameter term with white-spaces.(REPO-1154) + * + *

+ * GET: + *

+ * {@literal :/alfresco/api//public/alfresco/versions/1/queries/nodes} + * + * @throws Exception + */ + @Test + public void testSearchTermWhiteSpace() throws Exception + { + setRequestContext(user1); + + String myFolderNodeId = getMyNodeId(); + + String parentFolder = createFolder(myFolderNodeId, "folder term1").getId(); + //I use "find123" and "find123 find", the search using second term must return less result + //The space must not break the query + String childTerm = "find" + Math.random(); + String childTermWS = childTerm + " " + "find"; + + Map docProps = new HashMap<>(2); + docProps.put("cm:title", childTerm); + docProps.put("cm:description", childTerm); + createTextFile(parentFolder, childTerm, childTerm, "UTF-8", docProps); + + docProps.put("cm:title", childTermWS); + docProps.put("cm:description", childTermWS); + createTextFile(parentFolder, childTermWS, childTermWS, "UTF-8", docProps); + + Paging paging = getPaging(0, 100); + HashMap params = new HashMap<>(1); + params.put(Queries.PARAM_TERM, childTerm); + HttpResponse response = getAll(URL_QUERIES_LSN, paging, params, 200); + List nodesChildTerm = RestApiUtil.parseRestApiEntries(response.getJsonResponse(), Node.class); + //check if the search returns all nodes which contain that query term + assertEquals(2, nodesChildTerm.size()); + + params.put(Queries.PARAM_TERM, childTermWS); + response = getAll(URL_QUERIES_LSN, paging, params, 200); + List nodesChildTermWS = RestApiUtil.parseRestApiEntries(response.getJsonResponse(), Node.class); + //check if search works for words with space and the space don't break the query + assertEquals(1, nodesChildTermWS.size()); + assertTrue(nodesChildTerm.size() >= nodesChildTermWS.size()); + + } /** * Tests basic api for nodes live search - metadata (name, title, description) &/or full text search of file/content