diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/EntityRelationshipChangeTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/EntityRelationshipChangeTest.java index 76d5324e19627e638ec42380f0c7244bfab8f2db..a62d869793d82b092a537aaa655762efc14c9a90 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/EntityRelationshipChangeTest.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/EntityRelationshipChangeTest.java @@ -315,4 +315,53 @@ public class EntityRelationshipChangeTest extends BaseTest assertThat(serverSays(child).getParents(), containsExactly(parent1, parent2)); } + @Test + public void addSampleToContainer() + { + Sample container = create(aSample().inSpace(space)); + Sample componentCandidate = create(aSample().inSpace(space)); + SampleUpdatesDTO updates = create(anUpdateOf(componentCandidate).withContainer(container)); + + commonServer.updateSample(session, updates); + + assertThat(serverSays(componentCandidate).getContainer(), is(container)); + } + + @Test + public void removeSampleFromContainer() + { + Sample container = create(aSample().inSpace(space)); + Sample component = create(aSample().inSpace(space).inContainer(container)); + SampleUpdatesDTO updates = create(anUpdateOf(component)); + + commonServer.updateSample(session, updates); + + assertThat(serverSays(component).getContainer(), is(nullValue())); + } + + @Test + public void sampleUpdateWithNewContainerWillChangeContanerOfSample() + { + Sample container = create(aSample().inSpace(space)); + Sample component = create(aSample().inSpace(space).inContainer(container)); + Sample newContainer = create(aSample().inSpace(space)); + SampleUpdatesDTO updates = create(anUpdateOf(component).withContainer(newContainer)); + + commonServer.updateSample(session, updates); + + assertThat(serverSays(component).getContainer(), is(newContainer)); + } + + @Test(expectedExceptions = + { UserFailureException.class }) + public void sampleCannotBeUpdatedToBeChildOfComponentSample() + { + Sample container = create(aSample().inSpace(space)); + Sample component = create(aSample().inSpace(space).inContainer(container)); + Sample subComponent = create(aSample().inSpace(space)); + SampleUpdatesDTO updates = create(anUpdateOf(subComponent).withContainer(component)); + + commonServer.updateSample(session, updates); + } + } diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/RelationshipServiceAuthorizationTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/RelationshipServiceAuthorizationTest.java index d2bb61f639d9798fb4221cd90cea613acf56d328..d3446ea5afec18d4d1a78aeeec22ec52efec1a7b 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/RelationshipServiceAuthorizationTest.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/RelationshipServiceAuthorizationTest.java @@ -63,6 +63,10 @@ public class RelationshipServiceAuthorizationTest extends BaseTest private Sample sharedSample; + private Sample childSample; + + private Sample parentSample; + private DataSet dataSet; @BeforeClass @@ -80,6 +84,9 @@ public class RelationshipServiceAuthorizationTest extends BaseTest destinationSample = create(aSample().inExperiment(destinationExperiment)); sharedSample = create(aSample()); + + parentSample = create(aSample().inSpace(sourceSpace)); + childSample = create(aSample().inSpace(destinationSpace).withParent(parentSample)); } @Test(dataProvider = "rolesAllowedToAssignExperimentToProject") @@ -231,6 +238,40 @@ public class RelationshipServiceAuthorizationTest extends BaseTest assignDataSetToSample(sourceSpaceRole, destinationSpaceRole, instanceRole); } + @Test(dataProvider = "rolesAllowedToAddParentToSample") + public void addingParentToSampleIsAuthorizedFor(RoleWithHierarchy sourceSpaceRole, + RoleWithHierarchy destinationSpaceRole, + RoleWithHierarchy instanceRole) + { + addParentToSample(sourceSpaceRole, destinationSpaceRole, instanceRole); + } + + @Test(dataProvider = "rolesNotAllowedToAddParentToSample", expectedExceptions = + { AuthorizationFailureException.class }) + public void addingParentToSampleIsNotAuthorizedFor(RoleWithHierarchy sourceSpaceRole, + RoleWithHierarchy destinationSpaceRole, + RoleWithHierarchy instanceRole) + { + addParentToSample(sourceSpaceRole, destinationSpaceRole, instanceRole); + } + + @Test(dataProvider = "rolesAllowedToRemoveParentFromSample") + public void removingParentFromSampleIsAuthorizedFor(RoleWithHierarchy sourceSpaceRole, + RoleWithHierarchy destinationSpaceRole, + RoleWithHierarchy instanceRole) + { + removeParentFromSample(sourceSpaceRole, destinationSpaceRole, instanceRole); + } + + @Test(dataProvider = "rolesNotAllowedToRemoveParentFromSample", expectedExceptions = + { AuthorizationFailureException.class }) + public void removingParentFromSampleIsNotAuthorizedFor(RoleWithHierarchy sourceSpaceRole, + RoleWithHierarchy destinationSpaceRole, + RoleWithHierarchy instanceRole) + { + removeParentFromSample(sourceSpaceRole, destinationSpaceRole, instanceRole); + } + private void assignExperimentToProject(RoleWithHierarchy sourceSpaceRole, RoleWithHierarchy destinationSpaceRole, RoleWithHierarchy instanceRole) @@ -339,6 +380,32 @@ public class RelationshipServiceAuthorizationTest extends BaseTest id(destinationSample)); } + private void addParentToSample(RoleWithHierarchy sourceSpaceRole, + RoleWithHierarchy destinationSpaceRole, + RoleWithHierarchy instanceRole) + { + String session = + create(aSession().withSpaceRole(sourceSpaceRole, sourceSpace).withSpaceRole( + destinationSpaceRole, destinationSpace).withInstanceRole(instanceRole)); + + relationshipService.addParentToSample(sessionManager.getSession(session), id(sourceSample), + id(destinationSample)); + + } + + private void removeParentFromSample(RoleWithHierarchy sourceSpaceRole, + RoleWithHierarchy destinationSpaceRole, + RoleWithHierarchy instanceRole) + { + String session = + create(aSession().withSpaceRole(sourceSpaceRole, sourceSpace).withSpaceRole( + destinationSpaceRole, destinationSpace).withInstanceRole(instanceRole)); + + relationshipService.removeParentFromSample(sessionManager.getSession(session), + id(childSample), + id(parentSample)); + } + @DataProvider(name = "rolesAllowedToAssignExperimentToProject") public static RoleWithHierarchy[][] rolesAllowedToAssignExperimentToProject() { @@ -465,6 +532,34 @@ public class RelationshipServiceAuthorizationTest extends BaseTest RoleWithHierarchy.SPACE_POWER_USER)); } + @DataProvider(name = "rolesAllowedToAddParentToSample") + public static RoleWithHierarchy[][] rolesAllowedToAddParentToSample() + { + return toNestedArray(acceptedRoles(2, RoleWithHierarchy.SPACE_ETL_SERVER, + RoleWithHierarchy.SPACE_POWER_USER)); + } + + @DataProvider(name = "rolesNotAllowedToAddParentToSample") + public static RoleWithHierarchy[][] rolesNotAllowedToAddParentToSample() + { + return toNestedArray(rejectedRoles(2, RoleWithHierarchy.SPACE_ETL_SERVER, + RoleWithHierarchy.SPACE_POWER_USER)); + } + + @DataProvider(name = "rolesAllowedRemoveAddParentFromSample") + public static RoleWithHierarchy[][] rolesAllowedToRemoveParentFromSample() + { + return toNestedArray(acceptedRoles(2, RoleWithHierarchy.SPACE_ETL_SERVER, + RoleWithHierarchy.SPACE_POWER_USER)); + } + + @DataProvider(name = "rolesNotAllowedToRemoveParentFromSample") + public static RoleWithHierarchy[][] rolesNotAllowedToRemoveParentFromSample() + { + return toNestedArray(rejectedRoles(2, RoleWithHierarchy.SPACE_ETL_SERVER, + RoleWithHierarchy.SPACE_POWER_USER)); + } + public static Collection<RoleWithHierarchy> allInstanceRoles = new HashSet<RoleWithHierarchy>(); public static Collection<RoleWithHierarchy> allSpaceRoles = new HashSet<RoleWithHierarchy>(); 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 f026ace361aa41008ef69b4d5713739a9559c050..84f66c0dc831d2714b6caa94e5c9dcf092ba0981 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/SystemTestCase.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/SystemTestCase.java @@ -27,12 +27,14 @@ import java.util.List; import javax.servlet.http.HttpSession; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.support.GenericApplicationContext; import org.springframework.mock.web.MockHttpServletRequest; import org.springframework.mock.web.MockMultipartFile; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.testng.AbstractTransactionalTestNGSpringContextTests; import org.springframework.test.context.transaction.TransactionConfiguration; import org.testng.AssertJUnit; +import org.testng.annotations.AfterTest; import org.testng.annotations.BeforeClass; import org.testng.annotations.BeforeSuite; @@ -93,6 +95,13 @@ public abstract class SystemTestCase extends AbstractTransactionalTestNGSpringCo TestInitializer.init(); } + @AfterTest() + public void testingThis() + { + System.out.println("!!!!!!!! AFTER TEST RUN - DESTROYING - IN SYSTEMTESTCASE!!!"); + ((GenericApplicationContext) applicationContext).destroy(); + } + @BeforeClass public void loginAsSystem() { diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/base/SampleBuilder.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/base/SampleBuilder.java index 321f7cf96234c205760c39087c506b7be77f3feb..2aebd20615f2a8e2c24fa81b07df3672b7f16a60 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/base/SampleBuilder.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/base/SampleBuilder.java @@ -43,10 +43,13 @@ public class SampleBuilder extends Builder<Sample> private List<Sample> parents; + private Sample container; + public SampleBuilder(ICommonServerForInternalUse commonServer, IGenericServer genericServer) { super(commonServer, genericServer); this.parents = new ArrayList<Sample>(); + this.container = null; } @SuppressWarnings("hiding") @@ -63,6 +66,12 @@ public class SampleBuilder extends Builder<Sample> return this; } + public SampleBuilder inContainer(Sample sample) + { + this.container = sample; + return this; + } + public SampleBuilder withParent(Sample parent) { return this.withParents(parent); @@ -116,8 +125,8 @@ public class SampleBuilder extends Builder<Sample> NewSample data = new NewSample(); data.setIdentifier(identifier); data.setAttachments(new ArrayList<NewAttachment>()); - data.setContainerIdentifier(null); - data.setCurrentContainerIdentifier(null); + data.setContainerIdentifier(this.container != null ? this.container.getIdentifier() : null); + // data.setCurrentContainerIdentifier(null); if (this.experiment != null) { data.setExperimentIdentifier(this.experiment.getIdentifier()); diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/base/SampleUpdateBuilder.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/base/SampleUpdateBuilder.java index 2b50827456ab0bed0c13ed3b17081a784e28bfee..1daa3ed1cf267e0b7b4711afb868ea83cd56340c 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/base/SampleUpdateBuilder.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/base/SampleUpdateBuilder.java @@ -50,6 +50,8 @@ public class SampleUpdateBuilder extends Builder<SampleUpdatesDTO> private List<Sample> parents; + private Sample container; + public SampleUpdateBuilder(ICommonServerForInternalUse commonServer, IGenericServer genericServer, Sample sample) { @@ -63,6 +65,7 @@ public class SampleUpdateBuilder extends Builder<SampleUpdatesDTO> this.version = sample.getModificationDate(); this.sampleIdentifier = id(sample); this.parents = new ArrayList<Sample>(); + this.container = null; } public SampleUpdateBuilder inExperiment(Experiment experiment) @@ -109,6 +112,12 @@ public class SampleUpdateBuilder extends Builder<SampleUpdatesDTO> return this; } + public SampleUpdateBuilder withContainer(Sample sample) + { + this.container = sample; + return this; + } + /* * public SampleUpdatesDTO(TechId sampleId, List<IEntityProperty> properties, ExperimentIdentifier experimentIdentifierOrNull, Collection<NewAttachment> attachments, @@ -126,6 +135,7 @@ public class SampleUpdateBuilder extends Builder<SampleUpdatesDTO> } return new SampleUpdatesDTO(this.sampleId, new ArrayList<IEntityProperty>(), this.experimentId, new ArrayList<NewAttachment>(), this.version, - this.sampleIdentifier, null, parentCodes); + this.sampleIdentifier, this.container != null ? this.container.getIdentifier() + : null, parentCodes); } } \ No newline at end of file