diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/common/entity/SecondaryEntityListingQueryTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/common/entity/SecondaryEntityListingQueryTest.java index ecee73bdd32ebdc2f4e812a51ad072ff3e2bb634..2d1faa75f6cfce66045f353ada6305ffb9b94d0d 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/common/entity/SecondaryEntityListingQueryTest.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/common/entity/SecondaryEntityListingQueryTest.java @@ -19,8 +19,12 @@ package ch.systemsx.cisd.openbis.generic.server.business.bo.common.entity; import static org.testng.AssertJUnit.assertEquals; import static org.testng.AssertJUnit.assertTrue; import it.unimi.dsi.fastutil.longs.Long2ObjectMap; +import it.unimi.dsi.fastutil.longs.LongSet; import java.sql.SQLException; +import java.util.Arrays; +import java.util.HashSet; +import java.util.Set; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; @@ -29,12 +33,15 @@ import ch.rinn.restrictions.Friend; import ch.systemsx.cisd.openbis.generic.server.business.bo.common.EntityListingTestUtils; import ch.systemsx.cisd.openbis.generic.server.dataaccess.IDAOFactory; import ch.systemsx.cisd.openbis.generic.server.dataaccess.db.AbstractDAOTest; +import ch.systemsx.cisd.openbis.generic.shared.basic.TechId; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Experiment; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Person; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample; import ch.systemsx.cisd.openbis.generic.shared.dto.ExperimentPE; import ch.systemsx.cisd.openbis.generic.shared.dto.PersonPE; import ch.systemsx.cisd.openbis.generic.shared.dto.ProjectPE; +import ch.systemsx.cisd.openbis.generic.shared.dto.SamplePE; +import ch.systemsx.cisd.openbis.generic.shared.dto.SampleRelationshipPE; /** * @author Tomasz Pylak @@ -92,4 +99,40 @@ public class SecondaryEntityListingQueryTest extends AbstractDAOTest Long2ObjectMap<Sample> samples = dao.getSamples(EntityListingTestUtils.createSet(1, 2)); assertTrue(samples.size() > 0); } + + // id of a sample with a few levels of descendants + private final static TechId SAMPLE_ROOT_ID = new TechId(1008L); + + @Test + public void testListSamples() + { + LongSet idsOfSelfAndDescendants = dao.getSampleDescendantIdsAndSelf(SAMPLE_ROOT_ID.getId()); + SamplePE rootSample = daoFactory.getSampleDAO().getByTechId(SAMPLE_ROOT_ID); + Set<SamplePE> descendantsAndSelf = new HashSet<SamplePE>(); + checkContainsDescendantIdsAndSelf(rootSample, idsOfSelfAndDescendants, descendantsAndSelf); + assertEquals(descendantsAndSelf.size(), idsOfSelfAndDescendants.size()); + assertEquals(8, idsOfSelfAndDescendants.size()); + } + + /** + * recursively checks that parent id and all ids of its descendants are among given ids + * + * @param visitedSamples - collection of samples visited so far + */ + private static void checkContainsDescendantIdsAndSelf(SamplePE parent, LongSet ids, + Set<SamplePE> visitedSamples) + { + if (visitedSamples.contains(parent)) + { + return; + } + visitedSamples.add(parent); + assertTrue(parent.getId() + " not found among " + Arrays.toString(ids.toLongArray()), + ids.contains(parent.getId())); + for (SampleRelationshipPE r : parent.getChildRelationships()) + { + SamplePE childPE = r.getChildSample(); + checkContainsDescendantIdsAndSelf(childPE, ids, visitedSamples); + } + } } diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/DatasetListerTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/DatasetListerTest.java index 2ef33ef958ea8633a1d74662a925dab81eca3dd1..fdf63680ab28a2fea7a5c3381168c3bdec541a3e 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/DatasetListerTest.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/DatasetListerTest.java @@ -18,7 +18,9 @@ package ch.systemsx.cisd.openbis.generic.server.business.bo.datasetlister; import static org.testng.AssertJUnit.assertEquals; import static org.testng.AssertJUnit.assertFalse; +import static org.testng.AssertJUnit.assertNotNull; import static org.testng.AssertJUnit.assertSame; +import static org.testng.AssertJUnit.assertTrue; import java.sql.SQLException; import java.util.ArrayList; @@ -30,7 +32,6 @@ import java.util.List; import java.util.Map; import java.util.Set; -import org.testng.AssertJUnit; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; @@ -39,6 +40,7 @@ import ch.systemsx.cisd.openbis.generic.server.business.bo.common.entity.Seconda import ch.systemsx.cisd.openbis.generic.server.business.bo.common.entity.SecondaryEntityListingQueryTest; import ch.systemsx.cisd.openbis.generic.server.dataaccess.db.AbstractDAOTest; import ch.systemsx.cisd.openbis.generic.shared.basic.TechId; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Code; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExternalData; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample; import ch.systemsx.cisd.openbis.generic.shared.dto.SamplePE; @@ -55,7 +57,9 @@ public class DatasetListerTest extends AbstractDAOTest { private IDatasetLister lister; - private long sampleId; + private SamplePE exampleSample; + + private long exampleSampleId; @BeforeClass(alwaysRun = true) public void init() throws SQLException @@ -65,28 +69,54 @@ public class DatasetListerTest extends AbstractDAOTest SecondaryEntityDAO secondaryEntityDAO = SecondaryEntityListingQueryTest.createSecondaryEntityDAO(daoFactory); lister = DatasetLister.create(datasetListerDAO, secondaryEntityDAO, "url"); - SamplePE sample = - DatasetListingQueryTest.getSample("CISD", "CP-TEST-1", datasetListerDAO - .getDatabaseInstanceId(), daoFactory); - sampleId = sample.getId(); + exampleSample = + DatasetListingQueryTest.getSample("CISD", "CP-TEST-1", + datasetListerDAO.getDatabaseInstanceId(), daoFactory); + exampleSampleId = exampleSample.getId(); } @Test - public void testListBySampleTechId() + public void testListBySampleTechIdDirect() { - List<ExternalData> datasets = lister.listBySampleTechId(new TechId(sampleId), true); - assertEqualsOrGreater(1, datasets.size()); + List<ExternalData> datasets = lister.listBySampleTechId(new TechId(exampleSampleId), true); + assertEquals(1, datasets.size()); ExternalData externalData = datasets.get(0); - assertEquals(sampleId, externalData.getSample().getId().longValue()); + assertEquals(exampleSampleId, externalData.getSample().getId().longValue()); assertFalse(externalData.getProperties().isEmpty()); - AssertJUnit.assertNotNull(externalData.getExperiment()); + assertNotNull(externalData.getExperiment()); + } + + @Test + public void testListBySampleTechIdIndirect() + { + List<ExternalData> indirectlyConnectedChildDatasets = + lister.listBySampleTechId(new TechId(exampleSampleId), false); + assertEquals(5, indirectlyConnectedChildDatasets.size()); + System.err.println(Code.extractCodes(indirectlyConnectedChildDatasets).toString()); + + assertNotNull(exampleSample.getGeneratedFrom()); + List<ExternalData> directlyConnectedParentDatasets = + lister.listBySampleTechId(new TechId(exampleSample.getGeneratedFrom()), true); + assertEquals(1, directlyConnectedParentDatasets.size()); + + List<ExternalData> indirectlyConnectedParentDatasets = + lister.listBySampleTechId(new TechId(exampleSample.getGeneratedFrom()), false); + assertEquals(6, indirectlyConnectedParentDatasets.size()); + + List<String> indirectlyConnectedParentDatasetCodes = + Code.extractCodes(indirectlyConnectedParentDatasets); + for (ExternalData childDataset : indirectlyConnectedChildDatasets) + { + assertTrue(childDataset.getCode() + " not found among " + + indirectlyConnectedParentDatasetCodes.toString(), + indirectlyConnectedParentDatasetCodes.contains(childDataset.getCode())); + } } @Test public void testListParents() { Map<Long, Set<Long>> map = lister.listParentIds(Arrays.<Long> asList(2L, 4L, 9L)); - System.out.println(map); assertEquals(null, map.get(2L)); assertEquals("[2]", map.get(4L).toString()); @@ -102,9 +132,9 @@ public class DatasetListerTest extends AbstractDAOTest new HashSet<String>(Arrays.asList("200811050946559-983", "200902091219327-1025")); List<SamplePE> samplePEs = daoFactory.getSampleDAO().listByPermID(samplePermIDs); List<Sample> samples = SampleTranslator.translate(samplePEs, ""); - + Map<Sample, List<ExternalData>> dataSets = lister.listAllDataSetsFor(samples); - + StringBuilder builder = new StringBuilder(); for (Sample sample : samples) { @@ -148,8 +178,8 @@ public class DatasetListerTest extends AbstractDAOTest ExternalData previousDataSet = dataSetsByCode.put(dataSet.getCode(), dataSet); if (previousDataSet != null) { - assertSame("Same data set object expected for " + dataSet.getCode(), previousDataSet, - dataSet); + assertSame("Same data set object expected for " + dataSet.getCode(), + previousDataSet, dataSet); } List<ExternalData> children = dataSet.getChildren(); assertSameDataSetsForSameCode(dataSetsByCode, children); diff --git a/openbis/sourceTest/sql/postgresql/061/041=sample_relationships.tsv b/openbis/sourceTest/sql/postgresql/061/041=sample_relationships.tsv index 37f0e1086f3a5c67d671a2991bc2f719e6c099fe..83e7d8d31cf214c6ea04de60e62e30fac679341d 100644 --- a/openbis/sourceTest/sql/postgresql/061/041=sample_relationships.tsv +++ b/openbis/sourceTest/sql/postgresql/061/041=sample_relationships.tsv @@ -41,3 +41,4 @@ 41 999 2 1030 32 974 2 982 43 977 1 984 +44 1043 1 1042 \ No newline at end of file