From e1df5dadb8b3c12a24e81126cab953ca58830242 Mon Sep 17 00:00:00 2001
From: pkupczyk <piotr.kupczyk@id.ethz.ch>
Date: Wed, 18 Dec 2019 19:53:04 +0100
Subject: [PATCH] SSDM-7583 : ObjectTypeForm - add a test for
 v3.executeOperations executeInOrder flag

---
 .../asapi/v3/ExecuteOperationsTest.java       | 46 +++++++++++++++++++
 1 file changed, 46 insertions(+)

diff --git a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/ExecuteOperationsTest.java b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/ExecuteOperationsTest.java
index 9a9a3e1bc9e..942d6b746b1 100644
--- a/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/ExecuteOperationsTest.java
+++ b/openbis/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/ExecuteOperationsTest.java
@@ -57,6 +57,7 @@ import ch.ethz.sis.openbis.generic.asapi.v3.dto.entitytype.id.EntityTypePermId;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.history.PropertyHistoryEntry;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.operation.AsynchronousOperationExecutionOptions;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.operation.AsynchronousOperationExecutionResults;
+import ch.ethz.sis.openbis.generic.asapi.v3.dto.operation.IOperationExecutionResults;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.operation.OperationExecution;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.operation.OperationExecutionEmailNotification;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.operation.OperationExecutionState;
@@ -78,8 +79,11 @@ import ch.ethz.sis.openbis.generic.asapi.v3.dto.space.Space;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.space.create.CreateSpacesOperation;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.space.create.CreateSpacesOperationResult;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.space.create.SpaceCreation;
+import ch.ethz.sis.openbis.generic.asapi.v3.dto.space.delete.DeleteSpacesOperation;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.space.delete.SpaceDeletionOptions;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.space.fetchoptions.SpaceFetchOptions;
+import ch.ethz.sis.openbis.generic.asapi.v3.dto.space.get.GetSpacesOperation;
+import ch.ethz.sis.openbis.generic.asapi.v3.dto.space.get.GetSpacesOperationResult;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.space.id.ISpaceId;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.space.id.SpacePermId;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.space.search.SpaceSearchCriteria;
@@ -941,6 +945,48 @@ public class ExecuteOperationsTest extends AbstractOperationExecutionTest
                 "execute-operations  OPERATIONS('[CreateSpacesOperation 1 creation(s)]') EXECUTION_OPTIONS('SynchronousOperationExecutionOptions[description=test-description,notification=OperationExecutionEmailNotification[emails=[test@email.com]]]')");
     }
 
+    @Test
+    public void testExecuteWithExecuteInOrder()
+    {
+        SpacePermId id = new SpacePermId("EXECUTE_IN_ORDER_TEST");
+
+        SpaceCreation creation = new SpaceCreation();
+        creation.setCode(id.getPermId());
+
+        CreateSpacesOperation create = new CreateSpacesOperation(Arrays.asList(creation));
+        GetSpacesOperation get = new GetSpacesOperation(Arrays.asList(id), new SpaceFetchOptions());
+        SpaceDeletionOptions deletionOptions = new SpaceDeletionOptions();
+        deletionOptions.setReason("testing");
+        DeleteSpacesOperation delete = new DeleteSpacesOperation(Arrays.asList(id), deletionOptions);
+
+        String sessionToken = v3api.login(TEST_USER, PASSWORD);
+        List<IOperation> operations = Arrays.asList(create, get, delete, get);
+
+        // in order
+
+        SynchronousOperationExecutionOptions inOrderOptions = new SynchronousOperationExecutionOptions();
+        inOrderOptions.setExecuteInOrder(true);
+
+        SynchronousOperationExecutionResults inOrderResults =
+                (SynchronousOperationExecutionResults) v3api.executeOperations(sessionToken, operations, inOrderOptions);
+
+        GetSpacesOperationResult firstGetResults = (GetSpacesOperationResult) inOrderResults.getResults().get(1);
+        assertNotNull(firstGetResults.getObjectMap().get(id));
+        GetSpacesOperationResult secondGetResults = (GetSpacesOperationResult) inOrderResults.getResults().get(3);
+        assertNull(secondGetResults.getObjectMap().get(id));
+
+        // not in order
+
+        SynchronousOperationExecutionOptions notInOrderOptions = new SynchronousOperationExecutionOptions();
+        SynchronousOperationExecutionResults notInOrderResults =
+                (SynchronousOperationExecutionResults) v3api.executeOperations(sessionToken, operations, notInOrderOptions);
+
+        firstGetResults = (GetSpacesOperationResult) notInOrderResults.getResults().get(1);
+        assertNotNull(firstGetResults.getObjectMap().get(id));
+        secondGetResults = (GetSpacesOperationResult) notInOrderResults.getResults().get(3);
+        assertNotNull(secondGetResults.getObjectMap().get(id));
+    }
+
     private OperationExecution executeWithAvailabilities(String sessionToken, Integer availability, Integer summaryAvailability,
             Integer detailsAvailability)
     {
-- 
GitLab