diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/SystemTestCase.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/SystemTestCase.java index e3b0d180cc50716d21e971f215e4f6c6612ba94a..c95876a27d0bd6d7109adef015c37f48caf357db 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/SystemTestCase.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/SystemTestCase.java @@ -16,6 +16,8 @@ package ch.systemsx.cisd.openbis.systemtest; +import javax.servlet.http.HttpServletRequest; + import org.springframework.beans.factory.annotation.Autowired; import org.springframework.mock.web.MockHttpServletRequest; import org.springframework.test.context.ContextConfiguration; @@ -40,6 +42,7 @@ public abstract class SystemTestCase extends AbstractTestNGSpringContextTests { protected ICommonServer commonServer; protected ICommonClientService commonClientService; + protected MockHttpServletRequest request; @BeforeSuite public void beforeSuite() @@ -53,7 +56,8 @@ public abstract class SystemTestCase extends AbstractTestNGSpringContextTests @Autowired public final void setRequestContextProvider(final SpringRequestContextProvider contextProvider) { - contextProvider.setRequest(new MockHttpServletRequest()); + request = new MockHttpServletRequest(); + contextProvider.setRequest(request); } /** diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/plugin/generic/ExperimentRegistrationTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/plugin/generic/ExperimentRegistrationTest.java index c6d81332d7f610f3ebcd2ef8168fb1b637a8c766..7933b29884e03e8de85bbc0a2fa80599e15ae8c0 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/plugin/generic/ExperimentRegistrationTest.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/plugin/generic/ExperimentRegistrationTest.java @@ -19,30 +19,42 @@ package ch.systemsx.cisd.openbis.systemtest.plugin.generic; import static org.testng.AssertJUnit.assertEquals; import static org.testng.AssertJUnit.fail; +import java.util.Arrays; import java.util.List; +import javax.servlet.http.HttpSession; + +import org.springframework.mock.web.MockMultipartFile; import org.testng.annotations.Test; import ch.systemsx.cisd.openbis.generic.client.web.client.dto.ListSampleDisplayCriteria; import ch.systemsx.cisd.openbis.generic.client.web.client.dto.ResultSetWithEntityTypes; import ch.systemsx.cisd.openbis.generic.client.web.client.exception.UserFailureException; +import ch.systemsx.cisd.openbis.generic.client.web.server.UploadedFilesBean; import ch.systemsx.cisd.openbis.generic.shared.basic.TechId; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Attachment; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.AttachmentWithContent; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityProperty; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Experiment; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IEntityProperty; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ListSampleCriteria; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.NewAttachment; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.NewExperiment; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.PropertyType; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.SampleType; /** - * Head-less system test for experiment registration - * + * Head-less system test for experiment registration + * * @author Franz-Josef Elmer */ @Test(groups = "system test") public class ExperimentRegistrationTest extends GenericSystemTestCase { + private static final String ATTACHMENTS_SESSION_KEY = "attachments"; + private static final String SAMPLES_SESSION_KEY = "samples"; + @Test public void testRegisterExperimentWithoutMissingMandatoryProperty() { @@ -50,17 +62,19 @@ public class ExperimentRegistrationTest extends GenericSystemTestCase String experimentCode = commonClientService.generateCode("EXP"); String experimentIdentifier = "/cisd/default/" + experimentCode; NewExperiment newExperiment = new NewExperiment(experimentIdentifier, "SIRNA_HCS"); - + try { - genericClientService.registerExperiment("attachments", "samples", newExperiment); + genericClientService.registerExperiment(ATTACHMENTS_SESSION_KEY, SAMPLES_SESSION_KEY, + newExperiment); fail("UserFailureException expected"); } catch (UserFailureException ex) { - assertEquals("Value of mandatory property 'DESCRIPTION' not specified.", ex.getMessage()); + assertEquals("Value of mandatory property 'DESCRIPTION' not specified.", ex + .getMessage()); } } - + @Test public void testRegisterExperiment() { @@ -68,9 +82,10 @@ public class ExperimentRegistrationTest extends GenericSystemTestCase String experimentCode = commonClientService.generateCode("EXP"); String experimentIdentifier = "/cisd/default/" + experimentCode; NewExperiment newExperiment = new NewExperiment(experimentIdentifier, "SIRNA_HCS"); - newExperiment.setProperties(new IEntityProperty[] {property("DESCRIPTION", "my experiment")}); - genericClientService.registerExperiment("attachments", "samples", newExperiment); - + newExperiment.setProperties(new IEntityProperty[] + { property("DESCRIPTION", "my experiment") }); + genericClientService.registerExperiment(ATTACHMENTS_SESSION_KEY, SAMPLES_SESSION_KEY, newExperiment); + Experiment experiment = genericClientService.getExperimentInfo(experimentIdentifier); assertEquals(experimentCode, experiment.getCode()); assertEquals(experimentIdentifier.toUpperCase(), experiment.getIdentifier()); @@ -80,7 +95,7 @@ public class ExperimentRegistrationTest extends GenericSystemTestCase assertEquals("my experiment", properties.get(0).tryGetAsString()); assertEquals(1, properties.size()); } - + @Test public void testRegisterExperimentWithSamples() { @@ -88,23 +103,107 @@ public class ExperimentRegistrationTest extends GenericSystemTestCase String experimentCode = commonClientService.generateCode("EXP"); String experimentIdentifier = "/cisd/default/" + experimentCode; NewExperiment newExperiment = new NewExperiment(experimentIdentifier, "SIRNA_HCS"); - newExperiment.setProperties(new IEntityProperty[] {property("DESCRIPTION", "my experiment")}); - newExperiment.setSamples(new String[] {"3vcp8"}); - genericClientService.registerExperiment("attachments", "samples", newExperiment); - + newExperiment.setProperties(new IEntityProperty[] + { property("DESCRIPTION", "my experiment") }); + newExperiment.setSamples(new String[] + { "3vcp8" }); + genericClientService.registerExperiment(ATTACHMENTS_SESSION_KEY, SAMPLES_SESSION_KEY, newExperiment); + Experiment experiment = genericClientService.getExperimentInfo(experimentIdentifier); TechId experimentId = new TechId(experiment.getId()); ListSampleCriteria listCriteria = ListSampleCriteria.createForExperiment(experimentId); ResultSetWithEntityTypes<Sample> samples = commonClientService.listSamples(new ListSampleDisplayCriteria(listCriteria)); - + assertEquals("[CELL_PLATE]", samples.getAvailableEntityTypes().toString()); Sample sample = samples.getResultSet().getList().get(0).getOriginalObject(); assertEquals("3VCP8", sample.getCode()); assertEquals(experiment.getId(), sample.getExperiment().getId()); assertEquals(1, samples.getResultSet().getList().size()); } + + @Test + public void testRegisterExperimentAndSamples() + { + logIntoCommonClientService(); + + HttpSession session = request.getSession(); + UploadedFilesBean uploadedFilesBean = new UploadedFilesBean(); + String batchSamplesFileContent = "identifier\torganism\n" + + "S1001\tfly\n" + + "S1002\tdog\n"; + uploadedFilesBean.addMultipartFile(new MockMultipartFile("samples.txt", + batchSamplesFileContent.getBytes())); + session.setAttribute(SAMPLES_SESSION_KEY, uploadedFilesBean); + String experimentCode = commonClientService.generateCode("EXP"); + String experimentIdentifier = "/cisd/default/" + experimentCode; + NewExperiment newExperiment = new NewExperiment(experimentIdentifier, "SIRNA_HCS"); + newExperiment.setProperties(new IEntityProperty[] + { property("DESCRIPTION", "my experiment") }); + newExperiment.setRegisterSamples(true); + SampleType sampleType = new SampleType(); + sampleType.setCode("CELL_PLATE"); + newExperiment.setSampleType(sampleType); + genericClientService.registerExperiment(ATTACHMENTS_SESSION_KEY, SAMPLES_SESSION_KEY, newExperiment); + + Experiment experiment = genericClientService.getExperimentInfo(experimentIdentifier); + TechId experimentId = new TechId(experiment.getId()); + ListSampleCriteria listCriteria = ListSampleCriteria.createForExperiment(experimentId); + ResultSetWithEntityTypes<Sample> samples = + commonClientService.listSamples(new ListSampleDisplayCriteria(listCriteria)); + + assertEquals("[CELL_PLATE]", samples.getAvailableEntityTypes().toString()); + Sample sample = samples.getResultSet().getList().get(0).getOriginalObject(); + assertEquals("S1001", sample.getCode()); + assertEquals("FLY", sample.getProperties().get(0).tryGetAsString()); + assertEquals(experiment.getId(), sample.getExperiment().getId()); + sample = samples.getResultSet().getList().get(1).getOriginalObject(); + assertEquals("S1002", sample.getCode()); + assertEquals("DOG", sample.getProperties().get(0).tryGetAsString()); + assertEquals(experiment.getId(), sample.getExperiment().getId()); + assertEquals(2, samples.getResultSet().getList().size()); + } + @Test + public void testRegisterExperimentAndAttachments() + { + String sessionToken = logIntoCommonClientService().getSessionID(); + + HttpSession session = request.getSession(); + UploadedFilesBean uploadedFilesBean = new UploadedFilesBean(); + MockMultipartFile multipartFile = + new MockMultipartFile("hello.txt", "hello.txt", "", "hello world".getBytes()); + uploadedFilesBean.addMultipartFile(multipartFile); + session.setAttribute(ATTACHMENTS_SESSION_KEY, uploadedFilesBean); + logIntoCommonClientService(); + String experimentCode = commonClientService.generateCode("EXP"); + String experimentIdentifier = "/cisd/default/" + experimentCode; + NewExperiment newExperiment = new NewExperiment(experimentIdentifier, "SIRNA_HCS"); + newExperiment.setProperties(new IEntityProperty[] + { property("DESCRIPTION", "my experiment") }); + newExperiment.setAttachments(Arrays.asList(new NewAttachment("hello.txt", "hello", "test attachment"))); + genericClientService.registerExperiment(ATTACHMENTS_SESSION_KEY, SAMPLES_SESSION_KEY, newExperiment); + + Experiment experiment = genericClientService.getExperimentInfo(experimentIdentifier); + assertEquals(experimentCode, experiment.getCode()); + List<Attachment> attachments = experiment.getAttachments(); + assertEquals("hello.txt", attachments.get(0).getFileName()); + assertEquals("test attachment", attachments.get(0).getDescription()); + assertEquals("hello", attachments.get(0).getTitle()); + assertEquals(1, attachments.get(0).getVersion()); + assertEquals(1, attachments.size()); + + TechId experimentID = new TechId(experiment.getId()); + AttachmentWithContent attachment = + genericServer.getExperimentFileAttachment(sessionToken, experimentID, "hello.txt", + 1); + assertEquals("hello.txt", attachment.getFileName()); + assertEquals("test attachment", attachment.getDescription()); + assertEquals("hello", attachment.getTitle()); + assertEquals(1, attachment.getVersion()); + assertEquals("hello world", new String(attachment.getContent())); + } + private IEntityProperty property(String type, String value) { EntityProperty property = new EntityProperty(); diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/plugin/generic/GenericSystemTestCase.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/plugin/generic/GenericSystemTestCase.java index e1e29b04888781f3dc6bf6eb8606928b8055ee20..e7ab14214567e75d289dd0932b2e855ee2254fb3 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/plugin/generic/GenericSystemTestCase.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/plugin/generic/GenericSystemTestCase.java @@ -19,6 +19,7 @@ package ch.systemsx.cisd.openbis.systemtest.plugin.generic; import org.springframework.beans.factory.annotation.Autowired; import ch.systemsx.cisd.openbis.plugin.generic.client.web.client.IGenericClientService; +import ch.systemsx.cisd.openbis.plugin.generic.shared.IGenericServer; import ch.systemsx.cisd.openbis.systemtest.SystemTestCase; /** @@ -30,4 +31,7 @@ public class GenericSystemTestCase extends SystemTestCase { @Autowired protected IGenericClientService genericClientService; + + @Autowired + protected IGenericServer genericServer; }