first implementation: existing tests all Ok, grouping does not yet really work, index...
[cdmlib.git] / cdmlib-services / src / test / java / eu / etaxonomy / cdm / api / service / TaxonServiceSearchTest.java
index adcb17c6d3abb207a6ab7bf3a2d1b6f4bcefbfaa..6370db7f0969baed55151af6b65cd3dfe57d0c69 100644 (file)
@@ -18,6 +18,7 @@ import java.io.IOException;
 import java.util.Arrays;\r
 import java.util.HashSet;\r
 import java.util.List;\r
+import java.util.Map;\r
 import java.util.Set;\r
 import java.util.UUID;\r
 \r
@@ -289,18 +290,25 @@ public class TaxonServiceSearchTest extends CdmTransactionalIntegrationTest {
     @DataSet\r
     public final void testFindByDescriptionElementFullText_Paging() throws CorruptIndexException, IOException, ParseException {\r
 \r
-        TaxonDescription description = (TaxonDescription) descriptionService.find(UUID.fromString(D_ABIES_ALBA_UUID));\r
+\r
         Set<String> uniqueRandomStrs = new HashSet<String>(1024);\r
         int numOfItems = 100;\r
         while(uniqueRandomStrs.size() < numOfItems){\r
             uniqueRandomStrs.add(RandomStringUtils.random(5, true, false));\r
         }\r
+\r
         for(String rndStr: uniqueRandomStrs){\r
+\r
+            Taxon taxon = Taxon.NewInstance(BotanicalName.NewInstance(null), null);\r
+            taxon.setTitleCache("Tax" + rndStr, true);\r
+            taxonService.save(taxon);\r
+\r
+            TaxonDescription description = TaxonDescription.NewInstance(taxon);\r
             description.addElement(CommonTaxonName.NewInstance("Rot" + rndStr, Language.DEFAULT()));\r
+            descriptionService.saveOrUpdate(description);\r
         }\r
-        descriptionService.saveOrUpdate(description);\r
-        commitAndStartNewTransaction(new String[]{"DESCRIPTIONELEMENTBASE"});\r
 \r
+        commitAndStartNewTransaction(new String[]{"TAXONBASE"});\r
         refreshLuceneIndex();\r
 \r
         int pageSize = 10;\r
@@ -316,6 +324,42 @@ public class TaxonServiceSearchTest extends CdmTransactionalIntegrationTest {
         Assert.assertNotNull("last page + 1 must not have any records", pager.getRecords());\r
     }\r
 \r
+    /**\r
+     * @throws CorruptIndexException\r
+     * @throws IOException\r
+     * @throws ParseException\r
+     */\r
+    @Test\r
+    @DataSet\r
+    public final void testFindByDescriptionElementFullText_Grouping() throws CorruptIndexException, IOException, ParseException {\r
+\r
+        TaxonDescription description = (TaxonDescription) descriptionService.find(UUID.fromString(D_ABIES_ALBA_UUID));\r
+        Set<String> uniqueRandomStrs = new HashSet<String>(1024);\r
+        int numOfItems = 100;\r
+        while(uniqueRandomStrs.size() < numOfItems){\r
+            uniqueRandomStrs.add(RandomStringUtils.random(5, true, false));\r
+        }\r
+        for(String rndStr: uniqueRandomStrs){\r
+            description.addElement(CommonTaxonName.NewInstance("Rot" + rndStr, Language.DEFAULT()));\r
+        }\r
+        descriptionService.saveOrUpdate(description);\r
+\r
+        commitAndStartNewTransaction(new String[]{"DESCRIPTIONELEMENTBASE"});\r
+\r
+        refreshLuceneIndex();\r
+\r
+        int pageSize = 10;\r
+\r
+        Pager<SearchResult<TaxonBase>> pager;\r
+\r
+        boolean highlightFragments = true;\r
+        pager = taxonService.findByDescriptionElementFullText(CommonTaxonName.class, "Rot*", null, null, null, highlightFragments, pageSize, null, null, null);\r
+        Assert.assertEquals("All matches should be grouped in one page", 1, pager.getPagesAvailable().intValue());\r
+        Map<String, String[]> highlightMap = pager.getRecords().get(0).getFieldHighlightMap();\r
+        Assert.assertEquals("expecting " + numOfItems+ " highlighted fragments of field 'name'", numOfItems, highlightMap.get("name").length);\r
+\r
+    }\r
+\r
     @SuppressWarnings("rawtypes")\r
     @Test\r
     @DataSet\r