diff --git a/e2e-test/java/org/alfresco/rest/search/AbstractSearchTest.java b/e2e-test/java/org/alfresco/rest/search/AbstractSearchTest.java
index 4eeb2abc6..560f385dd 100644
--- a/e2e-test/java/org/alfresco/rest/search/AbstractSearchTest.java
+++ b/e2e-test/java/org/alfresco/rest/search/AbstractSearchTest.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2017 Alfresco Software Limited.
+ * Copyright (C) 2018 Alfresco Software Limited.
*
* This file is part of Alfresco
*
@@ -18,9 +18,10 @@
*/
package org.alfresco.rest.search;
+import org.alfresco.dataprep.SiteService.Visibility;
import org.alfresco.rest.RestTest;
-import org.alfresco.rest.model.builder.NodesBuilder;
-import org.alfresco.utility.model.ContentModel;
+import org.alfresco.utility.Utility;
+import org.alfresco.utility.data.RandomData;
import org.alfresco.utility.model.FileModel;
import org.alfresco.utility.model.FileType;
import org.alfresco.utility.model.FolderModel;
@@ -36,41 +37,65 @@ import org.testng.annotations.BeforeClass;
*
Preparing search requests.
*
* @author Michael Suzuki
+ * @author Meenal Bhave
*
*/
public class AbstractSearchTest extends RestTest
{
- protected static final String SEARCH_DATA_SAMPLE_FOLDER = "folder";
+
+ protected static final String SEARCH_DATA_SAMPLE_FOLDER = "FolderSearch";
UserModel userModel, adminUserModel;
SiteModel siteModel;
UserModel searchedUser;
- NodesBuilder nodesBuilder;
- protected FileModel file,file2;
+ protected FileModel file, file2, file3, file4;
+
+ protected static String unique_searchString;
@BeforeClass(alwaysRun = true)
public void dataPreparation() throws Exception
{
adminUserModel = dataUser.getAdminUser();
- userModel = dataUser.createRandomTestUser();
- siteModel = dataSite.usingUser(userModel).createPublicRandomSite();
+ userModel = dataUser.createRandomTestUser("UserSearch");
+
+ siteModel = new SiteModel(RandomData.getRandomName("SiteSearch"));
+ siteModel.setVisibility(Visibility.PRIVATE);
+
+ siteModel = dataSite.usingUser(userModel).createSite(siteModel);
+
+ unique_searchString = siteModel.getTitle().replace("SiteSearch", "Unique");
+
/*
* Create the following file structure for preconditions :
* |- folder
* |-- pangram.txt
- * |-- cars.pdf
+ * |-- cars.txt
+ * |-- alfresco.txt
+ * |--
*/
- nodesBuilder = restClient.authenticateUser(userModel).withCoreAPI().usingNode(ContentModel.my()).defineNodes();
+
FolderModel folder = new FolderModel(SEARCH_DATA_SAMPLE_FOLDER);
dataContent.usingUser(userModel).usingSite(siteModel).createFolder(folder);
+
//Create files
- 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());
- dataContent.usingUser(userModel).usingSite(siteModel).usingResource(cm).createContent(file);
- dataContent.usingUser(userModel).usingSite(siteModel).usingResource(cm).createContent(file2);
+ String title = "Title: " + unique_searchString;
+ String description = "Description: File is created for search tests by Author: " + unique_searchString + " . ";
+
+ file = new FileModel("pangram.txt", "pangram" + title, description, FileType.TEXT_PLAIN, description + " The quick brown fox jumps over the lazy dog");
+
+ file2 = new FileModel("cars.txt", "cars" + title, description, FileType.TEXT_PLAIN, "The landrover discovery is not a sports car ");
+
+ file3 = new FileModel("alfresco.txt", "alfresco", "alfresco", FileType.TEXT_PLAIN, "Alfresco text file for search ");
+
+ file4 = new FileModel(unique_searchString + ".txt", "uniquee" + title, description, FileType.TEXT_PLAIN, "Unique text file for search ");
+
+ dataContent.usingUser(userModel).usingSite(siteModel).usingResource(folder).createContent(file);
+ dataContent.usingUser(userModel).usingSite(siteModel).usingResource(folder).createContent(file2);
+ dataContent.usingUser(userModel).usingSite(siteModel).usingResource(folder).createContent(file3);
+ dataContent.usingUser(userModel).usingSite(siteModel).usingResource(folder).createContent(file4);
+
+ waitForIndexing(file4.getName(), true);
}
+
/**
* Helper method which create an http post request to Search API end point.
* @param term String search term
@@ -84,7 +109,7 @@ public class AbstractSearchTest extends RestTest
queryReq.setLanguage("afts");
queryReq.setQuery(term);
SearchRequest query = new SearchRequest(queryReq);
- return restClient.authenticateUser(dataUser.getAdminUser()).withSearchAPI().search(query);
+ return restClient.authenticateUser(userModel).withSearchAPI().search(query);
}
/**
* Helper method which create an http post request to Search API end point.
@@ -97,7 +122,7 @@ public class AbstractSearchTest extends RestTest
{
SearchRequest query = new SearchRequest(queryReq);
query.setHighlight(highlight);
- return restClient.authenticateUser(dataUser.getAdminUser()).withSearchAPI().search(query);
+ return restClient.authenticateUser(userModel).withSearchAPI().search(query);
}
/**
* Helper method which create an http post request to Search API end point.
@@ -108,7 +133,7 @@ public class AbstractSearchTest extends RestTest
*/
protected SearchResponse query(SearchRequest query) throws Exception
{
- return restClient.authenticateUser(dataUser.getAdminUser()).withSearchAPI().search(query);
+ return restClient.authenticateUser(userModel).withSearchAPI().search(query);
}
protected SearchRequest createQuery(String term)
{
@@ -122,4 +147,48 @@ public class AbstractSearchTest extends RestTest
{
return createQuery("cars");
}
+
+ /**
+ * Wait for Solr to finish indexing: Indexing has caught up = true if search returns appropriate results
+ * @param userQuery: string to search for, unique search string will guarantee accurate results
+ * @param expectedInResults, true if entry is expected in the results set
+ * @return true (indexing is finished) if search returns appropriate results
+ * @throws Exception
+ */
+ public boolean waitForIndexing(String userQuery, Boolean expectedInResults) throws Exception
+ {
+ Boolean found = false;
+ Boolean resultAsExpected = false;
+
+ SearchRequest searchRequest = createQuery(userQuery);
+ SearchResponse response = query(searchRequest);
+
+ // Repeat search until the query results are as expected or Search Retry count is hit
+ for (int searchCount = 1; searchCount <= 3; searchCount++)
+ {
+ if (searchCount > 1)
+ {
+ // Wait for the solr indexing.
+ Utility.waitToLoopTime(properties.getSolrWaitTimeInSeconds(), "Wait For Indexing");
+ }
+
+ if (response.getEntries().size() >= 1)
+ {
+ found = true;
+ }
+ else
+ {
+ found = false;
+ }
+
+ // Loop again if result is not as expected: To cater for solr lag: eventual consistency
+ resultAsExpected = (expectedInResults.equals(found));
+ if (resultAsExpected)
+ {
+ break;
+ }
+ }
+
+ return resultAsExpected;
+ }
}
diff --git a/e2e-test/java/org/alfresco/rest/search/FacetIntervalSearchTest.java b/e2e-test/java/org/alfresco/rest/search/FacetIntervalSearchTest.java
index 9d8d74b37..d32f3ebe9 100644
--- a/e2e-test/java/org/alfresco/rest/search/FacetIntervalSearchTest.java
+++ b/e2e-test/java/org/alfresco/rest/search/FacetIntervalSearchTest.java
@@ -48,23 +48,23 @@ public class FacetIntervalSearchTest extends AbstractSearchTest
facetIntervalsModel.setIntervals(Arrays.asList(facetInterval));
query.setFacetIntervals(facetIntervalsModel);
- SearchResponse response = query(query);
+ query(query);
restClient.assertStatusCodeIs(HttpStatus.BAD_REQUEST).assertLastError()
.containsSummary(String.format(RestErrorModel.MANDATORY_PARAM, "facetIntervals intervals field"));
facetInterval.setField("created");
- response = query(query);
+ query(query);
restClient.assertStatusCodeIs(HttpStatus.BAD_REQUEST).assertLastError()
.containsSummary(String.format(RestErrorModel.MANDATORY_COLLECTION, "facetIntervals intervals sets"));
RestRequestFacetSetModel restFacetSetModel = new RestRequestFacetSetModel();
restFacetSetModel.setLabel("theRest");
facetInterval.setSets(Arrays.asList(restFacetSetModel));
- response = query(query);
+ query(query);
restClient.assertStatusCodeIs(HttpStatus.BAD_REQUEST).assertLastError()
.containsSummary(String.format(RestErrorModel.MANDATORY_PARAM, "facetIntervals intervals created sets start"));
restFacetSetModel.setStart("A");
- response = query(query);
+ query(query);
restClient.assertStatusCodeIs(HttpStatus.BAD_REQUEST).assertLastError()
.containsSummary(String.format(RestErrorModel.MANDATORY_PARAM, "facetIntervals intervals created sets end"));
@@ -74,7 +74,8 @@ public class FacetIntervalSearchTest extends AbstractSearchTest
duplicate.setLabel("theRest");
duplicate.setStart("A");
duplicate.setEnd("C");
- response = query(query);
+
+ query(query);
restClient.assertStatusCodeIs(HttpStatus.BAD_REQUEST).assertLastError()
.containsSummary("duplicate set interval label [theRest=2]");
@@ -83,7 +84,8 @@ public class FacetIntervalSearchTest extends AbstractSearchTest
FacetInterval duplicateLabel = new FacetInterval("creator", "thesame", Arrays.asList(duplicate));
facetIntervalsModel.setIntervals(Arrays.asList(facetInterval, duplicateLabel));
query.setFacetIntervals(facetIntervalsModel);
- response = query(query);
+
+ query(query);
restClient.assertStatusCodeIs(HttpStatus.BAD_REQUEST).assertLastError()
.containsSummary("duplicate interval label [thesame=2]");
diff --git a/e2e-test/java/org/alfresco/rest/search/FacetRangeSearchTest.java b/e2e-test/java/org/alfresco/rest/search/FacetRangeSearchTest.java
index d4ae6bfa7..1add86965 100644
--- a/e2e-test/java/org/alfresco/rest/search/FacetRangeSearchTest.java
+++ b/e2e-test/java/org/alfresco/rest/search/FacetRangeSearchTest.java
@@ -61,11 +61,7 @@ import org.testng.annotations.Test;
*/
public class FacetRangeSearchTest extends AbstractSearchTest
{
- @Override
- public void dataPreparation() throws Exception
- {
- //Skip setup
- }
+
@Test(groups = { TestGroup.REST_API, TestGroup.SEARCH, TestGroup.ASS_1 })
@TestRail(section = {TestGroup.REST_API, TestGroup.SEARCH, TestGroup.ASS_1 }, executionType = ExecutionType.REGRESSION,
description = "Check facet intervals mandatory fields")
@@ -76,7 +72,7 @@ public class FacetRangeSearchTest extends AbstractSearchTest
RestRequestRangesModel facetRangeModel = new RestRequestRangesModel();
ranges.add(facetRangeModel);
query.setRanges(ranges);
- SearchResponse response = query(query);
+ query(query);
restClient.assertStatusCodeIs(HttpStatus.BAD_REQUEST).assertLastError()
.containsSummary(String.format(RestErrorModel.MANDATORY_PARAM, "field"));
@@ -84,21 +80,27 @@ public class FacetRangeSearchTest extends AbstractSearchTest
facetRangeModel.setField("content.size");
ranges.add(facetRangeModel);
query.setRanges(ranges);
- response = query(query);
+
+ query(query);
+
restClient.assertStatusCodeIs(HttpStatus.BAD_REQUEST).assertLastError()
.containsSummary(String.format(RestErrorModel.MANDATORY_PARAM, "start"));
facetRangeModel.setStart("0");
ranges.clear();
ranges.add(facetRangeModel);
query.setRanges(ranges);
- response = query(query);
+
+ query(query);
+
restClient.assertStatusCodeIs(HttpStatus.BAD_REQUEST).assertLastError()
.containsSummary(String.format(RestErrorModel.MANDATORY_PARAM, "end"));
facetRangeModel.setEnd("400");
query.setRanges(ranges);
ranges.clear();
ranges.add(facetRangeModel);
- response = query(query);
+
+ query(query);
+
restClient.assertStatusCodeIs(HttpStatus.BAD_REQUEST).assertLastError()
.containsSummary(String.format(RestErrorModel.MANDATORY_PARAM, "gap"));
diff --git a/e2e-test/java/org/alfresco/rest/search/FacetedSearchTest.java b/e2e-test/java/org/alfresco/rest/search/FacetedSearchTest.java
index a8eccf613..351281858 100644
--- a/e2e-test/java/org/alfresco/rest/search/FacetedSearchTest.java
+++ b/e2e-test/java/org/alfresco/rest/search/FacetedSearchTest.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2017 Alfresco Software Limited.
+ * Copyright (C) 2018 Alfresco Software Limited.
*
* This file is part of Alfresco
*
@@ -36,9 +36,6 @@ import org.testng.annotations.Test;
public class FacetedSearchTest extends AbstractSearchTest
{
- @Test(groups = { TestGroup.REST_API, TestGroup.SEARCH, TestGroup.ASS_1 })
- @TestRail(section = {TestGroup.REST_API, TestGroup.SEARCH, TestGroup.ASS_1 }, executionType = ExecutionType.REGRESSION,
- description = "Checks facet queries for the Search api")
/**
* Perform the below facet query.
* {
@@ -89,13 +86,16 @@ public class FacetedSearchTest extends AbstractSearchTest
* }}
* @throws Exception
*/
+
+ @Test(groups = { TestGroup.REST_API, TestGroup.SEARCH, TestGroup.ASS_1 })
+ @TestRail(section = { TestGroup.REST_API, TestGroup.SEARCH,
+ TestGroup.ASS_1 }, executionType = ExecutionType.REGRESSION, description = "Checks facet queries for the Search api")
public void searchWithQueryFaceting() throws Exception
- {
+ {
SearchRequest query = new SearchRequest();
- RestRequestQueryModel queryReq = new RestRequestQueryModel();
+ RestRequestQueryModel queryReq = new RestRequestQueryModel();
queryReq.setQuery("cars");
query.setQuery(queryReq);
-
List facets = new ArrayList();
facets.add(new FacetQuery("content.size:[0 TO 102400]", "small"));
@@ -109,9 +109,11 @@ public class FacetedSearchTest extends AbstractSearchTest
query.setFacetFields(facetFields);
query.setIncludeRequest(true);
- SearchResponse response = query(query);
+ SearchResponse response = query(query);
+
response.assertThat().entriesListIsNotEmpty();
response.getContext().assertThat().field("facetQueries").isNotEmpty();
+
FacetFieldBucket facet = response.getContext().getFacetQueries().get(0);
facet.assertThat().field("label").contains("small").and().field("count").isGreaterThan(0);
facet.assertThat().field("label").contains("small").and().field("filterQuery").is("content.size:[0 TO 102400]");
@@ -173,52 +175,53 @@ public class FacetedSearchTest extends AbstractSearchTest
public void searchQueryFacetingWithGroup() throws Exception
{
SearchRequest query = new SearchRequest();
- RestRequestQueryModel queryReq = new RestRequestQueryModel();
+ RestRequestQueryModel queryReq = new RestRequestQueryModel();
queryReq.setQuery("cars");
query.setQuery(queryReq);
List facets = new ArrayList();
facets.add(new FacetQuery("content.size:[0 TO 102400]", "small", "foo"));
- facets.add(new FacetQuery("content.size:[102400 TO 1048576]", "medium","foo"));
- facets.add(new FacetQuery("content.size:[1048576 TO 16777216]", "large","foo"));
+ facets.add(new FacetQuery("content.size:[102400 TO 1048576]", "medium", "foo"));
+ facets.add(new FacetQuery("content.size:[1048576 TO 16777216]", "large", "foo"));
query.setFacetQueries(facets);
-
+
RestRequestFacetFieldsModel facetFields = new RestRequestFacetFieldsModel();
List list = new ArrayList<>();
list.add(new RestRequestFacetFieldModel("'content.size'"));
facetFields.setFacets(list);
-
query.setFacetFields(facetFields);
- SearchResponse response = query(query);
- //We don't expect to see the FacetQueries if group is being used.
+
+ SearchResponse response = query(query);
+
+ // We don't expect to see the FacetQueries if group is being used.
Assert.assertTrue(response.getContext().getFacetQueries() == null);
- //Validate the facet field structure is correct.
+ // Validate the facet field structure is correct.
Assert.assertFalse(response.getContext().getFacets().isEmpty());
Assert.assertEquals(response.getContext().getFacets().get(0).getLabel(), "foo");
-
+
RestGenericBucketModel bucket = response.getContext().getFacets().get(0).getBuckets().get(0);
bucket.assertThat().field("label").isNotEmpty();
- Assert.assertEquals( bucket.getMetrics().get(0).getType(), "count");
- Assert.assertNotEquals( bucket.getMetrics().get(0).getValue(), "");
+ Assert.assertEquals(bucket.getMetrics().get(0).getType(), "count");
+ Assert.assertNotEquals(bucket.getMetrics().get(0).getValue(), "");
bucket.assertThat().field("filterQuery").isNotEmpty();
response.getContext().getFacets().get(0).getBuckets().forEach(action -> {
switch (action.getLabel())
{
- case "small":
- Assert.assertEquals(action.getFilterQuery(), "content.size:[0 TO 102400]");
- break;
- case "medium":
- Assert.assertEquals(action.getFilterQuery(), "content.size:[102400 TO 1048576]");
- break;
- case "large":
- Assert.assertEquals(action.getFilterQuery(), "content.size:[1048576 TO 16777216]");
- break;
+ case "small":
+ Assert.assertEquals(action.getFilterQuery(), "content.size:[0 TO 102400]");
+ break;
+ case "medium":
+ Assert.assertEquals(action.getFilterQuery(), "content.size:[102400 TO 1048576]");
+ break;
+ case "large":
+ Assert.assertEquals(action.getFilterQuery(), "content.size:[1048576 TO 16777216]");
+ break;
- default:
- throw new TestException("Unexpected value returned");
+ default:
+ throw new TestException("Unexpected value returned");
}
});
-
+
}
@Test
@@ -235,29 +238,34 @@ public class FacetedSearchTest extends AbstractSearchTest
public void searchWithFactedFields() throws Exception
{
SearchRequest query = new SearchRequest();
- RestRequestQueryModel queryReq = new RestRequestQueryModel();
- queryReq.setQuery("*");
+ RestRequestQueryModel queryReq = new RestRequestQueryModel();
+ queryReq.setQuery(unique_searchString);
query.setQuery(queryReq);
+
RestRequestFacetFieldsModel facetFields = new RestRequestFacetFieldsModel();
- Listfacets = new ArrayList();
+ List facets = new ArrayList();
facets.add(new RestRequestFacetFieldModel("cm:mimetype"));
facets.add(new RestRequestFacetFieldModel("modifier"));
facetFields.setFacets(facets);
query.setFacetFields(facetFields);
- SearchResponse response = query(query);
+
+ SearchResponse response = query(query);
+
Assert.assertFalse(response.getContext().getFacetsFields().isEmpty());
Assert.assertNull(response.getContext().getFacetQueries());
Assert.assertNull(response.getContext().getFacets());
+
RestResultBucketsModel model = response.getContext().getFacetsFields().get(0);
Assert.assertEquals(model.getLabel(), "modifier");
-
+
model.assertThat().field("label").is("modifier");
FacetFieldBucket bucket1 = model.getBuckets().get(0);
- bucket1.assertThat().field("label").is("System");
- bucket1.assertThat().field("display").is("System");
- bucket1.assertThat().field("filterQuery").is("modifier:\"System\"");
- bucket1.assertThat().field("count").is(684);
+ bucket1.assertThat().field("label").is(userModel.getUsername());
+ bucket1.assertThat().field("display").is(userModel.getUsername() + " FirstName LN-" + userModel.getUsername());
+ bucket1.assertThat().field("filterQuery").is("modifier:\"" + userModel.getUsername() + "\"");
+ bucket1.assertThat().field("count").is(1);
}
+
@Test
/**
* Test that items returned are in the format of generic facets.
@@ -274,29 +282,31 @@ public class FacetedSearchTest extends AbstractSearchTest
public void searchWithFactedFieldsFacetFormatV2() throws Exception
{
SearchRequest query = new SearchRequest();
- RestRequestQueryModel queryReq = new RestRequestQueryModel();
- queryReq.setQuery("*");
+ RestRequestQueryModel queryReq = new RestRequestQueryModel();
+ queryReq.setQuery(unique_searchString);
query.setQuery(queryReq);
query.setFacetFormat("V2");
RestRequestFacetFieldsModel facetFields = new RestRequestFacetFieldsModel();
- Listfacets = new ArrayList();
+ List facets = new ArrayList();
facets.add(new RestRequestFacetFieldModel("cm:mimetype"));
facets.add(new RestRequestFacetFieldModel("modifier"));
facetFields.setFacets(facets);
query.setFacetFields(facetFields);
- SearchResponse response = query(query);
+
+ SearchResponse response = query(query);
+
Assert.assertNull(response.getContext().getFacetsFields());
Assert.assertNull(response.getContext().getFacetQueries());
Assert.assertFalse(response.getContext().getFacets().isEmpty());
RestGenericFacetResponseModel model = response.getContext().getFacets().get(0);
Assert.assertEquals(model.getLabel(), "modifier");
-
+
model.assertThat().field("label").is("modifier");
RestGenericBucketModel bucket1 = model.getBuckets().get(0);
- bucket1.assertThat().field("label").is("System");
- bucket1.assertThat().field("display").isNull();
- bucket1.assertThat().field("filterQuery").is("modifier:\"System\"");
- bucket1.assertThat().field("metrics").is("[{entry=null, type=count, value={count=684}}]");
+ bucket1.assertThat().field("label").is(userModel.getUsername());
+ bucket1.assertThat().field("display").is(userModel.getUsername() + " FirstName LN-" + userModel.getUsername());
+ bucket1.assertThat().field("filterQuery").is("modifier:\"" + userModel.getUsername() + "\"");
+ bucket1.assertThat().field("metrics").is("[{entry=null, type=count, value={count=1}}]");
}
}
diff --git a/e2e-test/java/org/alfresco/rest/search/FingerPrintTest.java b/e2e-test/java/org/alfresco/rest/search/FingerPrintTest.java
index 675d5da3c..04e0e57bf 100644
--- a/e2e-test/java/org/alfresco/rest/search/FingerPrintTest.java
+++ b/e2e-test/java/org/alfresco/rest/search/FingerPrintTest.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2017 Alfresco Software Limited.
+ * Copyright (C) 2018 Alfresco Software Limited.
*
* This file is part of Alfresco
*
@@ -18,7 +18,6 @@
*/
package org.alfresco.rest.search;
-import org.alfresco.utility.model.ContentModel;
import org.alfresco.utility.model.FileModel;
import org.alfresco.utility.model.FileType;
import org.alfresco.utility.model.FolderModel;
@@ -34,34 +33,37 @@ import org.testng.annotations.Test;
*/
public class FingerPrintTest extends AbstractSearchTest
{
- private FileModel file1,file2,file3,file4;
- @BeforeClass
+ private FileModel file1, file2, file3, file4;
+
+ @BeforeClass(alwaysRun = true)
public void indexSimilarFile() throws Exception
{
- adminUserModel = dataUser.getAdminUser();
- userModel = dataUser.createRandomTestUser();
- siteModel = dataSite.usingUser(userModel).createPublicRandomSite();
+
/*
- * Create the following file structure for preconditions :
- * |- folder
- * |-- fox.txt
+ * Create the following file structure in the same Site : In addition to the preconditions created in dataPreparation
+ * |- folder
+ * |-- pangram-banana.txt
+ * |-- pangram-taco.txt
+ * |-- pangram-cat.txt
+ * |-- dog.txt
*/
- nodesBuilder = restClient.authenticateUser(userModel).withCoreAPI().usingNode(ContentModel.my()).defineNodes();
- FolderModel folder = new FolderModel(SEARCH_DATA_SAMPLE_FOLDER);
+
+ FolderModel folder = new FolderModel("The quick brown fox jumps over");
dataContent.usingUser(userModel).usingSite(siteModel).createFolder(folder);
+
file1 = new FileModel("pangram-banana.txt", FileType.TEXT_PLAIN, "The quick brown fox jumps over the lazy banana");
file2 = new FileModel("pangram-taco.txt", FileType.TEXT_PLAIN, "The quick brown fox jumps over the lazy dog that ate the taco");
file3 = new FileModel("pangram-cat.txt", FileType.TEXT_PLAIN, "The quick brown fox jumps over the lazy cat");
file4 = new FileModel("dog.txt", FileType.TEXT_PLAIN, "The quick brown fox ate the lazy dog");
- ContentModel cm = new ContentModel();
- cm.setCmisLocation(folder.getCmisLocation());
- cm.setName(folder.getName());
- dataContent.usingUser(userModel).usingSite(siteModel).usingResource(cm).createContent(file1);
- dataContent.usingUser(userModel).usingSite(siteModel).usingResource(cm).createContent(file2);
- dataContent.usingUser(userModel).usingSite(siteModel).usingResource(cm).createContent(file3);
- dataContent.usingUser(userModel).usingSite(siteModel).usingResource(cm).createContent(file4);
- Thread.sleep(35000);//Allow indexing to complete.
+
+ dataContent.usingUser(userModel).usingSite(siteModel).usingResource(folder).createContent(file1);
+ dataContent.usingUser(userModel).usingSite(siteModel).usingResource(folder).createContent(file2);
+ dataContent.usingUser(userModel).usingSite(siteModel).usingResource(folder).createContent(file3);
+ dataContent.usingUser(userModel).usingSite(siteModel).usingResource(folder).createContent(file4);
+
+ waitForIndexing(file4.getName(), true);
}
+
/**
* Search similar document based on document finger print.
* The data prep should have loaded 2 files which one is similar
@@ -70,7 +72,7 @@ public class FingerPrintTest extends AbstractSearchTest
*
* @throws Exception
*/
- @Test(groups= {TestGroup.REST_API, TestGroup.SEARCH, TestGroup.ASS_1})
+ @Test(groups = { TestGroup.REST_API, TestGroup.SEARCH, TestGroup.ASS_1 })
public void search() throws Exception
{
String uuid = file1.getNodeRefWithoutVersion();
@@ -79,46 +81,50 @@ public class FingerPrintTest extends AbstractSearchTest
SearchResponse response = query(fingerprint);
int count = response.getEntries().size();
Assert.assertTrue(count > 1);
- for(SearchNodeModel m :response.getEntries())
+ for (SearchNodeModel m : response.getEntries())
{
String match = m.getModel().getName();
switch (match)
{
- case "pangram.txt":
- break;
- case "pangram-banana.txt":
- break;
- case "pangram-taco.txt":
- break;
- case "pangram-cat.txt":
- break;
- default:
- throw new AssertionError("Not a match to an expected file: " + m.getModel().getName());
+ case "pangram.txt":
+ break;
+ case "pangram-banana.txt":
+ break;
+ case "pangram-taco.txt":
+ break;
+ case "pangram-cat.txt":
+ break;
+ default:
+ throw new AssertionError("Not a match to an expected file: " + m.getModel().getName());
}
m.getModel().assertThat().field("name").isNot("dog.txt");
m.getModel().assertThat().field("name").isNot("cars.txt");
}
}
- @Test(groups= {TestGroup.REST_API, TestGroup.SEARCH, TestGroup.ASS_1})
+
+ @Test(groups = { TestGroup.REST_API, TestGroup.SEARCH, TestGroup.ASS_1 })
public void searchSimilar() throws Exception
{
String uuid = file2.getNodeRefWithoutVersion();
Assert.assertNotNull(uuid);
- // In the response eneity there is a score of each doc, change below threshold to bring more like or less.
- String fingerprint = String.format("FINGERPRINT:%s_68", uuid);
+
+ // In the response entity there is a score of each doc, change below threshold to bring more like or less.
+ String fingerprint = String.format("FINGERPRINT:%s_68", uuid);
SearchResponse response = query(fingerprint);
+
int count = response.getEntries().size();
Assert.assertTrue(count > 1);
- for(SearchNodeModel m :response.getEntries())
+
+ for (SearchNodeModel m : response.getEntries())
{
switch (m.getModel().getName())
{
- case "pangram.txt":
- break;
- case "pangram-taco.txt":
- break;
- default:
- throw new AssertionError("Not a match to an expected file: " + m.getModel().getName());
+ case "pangram.txt":
+ break;
+ case "pangram-taco.txt":
+ break;
+ default:
+ throw new AssertionError("Not a match to an expected file: " + m.getModel().getName());
}
m.getModel().assertThat().field("name").isNot("pangram-banana.txt");
m.getModel().assertThat().field("name").isNot("pangram-cat.txt");
@@ -126,7 +132,8 @@ public class FingerPrintTest extends AbstractSearchTest
m.getModel().assertThat().field("name").isNot("cars.txt");
}
}
- @Test(groups= {TestGroup.REST_API, TestGroup.SEARCH, TestGroup.ASS_1})
+
+ @Test(groups = { TestGroup.REST_API, TestGroup.SEARCH, TestGroup.ASS_1 })
public void searchSimilar67Percent() throws Exception
{
String uuid = file2.getNodeRefWithoutVersion();
@@ -135,18 +142,18 @@ public class FingerPrintTest extends AbstractSearchTest
SearchResponse response = query(fingerprint);
int count = response.getEntries().size();
Assert.assertTrue(count > 1);
- for(SearchNodeModel m :response.getEntries())
+ for (SearchNodeModel m : response.getEntries())
{
switch (m.getModel().getName())
{
- case "pangram.txt":
- break;
- case "pangram-taco.txt":
- break;
- case "pangram-cat.txt":
- break;
- default:
- throw new AssertionError("Not a match to an expected file: " + m.getModel().getName());
+ case "pangram.txt":
+ break;
+ case "pangram-taco.txt":
+ break;
+ case "pangram-cat.txt":
+ break;
+ default:
+ throw new AssertionError("Not a match to an expected file: " + m.getModel().getName());
}
m.getModel().assertThat().field("name").isNot("pangram-banana.txt");
m.getModel().assertThat().field("name").isNot("dog.txt");
diff --git a/e2e-test/java/org/alfresco/rest/search/PivotFacetedSearchTest.java b/e2e-test/java/org/alfresco/rest/search/PivotFacetedSearchTest.java
index bc54be77d..c21b9e2c7 100644
--- a/e2e-test/java/org/alfresco/rest/search/PivotFacetedSearchTest.java
+++ b/e2e-test/java/org/alfresco/rest/search/PivotFacetedSearchTest.java
@@ -60,12 +60,15 @@ public class PivotFacetedSearchTest extends AbstractSearchTest
pivotModelList.add(pivots);
query.setPivots(pivotModelList);
- SearchResponse response = query(query);
+ query(query);
+
restClient.assertStatusCodeIs(HttpStatus.BAD_REQUEST).assertLastError()
.containsSummary(String.format(RestErrorModel.MANDATORY_PARAM, "pivot key"));
pivots.setKey("none_like_this");
- response = query(query);
+
+ query(query);
+
restClient.assertStatusCodeIs(HttpStatus.BAD_REQUEST)
.assertLastError().containsSummary("invalid argument was received")
.containsSummary("Pivot parameter none_like_this does not reference");
diff --git a/e2e-test/java/org/alfresco/rest/search/SearchAPATHTest.java b/e2e-test/java/org/alfresco/rest/search/SearchAPATHTest.java
index 030494997..0a2b9c762 100644
--- a/e2e-test/java/org/alfresco/rest/search/SearchAPATHTest.java
+++ b/e2e-test/java/org/alfresco/rest/search/SearchAPATHTest.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2017 Alfresco Software Limited.
+ * Copyright (C) 2018 Alfresco Software Limited.
*
* This file is part of Alfresco
*
@@ -116,12 +116,15 @@ public class SearchAPATHTest extends AbstractSearchTest
Assert.assertEquals(4,fresponse.getBuckets().size());
fresponse.getBuckets().get(0).assertThat().field("label").contains("1/");
}
+
@Test(groups={TestGroup.SEARCH, TestGroup.REST_API, TestGroup.ASS_1})
public void searchLevel2() throws Exception
{
+ String queryString = "name:"+ "cars";
+
SearchRequest searchQuery = new SearchRequest();
RestRequestQueryModel queryReq = new RestRequestQueryModel();
- queryReq.setQuery("name:*");
+ queryReq.setQuery(queryString);
searchQuery.setQuery(queryReq);
RestRequestFacetFieldsModel facetFields = new RestRequestFacetFieldsModel();
@@ -131,6 +134,7 @@ public class SearchAPATHTest extends AbstractSearchTest
searchQuery.setFacetFields(facetFields);
SearchResponse response = query(searchQuery);
+
RestResultBucketsModel fresponse = response.getContext().getFacetsFields().get(0);
String path = fresponse.getBuckets().get(0).getLabel().replace("1/", "2/");
list.remove(0);
@@ -140,7 +144,7 @@ public class SearchAPATHTest extends AbstractSearchTest
searchQuery.setFacetFields(facetFields);
response = query(searchQuery);
fresponse = response.getContext().getFacetsFields().get(0);
- Assert.assertEquals(fresponse.getBuckets().size(),3);
+ Assert.assertTrue(fresponse.getBuckets().size() >= 1);
fresponse.getBuckets().get(0).assertThat().field("label").contains("2/");
fresponse.getBuckets().get(0).assertThat().field("label").contains(path);
/**
@@ -151,7 +155,7 @@ public class SearchAPATHTest extends AbstractSearchTest
*/
searchQuery = new SearchRequest();
queryReq = new RestRequestQueryModel();
- queryReq.setQuery("name:*");
+ queryReq.setQuery(queryString);
searchQuery.setQuery(queryReq);
facetFields = new RestRequestFacetFieldsModel();
list.remove(0);
@@ -160,8 +164,7 @@ public class SearchAPATHTest extends AbstractSearchTest
searchQuery.setFacetFields(facetFields);
response = query(searchQuery);
fresponse = response.getContext().getFacetsFields().get(0);
- System.out.println(response);
- Assert.assertTrue(fresponse.getBuckets().size() > 5);
+ Assert.assertTrue(fresponse.getBuckets().size() >= 1);
fresponse.getBuckets().get(0).assertThat().field("label").contains("3/");
}
}
diff --git a/e2e-test/java/org/alfresco/rest/search/SearchSpellCheckTest.java b/e2e-test/java/org/alfresco/rest/search/SearchSpellCheckTest.java
index a13e447fb..c55d0b215 100644
--- a/e2e-test/java/org/alfresco/rest/search/SearchSpellCheckTest.java
+++ b/e2e-test/java/org/alfresco/rest/search/SearchSpellCheckTest.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2017 Alfresco Software Limited.
+ * Copyright (C) 2018 Alfresco Software Limited.
*
* This file is part of Alfresco
*
@@ -19,6 +19,8 @@
package org.alfresco.rest.search;
import org.alfresco.rest.model.RestRequestSpellcheckModel;
+import org.alfresco.utility.model.FileModel;
+import org.alfresco.utility.model.FileType;
import org.alfresco.utility.model.TestGroup;
import org.junit.Assert;
import org.testng.annotations.Test;
@@ -26,10 +28,11 @@ import org.testng.annotations.Test;
/**
* Search end point Public API test with spell checking enabled.
* @author Michael Suzuki
- *5
+ * @author Meenal Bhave
*/
public class SearchSpellCheckTest extends AbstractSearchTest
{
+
/**
* Perform the below query
* {
@@ -61,24 +64,48 @@ public class SearchSpellCheckTest extends AbstractSearchTest
*
* @throws Exception
*/
- @Test(groups={TestGroup.SEARCH, TestGroup.REST_API})
- public void searchMissSpelled() throws Exception
+ @Test(groups={TestGroup.SEARCH, TestGroup.REST_API, TestGroup.ACS_60n}, priority=1)
+ public void testSearchMissSpelled() throws Exception
{
+ // Name
SearchRequest searchReq = new SearchRequest();
RestRequestQueryModel queryReq = new RestRequestQueryModel();
+ queryReq.setQuery("cm:name:alfrezco");
+ queryReq.setUserQuery("alfrezco");
+ searchReq.setQuery(queryReq);
+ searchReq.setSpellcheck(new RestRequestSpellcheckModel());
+ assertResponse(query(searchReq));
+
+ // Title
queryReq.setQuery("cm:title:alfrezco");
queryReq.setUserQuery("alfrezco");
searchReq.setQuery(queryReq);
searchReq.setSpellcheck(new RestRequestSpellcheckModel());
assertResponse(query(searchReq));
+
+ // Description
+ queryReq.setQuery("cm:description:alfrezco");
+ queryReq.setUserQuery("alfrezco");
+ searchReq.setQuery(queryReq);
+ searchReq.setSpellcheck(new RestRequestSpellcheckModel());
+ assertResponse(query(searchReq));
+
+ // Content
+ queryReq.setQuery("cm:content:alfrezco");
+ queryReq.setUserQuery("alfrezco");
+ searchReq.setQuery(queryReq);
+ searchReq.setSpellcheck(new RestRequestSpellcheckModel());
+ assertResponse(query(searchReq));
}
+
private void assertResponse(SearchResponse nodes) throws Exception
{
nodes.assertThat().entriesListIsNotEmpty();
nodes.getContext().assertThat().field("spellCheck").isNotEmpty();
nodes.getContext().getSpellCheck().assertThat().field("suggestions").contains("alfresco");
+ nodes.getContext().getSpellCheck().assertThat().field("type").is("searchInsteadFor");
}
- @Test
+
/**
* Perform alternative way by setting the value in spellcheck object.
*
@@ -91,7 +118,8 @@ public class SearchSpellCheckTest extends AbstractSearchTest
* }
* @throws Exception
*/
- public void searchMissSpelledVersion2() throws Exception
+ @Test(groups={TestGroup.SEARCH, TestGroup.REST_API, TestGroup.ACS_60n}, priority=2)
+ public void testSearchMissSpelledVersion2() throws Exception
{
SearchRequest searchReq = new SearchRequest();
RestRequestQueryModel queryReq = new RestRequestQueryModel();
@@ -103,8 +131,9 @@ public class SearchSpellCheckTest extends AbstractSearchTest
searchReq.setSpellcheck(spellCheck);
assertResponse(query(searchReq));
}
- @Test
- public void searchWithSpellcheckerAndCorrectSpelling() throws Exception
+
+ @Test(groups={TestGroup.SEARCH, TestGroup.REST_API, TestGroup.ACS_60n}, priority=3)
+ public void testSearchWithSpellcheckerAndCorrectSpelling() throws Exception
{
SearchRequest searchReq = new SearchRequest();
RestRequestQueryModel queryReq = new RestRequestQueryModel();
@@ -113,7 +142,31 @@ public class SearchSpellCheckTest extends AbstractSearchTest
searchReq.setQuery(queryReq);
searchReq.setSpellcheck(new RestRequestSpellcheckModel());
SearchResponse res = query(searchReq);
- Assert.assertNull(res.getContext());
+ Assert.assertNull(res.getContext().getSpellCheck());
res.assertThat().entriesListIsNotEmpty();
}
+
+ @Test(groups={TestGroup.SEARCH, TestGroup.REST_API, TestGroup.ACS_60n}, priority=4)
+ public void testSpellCheckType() throws Exception
+ {
+ // Create a file with mis-spelt name, expect spellcheck type = didYouMean
+ FileModel file = new FileModel(unique_searchString + "-1.txt", "uniquee" + "uniquee", "uniquee", FileType.TEXT_PLAIN, "Unique text file for search ");
+ dataContent.usingUser(userModel).usingSite(siteModel).createContent(file);
+
+ waitForIndexing(file.getName(), true);
+
+ // Search
+ SearchRequest searchReq = new SearchRequest();
+ RestRequestQueryModel queryReq = new RestRequestQueryModel();
+ queryReq.setQuery("cm:title:uniquee");
+ queryReq.setUserQuery("uniquee");
+ searchReq.setQuery(queryReq);
+ searchReq.setSpellcheck(new RestRequestSpellcheckModel());
+ SearchResponse nodes = query(searchReq);
+
+ nodes.assertThat().entriesListIsNotEmpty();
+ nodes.getContext().assertThat().field("spellCheck").isNotEmpty();
+ nodes.getContext().getSpellCheck().assertThat().field("suggestions").contains("unique");
+ nodes.getContext().getSpellCheck().assertThat().field("type").is("didYouMean");
+ }
}
diff --git a/e2e-test/java/org/alfresco/rest/search/SearchTest.java b/e2e-test/java/org/alfresco/rest/search/SearchTest.java
index 5f038dfc6..b1a285c6c 100644
--- a/e2e-test/java/org/alfresco/rest/search/SearchTest.java
+++ b/e2e-test/java/org/alfresco/rest/search/SearchTest.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2017 Alfresco Software Limited.
+ * Copyright (C) 2018 Alfresco Software Limited.
*
* This file is part of Alfresco
*
@@ -36,14 +36,14 @@ public class SearchTest extends AbstractSearchTest
@Test(groups={TestGroup.SEARCH, TestGroup.REST_API})
public void searchOnIndexedData() throws Exception
{
- SearchResponse nodes = query("ipsum");
+ SearchResponse nodes = query(unique_searchString);
restClient.assertStatusCodeIs(HttpStatus.OK);
nodes.assertThat().entriesListIsNotEmpty();
SearchNodeModel entity = nodes.getEntryByIndex(0);
entity.assertThat().field("search").contains("score");
entity.getSearch().assertThat().field("score").isNotEmpty();
- Assert.assertEquals("Project Overview.ppt",entity.getName());
+ Assert.assertEquals("pangram.txt",entity.getName());
}
@Test(groups={TestGroup.SEARCH,TestGroup.REST_API})
diff --git a/e2e-test/java/org/alfresco/rest/search/ShardInfoTest.java b/e2e-test/java/org/alfresco/rest/search/ShardInfoTest.java
index abc59ff03..d4c5678c1 100644
--- a/e2e-test/java/org/alfresco/rest/search/ShardInfoTest.java
+++ b/e2e-test/java/org/alfresco/rest/search/ShardInfoTest.java
@@ -41,7 +41,7 @@ import org.testng.annotations.Test;
public class ShardInfoTest extends AbstractSearchTest
{
@Bug(id="DELENG-1", status=Bug.Status.OPENED)
- @Test(groups={TestGroup.SEARCH, TestGroup.REST_API})
+ @Test(groups={TestGroup.SEARCH, TestGroup.REST_API, TestGroup.ACS_60n})
public void getShardInfoWithAdminAuthority() throws JsonProcessingException, EmptyRestModelCollectionException
{
RestShardInfoModelCollection info = restClient.authenticateUser(dataUser.getAdminUser()).withShardInfoAPI().getInfo();
@@ -70,7 +70,8 @@ public class ShardInfoTest extends AbstractSearchTest
RestInstanceModel instance = instances.iterator().next();
assertNotNull(instance);
baseUrls.contains(instance.getBaseUrl());
- assertEquals(instance.getHost(), "localhost");
+ // TODO: Ideally Solr Host and Port should be Parameterised
+ assertEquals(instance.getHost(), "search");
assertEquals(instance.getPort().intValue(), 8983);
assertEquals(instance.getState(), "ACTIVE");
assertEquals(instance.getMode(), "MASTER");
@@ -78,7 +79,7 @@ public class ShardInfoTest extends AbstractSearchTest
}
@Bug(id="DELENG-1", status=Bug.Status.OPENED)
- @Test(groups={TestGroup.SEARCH, TestGroup.REST_API})
+ @Test(groups={TestGroup.SEARCH, TestGroup.REST_API, TestGroup.ACS_60n})
public void getShardInfoWithoutAdminAuthority() throws Exception
{
restClient.authenticateUser(dataUser.createRandomTestUser()).withShardInfoAPI().getInfo();
diff --git a/e2e-test/java/org/alfresco/rest/sharedLinks/SharedLinksSanityTests.java b/e2e-test/java/org/alfresco/rest/sharedLinks/SharedLinksSanityTests.java
index d41f2d646..c9dbc91fe 100644
--- a/e2e-test/java/org/alfresco/rest/sharedLinks/SharedLinksSanityTests.java
+++ b/e2e-test/java/org/alfresco/rest/sharedLinks/SharedLinksSanityTests.java
@@ -1,7 +1,5 @@
package org.alfresco.rest.sharedLinks;
-import static org.testng.Assert.assertEquals;
-
import javax.json.Json;
import org.alfresco.dataprep.CMISUtil.DocumentType;
diff --git a/e2e-test/resources/SearchSuite.xml b/e2e-test/resources/SearchSuite.xml
new file mode 100644
index 000000000..34bc53bb6
--- /dev/null
+++ b/e2e-test/resources/SearchSuite.xml
@@ -0,0 +1,35 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/e2e-test/resources/default.properties b/e2e-test/resources/default.properties
index 7c7516125..b44ef9b4a 100644
--- a/e2e-test/resources/default.properties
+++ b/e2e-test/resources/default.properties
@@ -8,6 +8,9 @@ sync.scheme=http
sync.server=localhost
sync.port=9090
+#Solr Indexing Time
+solrWaitTimeInSeconds=20
+
# credentials
admin.user=admin
admin.password=admin