diff --git a/e2e-test/java/org/alfresco/rest/search/FacetFieldsSearchTest.java b/e2e-test/java/org/alfresco/rest/search/FacetFieldsSearchTest.java
new file mode 100644
index 000000000..504636be3
--- /dev/null
+++ b/e2e-test/java/org/alfresco/rest/search/FacetFieldsSearchTest.java
@@ -0,0 +1,246 @@
+/*
+ * Copyright (C) 2019 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 javax.json.Json;
+import javax.json.JsonObject;
+
+import org.alfresco.dataprep.SiteService.Visibility;
+import org.alfresco.utility.data.RandomData;
+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.testng.Assert;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
+
+/**
+ * Faceted search test with FacetFields
+ * @author Meenal Bhave
+ *
+ */
+public class FacetFieldsSearchTest extends AbstractSearchTest
+{
+ private UserModel userWithNoAccess, userCanAccessTextFile;
+ private SiteModel testSite;
+ private FolderModel testFolder;
+ private FileModel textFile, htmlFile;
+ private String fname;
+
+ @BeforeClass(alwaysRun = true)
+ public void setupEnvironment() throws Exception
+ {
+ serverHealth.assertServerIsOnline();
+
+ fname = unique_searchString + "facet";
+
+ testSite = new SiteModel(RandomData.getRandomName("SiteSearch"));
+ testSite.setVisibility(Visibility.PRIVATE);
+
+ testSite = dataSite.usingUser(userModel).createSite(testSite);
+
+ // Create another user who would not have access to the Private Site created by userModel
+ userWithNoAccess = dataUser.createRandomTestUser("UserSearch2");
+ userCanAccessTextFile = dataUser.createRandomTestUser("UserSearch3");
+
+ testFolder = dataContent.usingSite(testSite).usingUser(userModel).createFolder();
+ // Create a folder and a file as test User
+ FolderModel folder = new FolderModel(fname);
+ dataContent.usingUser(userModel).usingSite(testSite).createFolder(folder);
+
+ textFile = new FileModel(fname + "-1.txt", fname, fname, FileType.TEXT_PLAIN, fname + " file for search ");
+ dataContent.usingUser(userModel).usingSite(testSite).createContent(textFile);
+
+ htmlFile = new FileModel(fname + "-2.html", fname, fname, FileType.HTML, fname + " file 2 for search ");
+ dataContent.usingUser(userModel).usingSite(testSite).createContent(htmlFile);
+
+ // Set Node Permissions to allow access for user3 user for text File
+ JsonObject userPermission = Json.createObjectBuilder()
+ .add("permissions", Json.createObjectBuilder().add("isInheritanceEnabled", false)
+ .add("locallySet",Json.createObjectBuilder().add("authorityId", userCanAccessTextFile.getUsername())
+ .add("name", "SiteConsumer").add("accessStatus", "ALLOWED")))
+ .build();
+ String putBody = userPermission.toString();
+
+ restClient.authenticateUser(userModel).withCoreAPI().usingNode(textFile).updateNode(putBody);
+
+ // Wait for the file to be indexed
+ waitForIndexing(htmlFile.getName(), true);
+ }
+
+ @Test(groups = { TestGroup.REST_API, TestGroup.SEARCH, TestGroup.ASS_13 })
+ public void testSearchFacetFieldsBucketExcludedWhenMinCount2() throws Exception
+ {
+ // Create Query with FacetFields: Site and Content MimeType
+ SearchRequest query = new SearchRequest();
+ RestRequestQueryModel queryReq = new RestRequestQueryModel();
+ queryReq.setQuery("name:" + fname);
+ query.setQuery(queryReq);
+
+ RestRequestFacetFieldsModel facetFields = new RestRequestFacetFieldsModel();
+ List facets = new ArrayList();
+
+ facets.add(new RestRequestFacetFieldModel("SITE", "SEARCH.FACET_FIELDS.SITE", 0)); // MinCount = 0
+ facets.add(new RestRequestFacetFieldModel("cm:content.mimetype", "Mimetype", 2)); // MinCount = 2
+
+ facetFields.setFacets(facets);
+ query.setFacetFields(facetFields);
+
+ // Search query using user who created site: Expect Only 1 Facet bucket to be retrieved
+ SearchResponse response = query(query);
+
+ Assert.assertFalse(response.getContext().getFacetsFields().isEmpty());
+ Assert.assertEquals(response.getContext().getFacetsFields().size(), 1);
+
+ RestResultBucketsModel facetFieldList = response.getContext().getFacetsFields().get(0);
+ Assert.assertEquals(facetFieldList.getLabel(), "SEARCH.FACET_FIELDS.SITE");
+ Assert.assertEquals(facetFieldList.getBuckets().size(), 1); // MimeType bucket won't be shown as minCount = 2 won't be reached
+
+ FacetFieldBucket bucket1 = facetFieldList.getBuckets().get(0);
+ bucket1.assertThat().field("label").is(testSite.getId());
+ bucket1.assertThat().field("filterQuery").contains(testSite.getId());
+ bucket1.assertThat().field("count").is(3); // One folder and 2 files created above
+
+ }
+
+ @Test(groups = { TestGroup.REST_API, TestGroup.SEARCH, TestGroup.ASS_13 })
+ public void testSearchWithFacetFieldsMinCountChecks() throws Exception
+ {
+ // MinCount 1 or not set: Defaults to 1
+ SearchRequest query = new SearchRequest();
+ RestRequestQueryModel queryReq = new RestRequestQueryModel();
+ queryReq.setQuery("name:" + fname);
+ query.setQuery(queryReq);
+
+ RestRequestFacetFieldsModel facetFields = new RestRequestFacetFieldsModel();
+ List facets = new ArrayList();
+
+ facets.add(new RestRequestFacetFieldModel("SITE", "SEARCH.FACET_FIELD1.SITE", null)); // MinCount Not set
+ facets.add(new RestRequestFacetFieldModel("cm:content.mimetype", "SEARCH.FACET_FIELD2.Mimetype", 1)); // MinCount = 1
+
+ facetFields.setFacets(facets);
+ query.setFacetFields(facetFields);
+
+ // Search query using user who created site: Expect 2 Facet buckets to be retrieved
+ SearchResponse response = query(query);
+
+ List facetFieldBucketsList = response.getContext().getFacetsFields();
+ Assert.assertEquals(facetFieldBucketsList.size(), 2, "FacetField");
+
+ RestResultBucketsModel facetFieldList = facetFieldBucketsList.get(0);
+ Assert.assertEquals(facetFieldList.getLabel(), "SEARCH.FACET_FIELD1.SITE");
+
+ FacetFieldBucket bucket1 = facetFieldList.getBuckets().get(0);
+ bucket1.assertThat().field("label").is(testSite.getId());
+ bucket1.assertThat().field("filterQuery").contains(testSite.getId());
+ bucket1.assertThat().field("count").is(3);
+
+ facetFieldList = facetFieldBucketsList.get(1);
+ Assert.assertEquals(facetFieldList.getLabel(), "SEARCH.FACET_FIELD2.Mimetype");
+ Assert.assertEquals(facetFieldList.getBuckets().size(), 2); // MimeType bucket will be shown with 2 buckets
+
+ bucket1 = facetFieldList.getBuckets().get(0);
+ bucket1.assertThat().field("label").is("text/html");
+ bucket1.assertThat().field("filterQuery").contains("text/html");
+ bucket1.assertThat().field("count").is(1);
+ bucket1.assertThat().field("display").is("HTML");
+
+ bucket1 = facetFieldList.getBuckets().get(1);
+ bucket1.assertThat().field("label").is("text/plain");
+ bucket1.assertThat().field("filterQuery").contains("text/plain");
+ bucket1.assertThat().field("count").is(1);
+ bucket1.assertThat().field("display").is("Plain Text");
+ }
+
+ @Test(groups = { TestGroup.REST_API, TestGroup.SEARCH, TestGroup.ASS_13 })
+ public void testSearchWithFacetFieldsNoFacetsWhenNoAccess() throws Exception
+ {
+ SearchRequest query = new SearchRequest();
+ RestRequestQueryModel queryReq = new RestRequestQueryModel();
+ queryReq.setQuery("name:" + fname);
+ query.setQuery(queryReq);
+
+ RestRequestFacetFieldsModel facetFields = new RestRequestFacetFieldsModel();
+ List facets = new ArrayList();
+
+ facets.add(new RestRequestFacetFieldModel("SITE", "SEARCH.FACET_FIELD1.SITE", null)); // MinCount Not set
+ facets.add(new RestRequestFacetFieldModel("cm:content.mimetype", "SEARCH.FACET_FIELD2.Mimetype", 1)); // MinCount = 1
+
+ facetFields.setFacets(facets);
+ query.setFacetFields(facetFields);
+
+ // Search query using other user: No access hence no buckets expected
+ SearchResponse response = restClient.authenticateUser(userWithNoAccess).withSearchAPI().search(query);
+ Assert.assertNull(response.getContext().getFacetsFields());
+ }
+
+ @Test(groups = { TestGroup.REST_API, TestGroup.SEARCH, TestGroup.ASS_13 })
+ public void testSearchWithFacetFieldsOnlyFacetsWhereAccess() throws Exception
+ {
+ SearchRequest query = new SearchRequest();
+ RestRequestQueryModel queryReq = new RestRequestQueryModel();
+ queryReq.setQuery("name:" + fname);
+ query.setQuery(queryReq);
+
+ RestRequestFacetFieldsModel facetFields = new RestRequestFacetFieldsModel();
+ List facets = new ArrayList();
+
+ facets.add(new RestRequestFacetFieldModel("SITE", "SEARCH.FACET_FIELD1.SITE", null)); // MinCount Not set
+ facets.add(new RestRequestFacetFieldModel("cm:content.mimetype", "SEARCH.FACET_FIELD2.Mimetype", 1)); // MinCount = 1
+
+ facetFields.setFacets(facets);
+ query.setFacetFields(facetFields);
+ // Search query using user3
+ SearchResponse response = restClient.authenticateUser(userCanAccessTextFile).withSearchAPI().search(query);
+
+ List facetFieldBucketsList = response.getContext().getFacetsFields();
+ Assert.assertFalse(facetFieldBucketsList.isEmpty());
+ Assert.assertEquals(facetFieldBucketsList.size(), 2);
+
+ // Check FacetField 1
+ RestResultBucketsModel facetFieldList = facetFieldBucketsList.get(0);
+
+ // User3 has granular permissions to content within this private site, so expect the Site bucket
+ Assert.assertEquals(facetFieldList.getLabel(), "SEARCH.FACET_FIELD1.SITE");
+
+ FacetFieldBucket bucket1 = facetFieldList.getBuckets().get(0);
+ bucket1.assertThat().field("label").is(testSite.getId());
+ bucket1.assertThat().field("filterQuery").contains(testSite.getId());
+ bucket1.assertThat().field("count").is(1);
+
+ // Check FacetField 2
+ facetFieldList = facetFieldBucketsList.get(1);
+ Assert.assertEquals(facetFieldList.getLabel(), "SEARCH.FACET_FIELD2.Mimetype");
+ Assert.assertEquals(facetFieldList.getBuckets().size(), 1); // MimeType bucket will be shown with 1 bucket only
+
+ // User3 has access to text file alone, so expect bucket for text/plain and not for html content.
+ bucket1 = facetFieldList.getBuckets().get(0);
+ bucket1.assertThat().field("label").is("text/plain");
+ bucket1.assertThat().field("label").isNot("text/html");
+ bucket1.assertThat().field("filterQuery").contains("text/plain");
+ bucket1.assertThat().field("count").is(1);
+ bucket1.assertThat().field("display").is("Plain Text");
+ }
+}
diff --git a/e2e-test/java/org/alfresco/rest/search/FacetedSearchTest.java b/e2e-test/java/org/alfresco/rest/search/FacetedSearchTest.java
index d6dc1855e..595b3cc83 100644
--- a/e2e-test/java/org/alfresco/rest/search/FacetedSearchTest.java
+++ b/e2e-test/java/org/alfresco/rest/search/FacetedSearchTest.java
@@ -315,145 +315,4 @@ public class FacetedSearchTest extends AbstractSearchTest
bucket1.assertThat().field("filterQuery").is("modifier:\"" + userModel.getUsername() + "\"");
bucket1.assertThat().field("metrics").is("[{entry=null, type=count, value={count=1}}]");
}
-
- @Test(groups = { TestGroup.REST_API, TestGroup.SEARCH, TestGroup.ASS_13 })
- public void searchWithFactedFieldsWithACLs() throws Exception
- {
- String fname = unique_searchString + "facet";
-
- // Create another user who would not have access to the Private Site created by userModel
- UserModel userWithNoAccess = dataUser.createRandomTestUser("UserSearch2");
- UserModel userCanAccessTextFile = dataUser.createRandomTestUser("UserSearch3");
-
- // Create a folder and a file as test User
- FolderModel folder = new FolderModel(fname);
- dataContent.usingUser(userModel).usingSite(siteModel).createFolder(folder);
-
- FileModel file = new FileModel(fname + "-1.txt", fname, fname, FileType.TEXT_PLAIN, fname + " file for search ");
- dataContent.usingUser(userModel).usingSite(siteModel).createContent(file);
-
- FileModel file2 = new FileModel(fname + "-2.html", fname, fname, FileType.HTML, fname + " file 2 for search ");
- dataContent.usingUser(userModel).usingSite(siteModel).createContent(file2);
-
- // Set Node Permissions to allow access for user3 user for text File
- JsonObject userPermission = Json.createObjectBuilder()
- .add("permissions", Json.createObjectBuilder().add("isInheritanceEnabled", false)
- .add("locallySet",Json.createObjectBuilder().add("authorityId", userCanAccessTextFile.getUsername())
- .add("name", "SiteConsumer").add("accessStatus", "ALLOWED")))
- .build();
- String putBody = userPermission.toString();
-
- restClient.authenticateUser(userModel).withCoreAPI().usingNode(file).updateNode(putBody);
-
- waitForIndexing(file.getName(), true);
-
- // Create Query with FacetFields: Site and Content MimeType
- SearchRequest query = new SearchRequest();
- RestRequestQueryModel queryReq = new RestRequestQueryModel();
- queryReq.setQuery("name:" + fname);
- query.setQuery(queryReq);
-
- RestRequestFacetFieldsModel facetFields = new RestRequestFacetFieldsModel();
- List facets = new ArrayList();
-
- facets.add(new RestRequestFacetFieldModel("SITE", "SEARCH.FACET_FIELDS.SITE", 0)); // MinCount = 0
- facets.add(new RestRequestFacetFieldModel("cm:content.mimetype", "Mimetype", 2)); // MinCount = 2
-
- facetFields.setFacets(facets);
- query.setFacetFields(facetFields);
-
- // Search query using user who created site: Expect Only 1 Facet bucket to be retrieved
- SearchResponse response = query(query);
-
- Assert.assertFalse(response.getContext().getFacetsFields().isEmpty());
- Assert.assertEquals(response.getContext().getFacetsFields().size(), 1);
-
- RestResultBucketsModel facetFieldList = response.getContext().getFacetsFields().get(0);
- Assert.assertEquals(facetFieldList.getLabel(), "SEARCH.FACET_FIELDS.SITE");
- Assert.assertEquals(facetFieldList.getBuckets().size(), 1); // MimeType bucket won't be shown as minCount = 2 won't be reached
-
- FacetFieldBucket bucket1 = facetFieldList.getBuckets().get(0);
- bucket1.assertThat().field("label").is(siteModel.getId());
- bucket1.assertThat().field("filterQuery").contains(siteModel.getId());
- bucket1.assertThat().field("count").is(3); // One folder and 2 files created above
-
- // MinCount 1 or not set: Defaults to 1
- query = new SearchRequest();
- queryReq = new RestRequestQueryModel();
- queryReq.setQuery("name:" + fname);
- query.setQuery(queryReq);
-
- facetFields = new RestRequestFacetFieldsModel();
- facets = new ArrayList();
-
- facets.add(new RestRequestFacetFieldModel("SITE", "SEARCH.FACET_FIELD1.SITE", null)); // MinCount Not set
- facets.add(new RestRequestFacetFieldModel("cm:content.mimetype", "SEARCH.FACET_FIELD2.Mimetype", 1)); // MinCount = 1
-
- facetFields.setFacets(facets);
- query.setFacetFields(facetFields);
-
- // Search query using user who created site: Expect 2 Facet buckets to be retrieved
- response = query(query);
-
- List facetFieldBucketsList = response.getContext().getFacetsFields();
- Assert.assertEquals(facetFieldBucketsList.size(), 2, "FacetField");
-
- facetFieldList = facetFieldBucketsList.get(0);
- Assert.assertEquals(facetFieldList.getLabel(), "SEARCH.FACET_FIELD1.SITE");
-
- bucket1 = facetFieldList.getBuckets().get(0);
- bucket1.assertThat().field("label").is(siteModel.getId());
- bucket1.assertThat().field("filterQuery").contains(siteModel.getId());
- bucket1.assertThat().field("count").is(3);
-
- facetFieldList = facetFieldBucketsList.get(1);
- Assert.assertEquals(facetFieldList.getLabel(), "SEARCH.FACET_FIELD2.Mimetype");
- Assert.assertEquals(facetFieldList.getBuckets().size(), 2); // MimeType bucket will be shown with 2 buckets
-
- bucket1 = facetFieldList.getBuckets().get(0);
- bucket1.assertThat().field("label").is("text/html");
- bucket1.assertThat().field("filterQuery").contains("text/html");
- bucket1.assertThat().field("count").is(1);
- bucket1.assertThat().field("display").is("HTML");
-
- bucket1 = facetFieldList.getBuckets().get(1);
- bucket1.assertThat().field("label").is("text/plain");
- bucket1.assertThat().field("filterQuery").contains("text/plain");
- bucket1.assertThat().field("count").is(1);
- bucket1.assertThat().field("display").is("Plain Text");
-
- // Search query using other user: No access hence no buckets expected
- response = restClient.authenticateUser(userWithNoAccess).withSearchAPI().search(query);
- Assert.assertNull(response.getContext().getFacetsFields());
-
- // Search query using user3
- response = restClient.authenticateUser(userCanAccessTextFile).withSearchAPI().search(query);
-
- facetFieldBucketsList = response.getContext().getFacetsFields();
- Assert.assertEquals(facetFieldBucketsList.size(), 2);
-
- // Check FacetField 1
- facetFieldList = facetFieldBucketsList.get(0);
-
- // User3 has granular permissions to content within this private site, so expect the Site bucket
- Assert.assertEquals(facetFieldList.getLabel(), "SEARCH.FACET_FIELD1.SITE");
-
- bucket1 = facetFieldList.getBuckets().get(0);
- bucket1.assertThat().field("label").is(siteModel.getId());
- bucket1.assertThat().field("filterQuery").contains(siteModel.getId());
- bucket1.assertThat().field("count").is(1);
-
- // Check FacetField 2
- facetFieldList = facetFieldBucketsList.get(1);
- Assert.assertEquals(facetFieldList.getLabel(), "SEARCH.FACET_FIELD2.Mimetype");
- Assert.assertEquals(facetFieldList.getBuckets().size(), 1); // MimeType bucket will be shown with 1 bucket only
-
- // User3 has access to text file alone, so expect bucket for text/plain and not for html content.
- bucket1 = facetFieldList.getBuckets().get(0);
- bucket1.assertThat().field("label").is("text/plain");
- bucket1.assertThat().field("label").isNot("text/html");
- bucket1.assertThat().field("filterQuery").contains("text/plain");
- bucket1.assertThat().field("count").is(1);
- bucket1.assertThat().field("display").is("Plain Text");
- }
}
diff --git a/e2e-test/resources/SearchSuite.xml b/e2e-test/resources/SearchSuite.xml
index 9bfd55eea..425276be0 100644
--- a/e2e-test/resources/SearchSuite.xml
+++ b/e2e-test/resources/SearchSuite.xml
@@ -13,6 +13,7 @@
+