From 89c6624169af3f18b27c7bb7f4b93dedf5c549fc Mon Sep 17 00:00:00 2001 From: buczekp <buczekp> Date: Fri, 12 Nov 2010 09:12:39 +0000 Subject: [PATCH] [LMS-1772] tests of registration/update of samples with many parents SVN: 18649 --- .../generic/shared/basic/dto/NewSample.java | 13 +- .../web/server/GenericClientServiceTest.java | 171 +++++++++++++++++- .../CinaBundleRegistrationTest.java | 3 +- 3 files changed, 176 insertions(+), 11 deletions(-) diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/NewSample.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/NewSample.java index 3ca2619cefa..9168598c802 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/NewSample.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/NewSample.java @@ -152,8 +152,17 @@ public class NewSample extends Identifier<NewSample> implements Comparable<NewSa @Deprecated public final String getParentIdentifier() { - return getParentsOrNull() == null || getParentsOrNull().length == 0 ? null - : getParentsOrNull()[0]; + if (getParentsOrNull() == null || getParentsOrNull().length == 0) + { + return null; + } else if (getParentsOrNull().length > 1) + { + throw new IllegalStateException("Sample " + getIdentifier() + + " has more than one parent"); + } else + { + return getParentsOrNull()[0]; + } } /** diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/server/GenericClientServiceTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/server/GenericClientServiceTest.java index 97161fc1917..8c0beb436de 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/server/GenericClientServiceTest.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/server/GenericClientServiceTest.java @@ -80,18 +80,14 @@ public final class GenericClientServiceTest extends AbstractClientServiceTest private GenericClientService genericClientService; - @SuppressWarnings("deprecation") private final static NewSample createNewSample(final String sampleIdentifier, - final String sampleTypeCode, final IEntityProperty[] properties, final String parent, - final String container) + final String sampleTypeCode, final IEntityProperty[] properties) { final NewSample newSample = new NewSample(); newSample.setIdentifier(sampleIdentifier); final SampleType sampleType = createSampleType(sampleTypeCode); newSample.setSampleType(sampleType); newSample.setProperties(properties); - newSample.setParentIdentifier(parent); - newSample.setContainerIdentifier(container); return newSample; } @@ -236,8 +232,7 @@ public final class GenericClientServiceTest extends AbstractClientServiceTest { final String sessionKey = "some-session-key"; final NewSample newSample = - createNewSample("/group1/sample1", "MASTER_PLATE", IEntityProperty.EMPTY_ARRAY, - null, null); + createNewSample("/group1/sample1", "MASTER_PLATE", IEntityProperty.EMPTY_ARRAY); context.checking(new Expectations() { { @@ -367,6 +362,89 @@ public final class GenericClientServiceTest extends AbstractClientServiceTest context.assertIsSatisfied(); } + @Test + public final void testRegisterSamplesWithParents() throws IOException + { + final UploadedFilesBean uploadedFilesBean = new UploadedFilesBean(); + final String sessionKey = "uploaded-files"; + final NewSample newSample = new NewSample(); + newSample.setIdentifier("MP"); + newSample.setParentsOrNull(new String[] + { "MP_1", "MP_2" }); + newSample.setProperties(new IEntityProperty[0]); + final SampleType sampleType = createSampleType("MASTER_PLATE"); + final String fileName = "originalFileName.txt"; + + final List<NewSamplesWithTypes> samplesWithType = new ArrayList<NewSamplesWithTypes>(); + List<NewSample> newSamples = new ArrayList<NewSample>(); + newSamples.add(newSample); + samplesWithType.add(new NewSamplesWithTypes(sampleType, newSamples)); + context.checking(new Expectations() + { + { + prepareGetHttpSession(this); + prepareGetSessionToken(this); + + allowing(httpSession).getAttribute(sessionKey); + will(returnValue(uploadedFilesBean)); + + allowing(httpSession).removeAttribute(sessionKey); + + exactly(1).of(multipartFile).getOriginalFilename(); + will(returnValue(fileName)); + + one(multipartFile).transferTo(with(any(File.class))); + will(new CustomAction("copy content") + { + public Object invoke(Invocation invocation) throws Throwable + { + final File target = (File) invocation.getParameter(0); + FileUtilities.writeToFile(target, + "identifier\tparents\nMP\tMP_1,MP_2"); + return null; + } + }); + + one(genericServer).registerSamples(with(equal(SESSION_TOKEN)), + with(newSampleWithTypesList())); + will(new CustomAction("check sample") + { + + @SuppressWarnings( + { "unchecked" }) + public Object invoke(Invocation invocation) throws Throwable + { + final List<NewSamplesWithTypes> samplesSecions = + (List<NewSamplesWithTypes>) invocation.getParameter(1); + assertEquals(1, samplesSecions.size()); + final NewSamplesWithTypes samples = samplesSecions.get(0); + // Do not compare sampleType, as the registration code doesn't set + // the database instance. + assertEquals(sampleType.getCode(), samples.getSampleType() + .getCode()); + assertEquals(1, samples.getNewSamples().size()); + final NewSample sample = samples.getNewSamples().get(0); + assertEquals("MP", sample.getIdentifier()); + assertEquals(2, sample.getParentsOrNull().length); + assertEquals("MP_1", sample.getParentsOrNull()[0]); + assertEquals("MP_2", sample.getParentsOrNull()[1]); + assertEquals(0, sample.getProperties().length); + return null; + } + }); + } + }); + uploadedFilesBean.addMultipartFile(multipartFile); + final List<BatchRegistrationResult> result = + genericClientService.registerSamples(sampleType, sessionKey, null); + assertEquals(1, result.size()); + final BatchRegistrationResult batchRegistrationResult = result.get(0); + assertEquals(fileName, batchRegistrationResult.getFileName()); + assertEquals("Registration of 1 sample(s) is complete.", + batchRegistrationResult.getMessage()); + context.assertIsSatisfied(); + } + @Test public final void testUpdateSamples() throws IOException { @@ -424,7 +502,7 @@ public final class GenericClientServiceTest extends AbstractClientServiceTest final NewSample sample1 = samples.getNewSamples().get(0); assertEquals("/G1/MP1", sample1.getIdentifier()); assertEquals("/G1/MP2", sample1.getContainerIdentifier()); - assertEquals(0, sample1.getParentsOrNull().length); + assertEquals(null, sample1.getParentIdentifier()); assertEquals("EXP1", sample1.getExperimentIdentifier()); assertEquals(1, sample1.getProperties().length); final IEntityProperty prop1 = sample1.getProperties()[0]; @@ -454,6 +532,83 @@ public final class GenericClientServiceTest extends AbstractClientServiceTest context.assertIsSatisfied(); } + @Test + public final void testUpdateSamplesWithParents() throws IOException + { + final UploadedFilesBean uploadedFilesBean = new UploadedFilesBean(); + final String sessionKey = "uploaded-files"; + + final SampleType sampleType = createSampleType("MASTER_PLATE"); + final String defaultGroupIdentifier = "/G1"; + final String fileName = "fileName.txt"; + + context.checking(new Expectations() + { + { + prepareGetHttpSession(this); + prepareGetSessionToken(this); + + allowing(httpSession).getAttribute(sessionKey); + will(returnValue(uploadedFilesBean)); + + allowing(httpSession).removeAttribute(sessionKey); + + exactly(1).of(multipartFile).getOriginalFilename(); + will(returnValue(fileName)); + + one(multipartFile).transferTo(with(any(File.class))); + will(new CustomAction("copy content") + { + public Object invoke(Invocation invocation) throws Throwable + { + final File target = (File) invocation.getParameter(0); + FileUtilities.writeToFile(target, "identifier\tparents\n" + + "MP_1\t/G1/MP_11, /G1/MP_12\n" + "/G2/MP_2\t/G2/MP_21"); + return null; + } + }); + + one(genericServer).updateSamples(with(equal(SESSION_TOKEN)), + with(newSampleWithTypesList())); + will(new CustomAction("check sample") + { + + @SuppressWarnings("unchecked") + public Object invoke(Invocation invocation) throws Throwable + { + final List<NewSamplesWithTypes> samplesSecions = + (List<NewSamplesWithTypes>) invocation.getParameter(1); + assertEquals(1, samplesSecions.size()); + final NewSamplesWithTypes samples = samplesSecions.get(0); + // Do not compare sampleType, as the update code doesn't check it + assertEquals(2, samples.getNewSamples().size()); + + final NewSample sample1 = samples.getNewSamples().get(0); + assertEquals("/G1/MP_1", sample1.getIdentifier()); + assertEquals(2, sample1.getParentsOrNull().length); + assertEquals("/G1/MP_11", sample1.getParentsOrNull()[0]); + assertEquals("/G1/MP_12", sample1.getParentsOrNull()[1]); + + final NewSample sample2 = samples.getNewSamples().get(1); + assertEquals("/G2/MP_2", sample2.getIdentifier()); + assertEquals(1, sample2.getParentsOrNull().length); + assertEquals("/G2/MP_21", sample2.getParentsOrNull()[0]); + + return null; + } + }); + } + }); + uploadedFilesBean.addMultipartFile(multipartFile); + final List<BatchRegistrationResult> result = + genericClientService.updateSamples(sampleType, sessionKey, defaultGroupIdentifier); + assertEquals(1, result.size()); + final BatchRegistrationResult batchRegistrationResult = result.get(0); + assertEquals(fileName, batchRegistrationResult.getFileName()); + assertEquals("Update of 2 sample(s) is complete.", batchRegistrationResult.getMessage()); + context.assertIsSatisfied(); + } + @Test public void testUpdateMaterials() throws IOException { diff --git a/rtd_cina/sourceTest/java/ch/systemsx/cisd/cina/dss/bundle/registrators/CinaBundleRegistrationTest.java b/rtd_cina/sourceTest/java/ch/systemsx/cisd/cina/dss/bundle/registrators/CinaBundleRegistrationTest.java index 4ca8165ea20..36d8c8f7507 100644 --- a/rtd_cina/sourceTest/java/ch/systemsx/cisd/cina/dss/bundle/registrators/CinaBundleRegistrationTest.java +++ b/rtd_cina/sourceTest/java/ch/systemsx/cisd/cina/dss/bundle/registrators/CinaBundleRegistrationTest.java @@ -434,7 +434,7 @@ public abstract class CinaBundleRegistrationTest extends AbstractFileSystemTestC assertEquals(GRID_SAMPLE_IDENTIFIER, newSample.getIdentifier()); assertEquals(EXPERIMENT_IDENTIFIER.toString(), newSample.getExperimentIdentifier()); - assertEquals(null, newSample.getParentIdentifier()); + assertEquals(null, newSample.getParentsOrNull()); return true; } return false; @@ -455,6 +455,7 @@ public abstract class CinaBundleRegistrationTest extends AbstractFileSystemTestC // Create the Replica one(openbisService).registerSample(with(new MatcherNoDesc<NewSample>() { + @SuppressWarnings("deprecation") public boolean matches(Object item) { if (item instanceof NewSample) -- GitLab