From 69b2a040855a4d6bb93140d15dc732e07d305ff7 Mon Sep 17 00:00:00 2001
From: buczekp <buczekp>
Date: Wed, 16 Mar 2011 14:28:31 +0000
Subject: [PATCH] [LMS-1976] update of index (step 3: changed test
 expectations); new test combining sample and experiment criteria

SVN: 20371
---
 .../dataaccess/db/HibernateSearchDAOTest.java | 46 +++++++++++++++++--
 1 file changed, 41 insertions(+), 5 deletions(-)

diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/HibernateSearchDAOTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/HibernateSearchDAOTest.java
index 079f05a8494..5f29bf077bc 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/HibernateSearchDAOTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/HibernateSearchDAOTest.java
@@ -64,6 +64,7 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.MaterialPropertyPE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.PropertyTypePE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.SearchableEntity;
 import ch.systemsx.cisd.openbis.generic.shared.translator.DtoConverters;
+import ch.systemsx.cisd.openbis.generic.shared.util.HibernateUtils;
 
 /**
  * Test cases for corresponding {@link HibernateSearchDAO} class.
@@ -178,7 +179,7 @@ public final class HibernateSearchDAOTest extends AbstractDAOTest
         final List<MatchingEntity> hits =
                 hibernateSearchDAO.searchEntitiesByTerm(SearchableEntity.EXPERIMENT, query,
                         createDataProvider(), useWildcardMode, 0, Integer.MAX_VALUE);
-        assertEquals(5, hits.size());
+        assertEquals(6, hits.size());
         for (MatchingEntity matchingEntity : hits)
         {
             AssertionUtil.assertContainsInsensitive(querySubstring, matchingEntity.getCode());
@@ -260,13 +261,13 @@ public final class HibernateSearchDAOTest extends AbstractDAOTest
      * <br>
      * Only eager connections are loaded.
      */
-    private List<ExternalDataPE> searchForDatasets(DetailedSearchCriteria criteria)
+    private List<ExternalDataPE> searchForDatasets(DetailedSearchCriteria criteria,
+            List<DetailedSearchAssociationCriteria> assiciations)
     {
         final IHibernateSearchDAO hibernateSearchDAO = daoFactory.getHibernateSearchDAO();
         List<Long> datasetIds =
                 hibernateSearchDAO.searchForEntityIds(criteria,
-                        DtoConverters.convertEntityKind(EntityKind.DATA_SET),
-                        Collections.<DetailedSearchAssociationCriteria> emptyList());
+                        DtoConverters.convertEntityKind(EntityKind.DATA_SET), assiciations);
         final List<ExternalDataPE> result = new ArrayList<ExternalDataPE>();
         for (Long datasetId : datasetIds)
         {
@@ -291,7 +292,29 @@ public final class HibernateSearchDAOTest extends AbstractDAOTest
     private void assertCorrectDatasetsFound(DetailedSearchCriteria criteria,
             DSLoc... expectedLocations)
     {
-        List<ExternalDataPE> dataSets = searchForDatasets(criteria);
+        List<ExternalDataPE> dataSets =
+                searchForDatasets(criteria,
+                        Collections.<DetailedSearchAssociationCriteria> emptyList());
+        AssertJUnit.assertEquals(expectedLocations.length, dataSets.size());
+        for (ExternalDataPE dataSet : dataSets)
+        {
+            assertContains(expectedLocations, dataSet.getLocation());
+        }
+    }
+
+    // NOTE: such a check depends strongly on the test database content. Use it only when the better
+    // way to check the results is much harder.
+    private void assertCorrectDatasetsFound(DetailedSearchCriteria criteria,
+            DetailedSearchAssociationCriteria association, DSLoc... expectedLocations)
+    {
+        List<ExternalDataPE> dataSets =
+                searchForDatasets(criteria, Collections.singletonList(association));
+        // Collections.<DetailedSearchAssociationCriteria> emptyList());
+        for (ExternalDataPE dataSet : dataSets)
+        {
+            System.err.println(dataSet.getLocation() + ": "
+                    + HibernateUtils.getId(dataSet.getExperiment()));
+        }
         AssertJUnit.assertEquals(expectedLocations.length, dataSets.size());
         for (ExternalDataPE dataSet : dataSets)
         {
@@ -365,6 +388,19 @@ public final class HibernateSearchDAOTest extends AbstractDAOTest
         assertCorrectDatasetsFound(criteria, DSLoc.LOC3, DSLoc.LOC4);
     }
 
+    @Test(dependsOnMethods = "testSearchForDataSetsSimpleField")
+    public final void testSearchForDataSetsSimpleFieldWithExperiment()
+    {
+        DetailedSearchCriterion criterion = createSimpleFieldCriterion();
+        DetailedSearchCriteria criteria = createAndDatasetQuery(criterion);
+        DetailedSearchAssociationCriteria association =
+                new DetailedSearchAssociationCriteria(EntityKind.EXPERIMENT,
+                        Collections.singleton(new Long(2L)));
+        // compared to testSearchForDataSetsSimpleField() DSLoc.LOC3 should be filtered
+        // because of different experiment
+        assertCorrectDatasetsFound(criteria, association, DSLoc.LOC4);
+    }
+
     @Test
     public final void testSearchForDataSetsComplexAndQuery()
     {
-- 
GitLab