From dba14c72198cb1d6aeed38655ef9fe80ed5ca41d Mon Sep 17 00:00:00 2001 From: Michael Suzuki Date: Fri, 17 Feb 2017 17:18:44 +0000 Subject: [PATCH 01/13] Inital search rest api test --- .../org/alfresco/rest/search/SearchTest.java | 57 +++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 e2e-test/java/org/alfresco/rest/search/SearchTest.java diff --git a/e2e-test/java/org/alfresco/rest/search/SearchTest.java b/e2e-test/java/org/alfresco/rest/search/SearchTest.java new file mode 100644 index 000000000..a443ea151 --- /dev/null +++ b/e2e-test/java/org/alfresco/rest/search/SearchTest.java @@ -0,0 +1,57 @@ +/* + * Copyright (C) 2017 Alfresco Software Limited. + * + * This file is part of Alfresco + * + * Alfresco is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Alfresco is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Alfresco. If not, see . + */ +package org.alfresco.rest.search; + +import org.alfresco.rest.RestTest; +import org.alfresco.rest.model.builder.NodesBuilder; +import org.alfresco.rest.model.builder.NodesBuilder.NodeDetail; +import org.alfresco.utility.model.ContentModel; +import org.alfresco.utility.model.SiteModel; +import org.alfresco.utility.model.UserModel; +import org.testng.annotations.BeforeClass; + +/** + * Search end point Public API test. + * @author Michael Suzuki + * + */ +public class SearchTest extends RestTest +{ + UserModel userModel, adminUserModel; + SiteModel siteModel, privateSiteModel, moderatedSiteModel; + UserModel searchedUser; + + @BeforeClass(alwaysRun = true) + public void dataPreparation() throws Exception + { + adminUserModel = dataUser.getAdminUser(); + userModel = dataUser.createRandomTestUser(); + siteModel = dataSite.usingUser(userModel).createPublicRandomSite(); + moderatedSiteModel = dataSite.usingUser(userModel).createModeratedRandomSite(); + + /* + * Create the following file structure for preconditions : + * - sourceFolder + * - suzuki + */ + NodesBuilder nodesBuilder = restClient.withCoreAPI().usingNode(ContentModel.my()).defineNodes(); + NodeDetail sourceFolder = nodesBuilder.folder("source"); + sourceFolder.file("suzuki"); + } +} From f831444249a5906998ceb1b55eda5306fd9608b9 Mon Sep 17 00:00:00 2001 From: Paul Brodner Date: Mon, 20 Feb 2017 15:24:36 +0200 Subject: [PATCH 02/13] some sample usage --- .../org/alfresco/rest/search/SearchTest.java | 35 ++++++++++++++++--- 1 file changed, 30 insertions(+), 5 deletions(-) diff --git a/e2e-test/java/org/alfresco/rest/search/SearchTest.java b/e2e-test/java/org/alfresco/rest/search/SearchTest.java index a443ea151..3e406c1df 100644 --- a/e2e-test/java/org/alfresco/rest/search/SearchTest.java +++ b/e2e-test/java/org/alfresco/rest/search/SearchTest.java @@ -19,12 +19,14 @@ package org.alfresco.rest.search; import org.alfresco.rest.RestTest; +import org.alfresco.rest.model.RestNodeModelsCollection; import org.alfresco.rest.model.builder.NodesBuilder; -import org.alfresco.rest.model.builder.NodesBuilder.NodeDetail; import org.alfresco.utility.model.ContentModel; import org.alfresco.utility.model.SiteModel; import org.alfresco.utility.model.UserModel; +import org.springframework.http.HttpStatus; import org.testng.annotations.BeforeClass; +import org.testng.annotations.Test; /** * Search end point Public API test. @@ -36,7 +38,8 @@ public class SearchTest extends RestTest UserModel userModel, adminUserModel; SiteModel siteModel, privateSiteModel, moderatedSiteModel; UserModel searchedUser; - + NodesBuilder nodesBuilder; + @BeforeClass(alwaysRun = true) public void dataPreparation() throws Exception { @@ -50,8 +53,30 @@ public class SearchTest extends RestTest * - sourceFolder * - suzuki */ - NodesBuilder nodesBuilder = restClient.withCoreAPI().usingNode(ContentModel.my()).defineNodes(); - NodeDetail sourceFolder = nodesBuilder.folder("source"); - sourceFolder.file("suzuki"); + nodesBuilder = restClient.authenticateUser(userModel).withCoreAPI().usingNode(ContentModel.my()).defineNodes(); + + nodesBuilder.folder("source") + .file("suzuki") + .file("suzuki-2"); + + //just for showing available properties + System.out.println(String.format("Source Folder Full Name [%s ] withd ID: %s",nodesBuilder.getNode("source").getName(), nodesBuilder.getNode("source").getId())); + System.out.println(String.format("Source File Full Name [%s ] withd ID: %s",nodesBuilder.getNode("suzuki").getName(), nodesBuilder.getNode("suzuki").getId())); + } + + @Test + public void searchCreatedData() throws Exception + { + RestNodeModelsCollection nodes = restClient.authenticateUser(userModel) + .withCoreAPI() + .usingParams("term=suzuki") + .usingQueries() + .findNodes(); + + restClient.assertStatusCodeIs(HttpStatus.OK); + + nodes.assertThat() + .entriesListIsNotEmpty() + .and().entriesListCountIs(2); } } From 74024f75a43953f26045c2bce179ffe67e0d0930 Mon Sep 17 00:00:00 2001 From: Michael Suzuki Date: Tue, 21 Feb 2017 11:50:58 +0000 Subject: [PATCH 03/13] Added basic search test --- .../org/alfresco/rest/search/SearchTest.java | 47 ++++++++++++------- 1 file changed, 30 insertions(+), 17 deletions(-) diff --git a/e2e-test/java/org/alfresco/rest/search/SearchTest.java b/e2e-test/java/org/alfresco/rest/search/SearchTest.java index 3e406c1df..f97e5b665 100644 --- a/e2e-test/java/org/alfresco/rest/search/SearchTest.java +++ b/e2e-test/java/org/alfresco/rest/search/SearchTest.java @@ -21,7 +21,11 @@ package org.alfresco.rest.search; import org.alfresco.rest.RestTest; import org.alfresco.rest.model.RestNodeModelsCollection; import org.alfresco.rest.model.builder.NodesBuilder; +import org.alfresco.rest.model.builder.NodesBuilder.NodeDetail; import org.alfresco.utility.model.ContentModel; +import org.alfresco.utility.model.FileModel; +import org.alfresco.utility.model.FileType; +import org.alfresco.utility.model.FolderModel; import org.alfresco.utility.model.SiteModel; import org.alfresco.utility.model.UserModel; import org.springframework.http.HttpStatus; @@ -35,8 +39,9 @@ import org.testng.annotations.Test; */ public class SearchTest extends RestTest { + private static final String SEARCH_DATA_SAMPLE_FOLDER = "folder"; UserModel userModel, adminUserModel; - SiteModel siteModel, privateSiteModel, moderatedSiteModel; + SiteModel siteModel; UserModel searchedUser; NodesBuilder nodesBuilder; @@ -46,37 +51,45 @@ public class SearchTest extends RestTest adminUserModel = dataUser.getAdminUser(); userModel = dataUser.createRandomTestUser(); siteModel = dataSite.usingUser(userModel).createPublicRandomSite(); - moderatedSiteModel = dataSite.usingUser(userModel).createModeratedRandomSite(); - /* * Create the following file structure for preconditions : - * - sourceFolder - * - suzuki + * |- folder + * |-- pangram.txt + * |-- cars.pdf */ nodesBuilder = restClient.authenticateUser(userModel).withCoreAPI().usingNode(ContentModel.my()).defineNodes(); + FolderModel folder = new FolderModel(SEARCH_DATA_SAMPLE_FOLDER); + dataContent.usingSite(siteModel).createFolder(folder); + //Create files + FileModel file = new FileModel("pangram.txt", FileType.TEXT_PLAIN, "The qucik brown fox jumps over the lazy dog"); + FileModel file2 = new FileModel("cars.txt", FileType.TEXT_PLAIN, "The landrover discovery is not a sports car"); + ContentModel cm = new ContentModel(); + cm.setCmisLocation(folder.getCmisLocation()); + cm.setName(folder.getName()); + dataContent.usingSite(siteModel).usingResource(cm).createContent(file); + dataContent.usingSite(siteModel).usingResource(cm).createContent(file2); - nodesBuilder.folder("source") - .file("suzuki") - .file("suzuki-2"); - - //just for showing available properties - System.out.println(String.format("Source Folder Full Name [%s ] withd ID: %s",nodesBuilder.getNode("source").getName(), nodesBuilder.getNode("source").getId())); - System.out.println(String.format("Source File Full Name [%s ] withd ID: %s",nodesBuilder.getNode("suzuki").getName(), nodesBuilder.getNode("suzuki").getId())); - } + } @Test public void searchCreatedData() throws Exception { RestNodeModelsCollection nodes = restClient.authenticateUser(userModel) .withCoreAPI() - .usingParams("term=suzuki") + .usingParams("term=cars") .usingQueries() .findNodes(); restClient.assertStatusCodeIs(HttpStatus.OK); + nodes.assertThat().entriesListIsNotEmpty(); + + nodes = restClient.authenticateUser(userModel) + .withCoreAPI() + .usingParams("term=fox") + .usingQueries() + .findNodes(); - nodes.assertThat() - .entriesListIsNotEmpty() - .and().entriesListCountIs(2); + restClient.assertStatusCodeIs(HttpStatus.OK); + nodes.assertThat().entriesListIsNotEmpty(); } } From 53e86c068364447dc0f83a6471f14d6234394c6f Mon Sep 17 00:00:00 2001 From: Paul Brodner Date: Tue, 21 Feb 2017 14:31:21 +0200 Subject: [PATCH 04/13] fix imports, added Search group --- e2e-test/java/org/alfresco/rest/search/SearchTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/e2e-test/java/org/alfresco/rest/search/SearchTest.java b/e2e-test/java/org/alfresco/rest/search/SearchTest.java index f97e5b665..e6275c33a 100644 --- a/e2e-test/java/org/alfresco/rest/search/SearchTest.java +++ b/e2e-test/java/org/alfresco/rest/search/SearchTest.java @@ -21,12 +21,12 @@ package org.alfresco.rest.search; import org.alfresco.rest.RestTest; import org.alfresco.rest.model.RestNodeModelsCollection; import org.alfresco.rest.model.builder.NodesBuilder; -import org.alfresco.rest.model.builder.NodesBuilder.NodeDetail; import org.alfresco.utility.model.ContentModel; import org.alfresco.utility.model.FileModel; import org.alfresco.utility.model.FileType; import org.alfresco.utility.model.FolderModel; import org.alfresco.utility.model.SiteModel; +import org.alfresco.utility.model.TestGroup; import org.alfresco.utility.model.UserModel; import org.springframework.http.HttpStatus; import org.testng.annotations.BeforeClass; @@ -71,7 +71,7 @@ public class SearchTest extends RestTest } - @Test + @Test(groups={TestGroup.SEARCH}) public void searchCreatedData() throws Exception { RestNodeModelsCollection nodes = restClient.authenticateUser(userModel) From cbabcf7ac6cff0a196b72529e5f30cb1b2bdb53e Mon Sep 17 00:00:00 2001 From: Michael Suzuki Date: Tue, 21 Feb 2017 13:34:03 +0000 Subject: [PATCH 05/13] compacting the calls --- .../org/alfresco/rest/search/SearchTest.java | 27 +++++++++---------- 1 file changed, 12 insertions(+), 15 deletions(-) diff --git a/e2e-test/java/org/alfresco/rest/search/SearchTest.java b/e2e-test/java/org/alfresco/rest/search/SearchTest.java index e6275c33a..0808d6d97 100644 --- a/e2e-test/java/org/alfresco/rest/search/SearchTest.java +++ b/e2e-test/java/org/alfresco/rest/search/SearchTest.java @@ -68,27 +68,24 @@ public class SearchTest extends RestTest cm.setName(folder.getName()); dataContent.usingSite(siteModel).usingResource(cm).createContent(file); dataContent.usingSite(siteModel).usingResource(cm).createContent(file2); - - } + } + + protected RestNodeModelsCollection query(String term) throws Exception + { + return restClient.authenticateUser(userModel) + .withCoreAPI() + .usingParams("term=" + term) + .usingQueries() + .findNodes(); + } @Test(groups={TestGroup.SEARCH}) public void searchCreatedData() throws Exception { - RestNodeModelsCollection nodes = restClient.authenticateUser(userModel) - .withCoreAPI() - .usingParams("term=cars") - .usingQueries() - .findNodes(); - + RestNodeModelsCollection nodes = query("cars"); restClient.assertStatusCodeIs(HttpStatus.OK); nodes.assertThat().entriesListIsNotEmpty(); - - nodes = restClient.authenticateUser(userModel) - .withCoreAPI() - .usingParams("term=fox") - .usingQueries() - .findNodes(); - + nodes = query("fox"); restClient.assertStatusCodeIs(HttpStatus.OK); nodes.assertThat().entriesListIsNotEmpty(); } From 34d3614d18dcd04fe4bbcba452593579d4c25d80 Mon Sep 17 00:00:00 2001 From: Michael Suzuki Date: Tue, 21 Feb 2017 13:38:18 +0000 Subject: [PATCH 06/13] Beef up test and refactored layout stuff --- .../rest/search/AbstractSearchTest.java | 79 +++++++++++++++++++ .../org/alfresco/rest/search/SearchTest.java | 59 +++----------- 2 files changed, 88 insertions(+), 50 deletions(-) create mode 100644 e2e-test/java/org/alfresco/rest/search/AbstractSearchTest.java diff --git a/e2e-test/java/org/alfresco/rest/search/AbstractSearchTest.java b/e2e-test/java/org/alfresco/rest/search/AbstractSearchTest.java new file mode 100644 index 000000000..5b79f8808 --- /dev/null +++ b/e2e-test/java/org/alfresco/rest/search/AbstractSearchTest.java @@ -0,0 +1,79 @@ +/* + * Copyright (C) 2017 Alfresco Software Limited. + * + * This file is part of Alfresco + * + * Alfresco is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Alfresco is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Alfresco. If not, see . + */ +package org.alfresco.rest.search; + +import org.alfresco.rest.RestTest; +import org.alfresco.rest.model.RestNodeModelsCollection; +import org.alfresco.rest.model.builder.NodesBuilder; +import org.alfresco.utility.model.ContentModel; +import org.alfresco.utility.model.FileModel; +import org.alfresco.utility.model.FileType; +import org.alfresco.utility.model.FolderModel; +import org.alfresco.utility.model.SiteModel; +import org.alfresco.utility.model.UserModel; +import org.testng.annotations.BeforeClass; + +/** + * Abstract Search test. + * @author Michael Suzuki + * + */ +public class AbstractSearchTest extends RestTest +{ + protected static final String SEARCH_DATA_SAMPLE_FOLDER = "folder"; + UserModel userModel, adminUserModel; + SiteModel siteModel; + UserModel searchedUser; + NodesBuilder nodesBuilder; + + @BeforeClass(alwaysRun = true) + public void dataPreparation() throws Exception + { + adminUserModel = dataUser.getAdminUser(); + userModel = dataUser.createRandomTestUser(); + siteModel = dataSite.usingUser(userModel).createPublicRandomSite(); + /* + * Create the following file structure for preconditions : + * |- folder + * |-- pangram.txt + * |-- cars.pdf + */ + nodesBuilder = restClient.authenticateUser(userModel).withCoreAPI().usingNode(ContentModel.my()).defineNodes(); + FolderModel folder = new FolderModel(SEARCH_DATA_SAMPLE_FOLDER); + dataContent.usingSite(siteModel).createFolder(folder); + //Create files + FileModel file = new FileModel("pangram.txt", FileType.TEXT_PLAIN, "The qucik brown fox jumps over the lazy dog"); + FileModel file2 = new FileModel("cars.txt", FileType.TEXT_PLAIN, "The landrover discovery is not a sports car"); + ContentModel cm = new ContentModel(); + cm.setCmisLocation(folder.getCmisLocation()); + cm.setName(folder.getName()); + dataContent.usingSite(siteModel).usingResource(cm).createContent(file); + dataContent.usingSite(siteModel).usingResource(cm).createContent(file2); + } + + protected RestNodeModelsCollection query(String term) throws Exception + { + return restClient.authenticateUser(userModel) + .withCoreAPI() + .usingParams("term=" + term) + .usingQueries() + .findNodes(); + } + +} diff --git a/e2e-test/java/org/alfresco/rest/search/SearchTest.java b/e2e-test/java/org/alfresco/rest/search/SearchTest.java index 0808d6d97..036ee5c97 100644 --- a/e2e-test/java/org/alfresco/rest/search/SearchTest.java +++ b/e2e-test/java/org/alfresco/rest/search/SearchTest.java @@ -18,18 +18,9 @@ */ package org.alfresco.rest.search; -import org.alfresco.rest.RestTest; import org.alfresco.rest.model.RestNodeModelsCollection; -import org.alfresco.rest.model.builder.NodesBuilder; -import org.alfresco.utility.model.ContentModel; -import org.alfresco.utility.model.FileModel; -import org.alfresco.utility.model.FileType; -import org.alfresco.utility.model.FolderModel; -import org.alfresco.utility.model.SiteModel; import org.alfresco.utility.model.TestGroup; -import org.alfresco.utility.model.UserModel; import org.springframework.http.HttpStatus; -import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; /** @@ -37,48 +28,8 @@ import org.testng.annotations.Test; * @author Michael Suzuki * */ -public class SearchTest extends RestTest +public class SearchTest extends AbstractSearchTest { - private static final String SEARCH_DATA_SAMPLE_FOLDER = "folder"; - UserModel userModel, adminUserModel; - SiteModel siteModel; - UserModel searchedUser; - NodesBuilder nodesBuilder; - - @BeforeClass(alwaysRun = true) - public void dataPreparation() throws Exception - { - adminUserModel = dataUser.getAdminUser(); - userModel = dataUser.createRandomTestUser(); - siteModel = dataSite.usingUser(userModel).createPublicRandomSite(); - /* - * Create the following file structure for preconditions : - * |- folder - * |-- pangram.txt - * |-- cars.pdf - */ - nodesBuilder = restClient.authenticateUser(userModel).withCoreAPI().usingNode(ContentModel.my()).defineNodes(); - FolderModel folder = new FolderModel(SEARCH_DATA_SAMPLE_FOLDER); - dataContent.usingSite(siteModel).createFolder(folder); - //Create files - FileModel file = new FileModel("pangram.txt", FileType.TEXT_PLAIN, "The qucik brown fox jumps over the lazy dog"); - FileModel file2 = new FileModel("cars.txt", FileType.TEXT_PLAIN, "The landrover discovery is not a sports car"); - ContentModel cm = new ContentModel(); - cm.setCmisLocation(folder.getCmisLocation()); - cm.setName(folder.getName()); - dataContent.usingSite(siteModel).usingResource(cm).createContent(file); - dataContent.usingSite(siteModel).usingResource(cm).createContent(file2); - } - - protected RestNodeModelsCollection query(String term) throws Exception - { - return restClient.authenticateUser(userModel) - .withCoreAPI() - .usingParams("term=" + term) - .usingQueries() - .findNodes(); - } - @Test(groups={TestGroup.SEARCH}) public void searchCreatedData() throws Exception { @@ -89,4 +40,12 @@ public class SearchTest extends RestTest restClient.assertStatusCodeIs(HttpStatus.OK); nodes.assertThat().entriesListIsNotEmpty(); } + + @Test(groups={TestGroup.SEARCH}) + public void searchNonIndexedData() throws Exception + { + RestNodeModelsCollection nodes = query("yeti"); + restClient.assertStatusCodeIs(HttpStatus.OK); + nodes.assertThat().entriesListIsEmpty(); + } } From ccab6f6593a43e7ec8627093eddd2ada820b1637 Mon Sep 17 00:00:00 2001 From: Michael Suzuki Date: Wed, 22 Feb 2017 10:12:43 +0000 Subject: [PATCH 07/13] Implement intial search test based on search api endpoint --- .../rest/search/AbstractSearchTest.java | 27 ++++++++++++------- .../org/alfresco/rest/search/SearchTest.java | 10 +++---- 2 files changed, 23 insertions(+), 14 deletions(-) diff --git a/e2e-test/java/org/alfresco/rest/search/AbstractSearchTest.java b/e2e-test/java/org/alfresco/rest/search/AbstractSearchTest.java index 5b79f8808..0d4674af8 100644 --- a/e2e-test/java/org/alfresco/rest/search/AbstractSearchTest.java +++ b/e2e-test/java/org/alfresco/rest/search/AbstractSearchTest.java @@ -19,7 +19,6 @@ package org.alfresco.rest.search; import org.alfresco.rest.RestTest; -import org.alfresco.rest.model.RestNodeModelsCollection; import org.alfresco.rest.model.builder.NodesBuilder; import org.alfresco.utility.model.ContentModel; import org.alfresco.utility.model.FileModel; @@ -30,7 +29,11 @@ import org.alfresco.utility.model.UserModel; import org.testng.annotations.BeforeClass; /** - * Abstract Search test. + * Abstract Search test class that contains useful methods + * such as: + *
    + *
  • Preparing the data to index. + *
  • Preparing search requests. * @author Michael Suzuki * */ @@ -66,14 +69,20 @@ public class AbstractSearchTest extends RestTest dataContent.usingSite(siteModel).usingResource(cm).createContent(file); dataContent.usingSite(siteModel).usingResource(cm).createContent(file2); } - - protected RestNodeModelsCollection query(String term) throws Exception + /** + * Helper method which create an http post request to Search API end point. + * @param term String search term + * @return {@link SearchResponse} response. + * @throws Exception if error + */ + protected SearchResponse query(String term) throws Exception { - return restClient.authenticateUser(userModel) - .withCoreAPI() - .usingParams("term=" + term) - .usingQueries() - .findNodes(); + RestRequestQueryModel queryReq = new RestRequestQueryModel(); + + queryReq.setLanguage("afts"); + queryReq.setQuery(term); + SearchRequest query = new SearchRequest(queryReq); + return restClient.authenticateUser(dataUser.getAdminUser()).withSearchAPI().search(query); } } diff --git a/e2e-test/java/org/alfresco/rest/search/SearchTest.java b/e2e-test/java/org/alfresco/rest/search/SearchTest.java index 036ee5c97..a0bcb4610 100644 --- a/e2e-test/java/org/alfresco/rest/search/SearchTest.java +++ b/e2e-test/java/org/alfresco/rest/search/SearchTest.java @@ -18,7 +18,6 @@ */ package org.alfresco.rest.search; -import org.alfresco.rest.model.RestNodeModelsCollection; import org.alfresco.utility.model.TestGroup; import org.springframework.http.HttpStatus; import org.testng.annotations.Test; @@ -30,21 +29,22 @@ import org.testng.annotations.Test; */ public class SearchTest extends AbstractSearchTest { - @Test(groups={TestGroup.SEARCH}) + @Test(groups={TestGroup.SEARCH, TestGroup.REST_API}) public void searchCreatedData() throws Exception { - RestNodeModelsCollection nodes = query("cars"); + SearchResponse nodes = query("ipsum"); restClient.assertStatusCodeIs(HttpStatus.OK); nodes.assertThat().entriesListIsNotEmpty(); + nodes = query("fox"); restClient.assertStatusCodeIs(HttpStatus.OK); nodes.assertThat().entriesListIsNotEmpty(); } - @Test(groups={TestGroup.SEARCH}) + @Test(groups={TestGroup.SEARCH,TestGroup.REST_API}) public void searchNonIndexedData() throws Exception { - RestNodeModelsCollection nodes = query("yeti"); + SearchResponse nodes = query("yeti"); restClient.assertStatusCodeIs(HttpStatus.OK); nodes.assertThat().entriesListIsEmpty(); } From 691d27869f3432aaa12829a5f28f58c652e2b80b Mon Sep 17 00:00:00 2001 From: Michael Suzuki Date: Thu, 23 Feb 2017 10:56:45 +0000 Subject: [PATCH 08/13] Refactored to use objects that represent the search response --- e2e-test/java/org/alfresco/rest/search/AbstractSearchTest.java | 2 +- e2e-test/java/org/alfresco/rest/search/SearchTest.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/e2e-test/java/org/alfresco/rest/search/AbstractSearchTest.java b/e2e-test/java/org/alfresco/rest/search/AbstractSearchTest.java index 0d4674af8..67df467c3 100644 --- a/e2e-test/java/org/alfresco/rest/search/AbstractSearchTest.java +++ b/e2e-test/java/org/alfresco/rest/search/AbstractSearchTest.java @@ -61,7 +61,7 @@ public class AbstractSearchTest extends RestTest FolderModel folder = new FolderModel(SEARCH_DATA_SAMPLE_FOLDER); dataContent.usingSite(siteModel).createFolder(folder); //Create files - FileModel file = new FileModel("pangram.txt", FileType.TEXT_PLAIN, "The qucik brown fox jumps over the lazy dog"); + FileModel file = new FileModel("pangram.txt", FileType.TEXT_PLAIN, "The quick brown fox jumps over the lazy dog"); FileModel file2 = new FileModel("cars.txt", FileType.TEXT_PLAIN, "The landrover discovery is not a sports car"); ContentModel cm = new ContentModel(); cm.setCmisLocation(folder.getCmisLocation()); diff --git a/e2e-test/java/org/alfresco/rest/search/SearchTest.java b/e2e-test/java/org/alfresco/rest/search/SearchTest.java index a0bcb4610..51f8b25f0 100644 --- a/e2e-test/java/org/alfresco/rest/search/SearchTest.java +++ b/e2e-test/java/org/alfresco/rest/search/SearchTest.java @@ -32,7 +32,7 @@ public class SearchTest extends AbstractSearchTest @Test(groups={TestGroup.SEARCH, TestGroup.REST_API}) public void searchCreatedData() throws Exception { - SearchResponse nodes = query("ipsum"); + SearchResponse nodes = query("car"); restClient.assertStatusCodeIs(HttpStatus.OK); nodes.assertThat().entriesListIsNotEmpty(); From 69aa70a5fc75e2ea38c4be0f1fa48baeda3ac637 Mon Sep 17 00:00:00 2001 From: Michael Suzuki Date: Thu, 23 Feb 2017 20:14:19 +0000 Subject: [PATCH 09/13] Harden the basic test --- .../java/org/alfresco/rest/search/SearchTest.java | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/e2e-test/java/org/alfresco/rest/search/SearchTest.java b/e2e-test/java/org/alfresco/rest/search/SearchTest.java index 51f8b25f0..3c785a718 100644 --- a/e2e-test/java/org/alfresco/rest/search/SearchTest.java +++ b/e2e-test/java/org/alfresco/rest/search/SearchTest.java @@ -20,6 +20,7 @@ package org.alfresco.rest.search; import org.alfresco.utility.model.TestGroup; import org.springframework.http.HttpStatus; +import org.testng.Assert; import org.testng.annotations.Test; /** @@ -32,13 +33,22 @@ public class SearchTest extends AbstractSearchTest @Test(groups={TestGroup.SEARCH, TestGroup.REST_API}) public void searchCreatedData() throws Exception { - SearchResponse nodes = query("car"); + SearchResponse nodes = query("fox"); restClient.assertStatusCodeIs(HttpStatus.OK); nodes.assertThat().entriesListIsNotEmpty(); - nodes = query("fox"); + SearchNodeModel entity = nodes.getEntryByIndex(0); + Assert.assertEquals(entity.getSearch().getScore(), 1); + entity.assertThat().field("name").contains("pangram.txt"); + + nodes = query("car"); restClient.assertStatusCodeIs(HttpStatus.OK); + entity = nodes.getEntryByIndex(0); + nodes.assertThat().entriesListIsNotEmpty(); + Assert.assertEquals(entity.getSearch().getScore(), 1); + entity.assertThat().field("search").contains("score"); + entity.assertThat().field("name").contains("cars.txt"); } @Test(groups={TestGroup.SEARCH,TestGroup.REST_API}) From db3e1751350ef83a99c5b3616deec91c211de2bc Mon Sep 17 00:00:00 2001 From: Michael Suzuki Date: Fri, 24 Feb 2017 14:55:55 +0000 Subject: [PATCH 10/13] Added highlighting tests --- .../rest/search/AbstractSearchTest.java | 21 +++++- .../rest/search/SearchHighLightTest.java | 71 +++++++++++++++++++ 2 files changed, 89 insertions(+), 3 deletions(-) create mode 100644 e2e-test/java/org/alfresco/rest/search/SearchHighLightTest.java diff --git a/e2e-test/java/org/alfresco/rest/search/AbstractSearchTest.java b/e2e-test/java/org/alfresco/rest/search/AbstractSearchTest.java index 67df467c3..47d1d8b6d 100644 --- a/e2e-test/java/org/alfresco/rest/search/AbstractSearchTest.java +++ b/e2e-test/java/org/alfresco/rest/search/AbstractSearchTest.java @@ -44,6 +44,7 @@ public class AbstractSearchTest extends RestTest SiteModel siteModel; UserModel searchedUser; NodesBuilder nodesBuilder; + protected FileModel file,file2; @BeforeClass(alwaysRun = true) public void dataPreparation() throws Exception @@ -61,8 +62,8 @@ public class AbstractSearchTest extends RestTest FolderModel folder = new FolderModel(SEARCH_DATA_SAMPLE_FOLDER); dataContent.usingSite(siteModel).createFolder(folder); //Create files - FileModel file = new FileModel("pangram.txt", FileType.TEXT_PLAIN, "The quick brown fox jumps over the lazy dog"); - FileModel file2 = new FileModel("cars.txt", FileType.TEXT_PLAIN, "The landrover discovery is not a sports car"); + file = new FileModel("pangram.txt", FileType.TEXT_PLAIN, "The quick brown fox jumps over the lazy dog"); + file2 = new FileModel("cars.txt", FileType.TEXT_PLAIN, "The landrover discovery is not a sports car"); ContentModel cm = new ContentModel(); cm.setCmisLocation(folder.getCmisLocation()); cm.setName(folder.getName()); @@ -74,15 +75,29 @@ public class AbstractSearchTest extends RestTest * @param term String search term * @return {@link SearchResponse} response. * @throws Exception if error + * */ protected SearchResponse query(String term) throws Exception { RestRequestQueryModel queryReq = new RestRequestQueryModel(); - queryReq.setLanguage("afts"); queryReq.setQuery(term); SearchRequest query = new SearchRequest(queryReq); return restClient.authenticateUser(dataUser.getAdminUser()).withSearchAPI().search(query); } + /** + * Helper method which create an http post request to Search API end point. + * @param term String search term + * @return {@link SearchResponse} response. + * @throws Exception if error + * + */ + protected SearchResponse query(RestRequestQueryModel queryReq,RestRequestHighlightModel highlight) throws Exception + { + SearchRequest query = new SearchRequest(queryReq); + query.setHighlight(highlight); + System.out.println(query.toString()); + return restClient.authenticateUser(dataUser.getAdminUser()).withSearchAPI().search(query); + } } diff --git a/e2e-test/java/org/alfresco/rest/search/SearchHighLightTest.java b/e2e-test/java/org/alfresco/rest/search/SearchHighLightTest.java new file mode 100644 index 000000000..08aa6c473 --- /dev/null +++ b/e2e-test/java/org/alfresco/rest/search/SearchHighLightTest.java @@ -0,0 +1,71 @@ +/* + * Copyright (C) 2017 Alfresco Software Limited. + * + * This file is part of Alfresco + * + * Alfresco is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Alfresco is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Alfresco. If not, see . + */ +package org.alfresco.rest.search; + +import java.util.ArrayList; +import java.util.List; + +import org.alfresco.utility.model.TestGroup; +import org.testng.annotations.Test; + +/** + * Search high lighting test. + * @author Michael Suzuki + * + */ +public class SearchHighLightTest extends AbstractSearchTest +{ + @Test(groups={TestGroup.SEARCH, TestGroup.REST_API}) + public void searchWithHighLight() throws Exception + { + RestRequestQueryModel queryReq = new RestRequestQueryModel(); + queryReq.setQuery("description:workflow"); + queryReq.setUserQuery("workflow"); + + RestRequestHighlightModel highlight = new RestRequestHighlightModel(); + highlight.setPrefix("¿"); + highlight.setPostfix("?"); + highlight.setMergeContiguous(true); + List fields = new ArrayList(); + fields.add(new RestRequestFieldsModel("cm:title")); + highlight.setFields(fields); + SearchResponse nodes = query(queryReq, highlight); + nodes.assertThat().entriesListIsNotEmpty(); + ResponseHighLightModel hl = nodes.getEntryByIndex(0).getSearch().getHighlight().get(0); + hl.assertThat().field("snippets").contains("Customized ¿Workflow? Process Definitions"); + } + + @Test(groups={TestGroup.SEARCH,TestGroup.REST_API}) + public void searchNonIndexedData() throws Exception + { + RestRequestQueryModel queryReq = new RestRequestQueryModel(); + queryReq.setQuery("cm:title"); + queryReq.setUserQuery("zoro"); + + RestRequestHighlightModel highlight = new RestRequestHighlightModel(); + highlight.setPrefix("¿"); + highlight.setPostfix("?"); + highlight.setMergeContiguous(true); + List fields = new ArrayList(); + fields.add(new RestRequestFieldsModel("cm:title")); + highlight.setFields(fields); + SearchResponse nodes = query(queryReq, highlight); + nodes.assertThat().entriesListDoesNotContain("highlight"); + } +} From c4954932ff1b54a84c69ada4d420253842b62739 Mon Sep 17 00:00:00 2001 From: Michael Suzuki Date: Fri, 24 Feb 2017 15:39:06 +0000 Subject: [PATCH 11/13] Changed test to search content loaded on data prep --- .../org/alfresco/rest/search/SearchHighLightTest.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/e2e-test/java/org/alfresco/rest/search/SearchHighLightTest.java b/e2e-test/java/org/alfresco/rest/search/SearchHighLightTest.java index 08aa6c473..13117120b 100644 --- a/e2e-test/java/org/alfresco/rest/search/SearchHighLightTest.java +++ b/e2e-test/java/org/alfresco/rest/search/SearchHighLightTest.java @@ -31,24 +31,24 @@ import org.testng.annotations.Test; */ public class SearchHighLightTest extends AbstractSearchTest { - @Test(groups={TestGroup.SEARCH, TestGroup.REST_API}) + @Test(groups={TestGroup.SEARCH,TestGroup.REST_API}) public void searchWithHighLight() throws Exception { RestRequestQueryModel queryReq = new RestRequestQueryModel(); - queryReq.setQuery("description:workflow"); - queryReq.setUserQuery("workflow"); + queryReq.setQuery("cm:content:cars"); + queryReq.setUserQuery("cars"); RestRequestHighlightModel highlight = new RestRequestHighlightModel(); highlight.setPrefix("¿"); highlight.setPostfix("?"); highlight.setMergeContiguous(true); List fields = new ArrayList(); - fields.add(new RestRequestFieldsModel("cm:title")); + fields.add(new RestRequestFieldsModel("cm:content")); highlight.setFields(fields); SearchResponse nodes = query(queryReq, highlight); nodes.assertThat().entriesListIsNotEmpty(); ResponseHighLightModel hl = nodes.getEntryByIndex(0).getSearch().getHighlight().get(0); - hl.assertThat().field("snippets").contains("Customized ¿Workflow? Process Definitions"); + hl.assertThat().field("snippets").contains( "The landrover discovery is not a sports ¿car?"); } @Test(groups={TestGroup.SEARCH,TestGroup.REST_API}) From 7f643deb6daf2f7563368c926143898a312eb008 Mon Sep 17 00:00:00 2001 From: Michael Suzuki Date: Fri, 24 Feb 2017 18:09:10 +0000 Subject: [PATCH 12/13] Added start of a faceted search test --- .../rest/search/AbstractSearchTest.java | 13 ++- .../rest/search/FacetedSearchTest.java | 80 +++++++++++++++++++ 2 files changed, 91 insertions(+), 2 deletions(-) create mode 100644 e2e-test/java/org/alfresco/rest/search/FacetedSearchTest.java diff --git a/e2e-test/java/org/alfresco/rest/search/AbstractSearchTest.java b/e2e-test/java/org/alfresco/rest/search/AbstractSearchTest.java index 47d1d8b6d..da27484f7 100644 --- a/e2e-test/java/org/alfresco/rest/search/AbstractSearchTest.java +++ b/e2e-test/java/org/alfresco/rest/search/AbstractSearchTest.java @@ -96,8 +96,17 @@ public class AbstractSearchTest extends RestTest { SearchRequest query = new SearchRequest(queryReq); query.setHighlight(highlight); - System.out.println(query.toString()); return restClient.authenticateUser(dataUser.getAdminUser()).withSearchAPI().search(query); } - + /** + * Helper method which create an http post request to Search API end point. + * @param term String search term + * @return {@link SearchResponse} response. + * @throws Exception if error + * + */ + protected SearchResponse query(SearchRequest query) throws Exception + { + return restClient.authenticateUser(dataUser.getAdminUser()).withSearchAPI().search(query); + } } diff --git a/e2e-test/java/org/alfresco/rest/search/FacetedSearchTest.java b/e2e-test/java/org/alfresco/rest/search/FacetedSearchTest.java new file mode 100644 index 000000000..2c913194e --- /dev/null +++ b/e2e-test/java/org/alfresco/rest/search/FacetedSearchTest.java @@ -0,0 +1,80 @@ +/* + * Copyright (C) 2017 Alfresco Software Limited. + * + * This file is part of Alfresco + * + * Alfresco is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Alfresco is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with Alfresco. If not, see . + */ +package org.alfresco.rest.search; + +import java.util.ArrayList; +import java.util.List; + +import org.alfresco.rest.model.RestRequestFacetFieldsModel; +import org.alfresco.utility.model.TestGroup; +import org.testng.Assert; +import org.testng.annotations.Test; + +/** + * Search high lighting test. + * @author Michael Suzuki + * + */ +public class FacetedSearchTest extends AbstractSearchTest +{ + + @Test(groups={TestGroup.SEARCH, TestGroup.REST_API}) + /** + * Perform the below facet query. + * { + * "query": { + * "query": "cars", + * "language": "afts" + * }, + * "facetQueries": [ + * {"query": "content.size:[o TO 102400]", "label": "small"}, + * {"query": "content.size:[102400 TO 1048576]", "label": "medium"}, + * {"query": "content.size:[1048576 TO 16777216]", "label": "large"} + * ], + * "facetFields": {"facets": [{"field": "'content.size'"}]} + * } + * @throws Exception + */ + public void searchWithFaceting() throws Exception + { + SearchRequest query = new SearchRequest(); + RestRequestQueryModel queryReq = new RestRequestQueryModel(); + queryReq.setQuery("cars"); + query.setQuery(queryReq); + + List facets = new ArrayList(); + facets.add(new FacetQuery("content.size:[0 TO 102400]", "small")); + facets.add(new FacetQuery("content.size:[102400 TO 1048576]", "medium")); + facets.add(new FacetQuery("content.size:[1048576 TO 16777216]", "large")); + query.setFacetQueries(facets); + + RestRequestFacetFieldsModel facetFields = new RestRequestFacetFieldsModel(); + List list = new ArrayList(); + list.add(new FacetField("'content.size'")); + facetFields.setFacets(list); + + query.setFacetFields(facetFields); + + SearchResponse nodes = query(query); + nodes.assertThat().entriesListIsNotEmpty(); + nodes.getContext().assertThat().field("facetQueries").isNotEmpty(); + + } + +} From 1f07c00c25b9cf5ea37edee639af1c5709f2f6a2 Mon Sep 17 00:00:00 2001 From: Michael Suzuki Date: Mon, 27 Feb 2017 11:10:19 +0000 Subject: [PATCH 13/13] Added faceted search test and updated ModelAssertion with new asserts --- .../rest/search/FacetedSearchTest.java | 44 ++++++++++++++++--- 1 file changed, 38 insertions(+), 6 deletions(-) diff --git a/e2e-test/java/org/alfresco/rest/search/FacetedSearchTest.java b/e2e-test/java/org/alfresco/rest/search/FacetedSearchTest.java index 2c913194e..ae79f4620 100644 --- a/e2e-test/java/org/alfresco/rest/search/FacetedSearchTest.java +++ b/e2e-test/java/org/alfresco/rest/search/FacetedSearchTest.java @@ -23,11 +23,10 @@ import java.util.List; import org.alfresco.rest.model.RestRequestFacetFieldsModel; import org.alfresco.utility.model.TestGroup; -import org.testng.Assert; import org.testng.annotations.Test; /** - * Search high lighting test. + * Faceted search test. * @author Michael Suzuki * */ @@ -49,6 +48,35 @@ public class FacetedSearchTest extends AbstractSearchTest * ], * "facetFields": {"facets": [{"field": "'content.size'"}]} * } + * + * Expected response + * {"list": { + * "entries": [... All the results], + * "pagination": { + * "maxItems": 100, + * "hasMoreItems": false, + * "totalItems": 61, + * "count": 61, + * "skipCount": 0 + * }, + * "context": { + * "consistency": {"lastTxId": 512}, + * "facetQueries": [ + * { + * "count": 61, + * "label": "small" + * }, + * { + * "count": 0, + * "label": "large" + * }, + * { + * "count": 0, + * "label": "medium" + * } + * ] + * } + * }} * @throws Exception */ public void searchWithFaceting() throws Exception @@ -66,14 +94,18 @@ public class FacetedSearchTest extends AbstractSearchTest RestRequestFacetFieldsModel facetFields = new RestRequestFacetFieldsModel(); List list = new ArrayList(); - list.add(new FacetField("'content.size'")); + list.add(new FacetFieldQuery("'content.size'")); facetFields.setFacets(list); query.setFacetFields(facetFields); - SearchResponse nodes = query(query); - nodes.assertThat().entriesListIsNotEmpty(); - nodes.getContext().assertThat().field("facetQueries").isNotEmpty(); + SearchResponse response = query(query); + response.assertThat().entriesListIsNotEmpty(); + response.getContext().assertThat().field("facetQueries").isNotEmpty(); + FacetFieldResponse facet = response.getContext().getFacetQueries().get(0); + facet.assertThat().field("label").contains("small").and().field("count").isGreaterThan(0); + response.getContext().getFacetQueries().get(1).assertThat().field("label").contains("large").and().field("count").isLessThan(1); + response.getContext().getFacetQueries().get(2).assertThat().field("label").contains("medium").and().field("count").isLessThan(1); }