diff --git a/e2e-test/java/org/alfresco/rest/search/AbstractSearchTest.java b/e2e-test/java/org/alfresco/rest/search/AbstractSearchTest.java
index 594105873..2bb43effc 100644
--- a/e2e-test/java/org/alfresco/rest/search/AbstractSearchTest.java
+++ b/e2e-test/java/org/alfresco/rest/search/AbstractSearchTest.java
@@ -111,4 +111,13 @@ public class AbstractSearchTest extends RestTest
{
return restClient.authenticateUser(dataUser.getAdminUser()).withSearchAPI().search(query);
}
+
+ protected SearchRequest carsQuery()
+ {
+ SearchRequest query = new SearchRequest();
+ RestRequestQueryModel queryReq = new RestRequestQueryModel();
+ queryReq.setQuery("cars");
+ query.setQuery(queryReq);
+ return query;
+ }
}
diff --git a/e2e-test/java/org/alfresco/rest/search/FacetIntervalSearchTest.java b/e2e-test/java/org/alfresco/rest/search/FacetIntervalSearchTest.java
index f472bff18..c32908fd0 100644
--- a/e2e-test/java/org/alfresco/rest/search/FacetIntervalSearchTest.java
+++ b/e2e-test/java/org/alfresco/rest/search/FacetIntervalSearchTest.java
@@ -159,12 +159,4 @@ public class FacetIntervalSearchTest extends AbstractSearchTest
bucket.getMetrics().get(0).assertThat().field("value").is("{count=0}");
}
- private SearchRequest carsQuery()
- {
- SearchRequest query = new SearchRequest();
- RestRequestQueryModel queryReq = new RestRequestQueryModel();
- queryReq.setQuery("cars");
- query.setQuery(queryReq);
- return query;
- }
}
diff --git a/e2e-test/java/org/alfresco/rest/search/PivotFacetedSearchTest.java b/e2e-test/java/org/alfresco/rest/search/PivotFacetedSearchTest.java
new file mode 100644
index 000000000..87f3f6e64
--- /dev/null
+++ b/e2e-test/java/org/alfresco/rest/search/PivotFacetedSearchTest.java
@@ -0,0 +1,152 @@
+/*
+ * 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.model.RestErrorModel;
+import org.alfresco.utility.model.TestGroup;
+import org.alfresco.utility.testrail.ExecutionType;
+import org.alfresco.utility.testrail.annotation.TestRail;
+import org.springframework.http.HttpStatus;
+import org.testng.Assert;
+import org.testng.TestException;
+import org.testng.annotations.Test;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Faceted search test.
+ * @author Gethin James
+ *
+ */
+public class PivotFacetedSearchTest extends AbstractSearchTest
+{
+
+ @Test(groups = { TestGroup.REST_API, TestGroup.SEARCH })
+ @TestRail(section = {TestGroup.REST_API, TestGroup.SEARCH }, executionType = ExecutionType.REGRESSION,
+ description = "Checks errors with pivot using Search api")
+ public void searchWithPivotingErrors() throws Exception
+ {
+ SearchRequest query = carsQuery();
+
+ RestRequestFacetFieldsModel facetFields = new RestRequestFacetFieldsModel();
+ List list = new ArrayList<>();
+ list.add(new RestRequestFacetFieldModel("'creator'"));
+ facetFields.setFacets(list);
+ query.setFacetFields(facetFields);
+ query.setIncludeRequest(false);
+ List pivotModelList = new ArrayList<>();
+ RestRequestPivotModel pivots = new RestRequestPivotModel();
+ pivotModelList.add(pivots);
+ query.setPivots(pivotModelList);
+
+ SearchResponse response = query(query);
+ restClient.assertStatusCodeIs(HttpStatus.BAD_REQUEST).assertLastError()
+ .containsSummary(String.format(RestErrorModel.MANDATORY_PARAM, "pivot key"));
+
+
+ pivots.setKey("none_like_this");
+ response = query(query);
+ restClient.assertStatusCodeIs(HttpStatus.BAD_REQUEST).assertLastError()
+ .containsSummary("Pivot parameter none_like_this is does not reference a facet Field");
+ }
+
+ @Test(groups = { TestGroup.REST_API, TestGroup.SEARCH })
+ @TestRail(section = {TestGroup.REST_API, TestGroup.SEARCH }, executionType = ExecutionType.REGRESSION,
+ description = "Checks with pivot using Search api")
+ public void searchWithPivoting() throws Exception
+ {
+ SearchRequest query = carsQuery();
+
+ RestRequestFacetFieldsModel facetFields = new RestRequestFacetFieldsModel();
+ List list = new ArrayList<>();
+ list.add(new RestRequestFacetFieldModel("creator"));
+ facetFields.setFacets(list);
+ query.setFacetFields(facetFields);
+ query.setIncludeRequest(false);
+
+ SearchResponse response = query(query);
+ response.getContext().assertThat().field("facetsFields").isNotNull();
+
+ List pivotModelList = new ArrayList<>();
+ RestRequestPivotModel pivots = new RestRequestPivotModel();
+ pivots.setKey("creator");
+ pivotModelList.add(pivots);
+ query.setPivots(pivotModelList);
+ response = query(query);
+
+ //Pivot key has matched facet field so there is no longer a facet fields response
+ assertPivotResponse(response, "creator", null);
+ }
+
+ private void assertPivotResponse(SearchResponse response, String field, String alabel) throws Exception
+ {
+ String label = alabel!=null?alabel:field;
+ response.getContext().assertThat().field("facetsFields").isNull();
+ response.getContext().assertThat().field("facets").isNotEmpty();
+ RestGenericFacetResponseModel facetResponseModel = response.getContext().getFacets().get(0);
+ facetResponseModel.assertThat().field("type").is("pivot");
+ facetResponseModel.assertThat().field("label").is(label);
+ RestGenericBucketModel bucket = facetResponseModel.getBuckets().get(0);
+ bucket.assertThat().field("label").isNotEmpty();
+ bucket.assertThat().field("filterQuery").is(field+":"+bucket.getLabel());
+ Assert.assertEquals("count", bucket.getMetrics().get(0).getType());
+ Assert.assertTrue(bucket.getMetrics().get(0).getValue().toString().contains("{count="));
+ }
+
+ @Test(groups = { TestGroup.REST_API, TestGroup.SEARCH })
+ @TestRail(section = {TestGroup.REST_API, TestGroup.SEARCH }, executionType = ExecutionType.REGRESSION,
+ description = "Checks with pivot using Search api and a label as a key")
+ public void searchWithPivotingUsingLabel() throws Exception
+ {
+ SearchRequest query = carsQuery();
+ RestRequestFacetFieldsModel facetFields = new RestRequestFacetFieldsModel();
+ List list = new ArrayList<>();
+ RestRequestFacetFieldModel creatorFacetFieldModel = new RestRequestFacetFieldModel("creator");
+ creatorFacetFieldModel.setLabel("create");
+ list.add(creatorFacetFieldModel);
+ RestRequestFacetFieldModel restRequestFacetFieldModel = new RestRequestFacetFieldModel("modifier");
+ restRequestFacetFieldModel.setLabel("aLabel");
+ list.add(restRequestFacetFieldModel);
+ facetFields.setFacets(list);
+ query.setFacetFields(facetFields);
+ query.setIncludeRequest(false);
+ RestRequestPivotModel pivots = new RestRequestPivotModel();
+ pivots.setKey("create");
+ RestRequestPivotModel pivotmod = new RestRequestPivotModel();
+ pivotmod.setKey("aLabel");
+
+ List pivotModelList = new ArrayList<>();
+ pivotModelList.add(pivots);
+ pivotModelList.add(pivotmod);
+ query.setPivots(pivotModelList);
+ SearchResponse response = query(query);
+ assertPivotResponse(response, "creator", "create");
+
+ //Now check the nesting
+ RestGenericFacetResponseModel facetResponseModel = response.getContext().getFacets().get(0);
+ RestGenericFacetResponseModel nestedFacet = facetResponseModel.getBuckets().get(0).getFacets().get(0);
+ RestGenericBucketModel bucket = nestedFacet.getBuckets().get(0);
+ nestedFacet.assertThat().field("label").isNotEmpty();
+ nestedFacet.assertThat().field("label").is("aLabel");
+ bucket.assertThat().field("filterQuery").is("modifier:"+bucket.getLabel());
+ Assert.assertEquals("count", bucket.getMetrics().get(0).getType());
+ Assert.assertTrue(bucket.getMetrics().get(0).getValue().toString().contains("{count="));
+ }
+}