Skip to content

Commit 84fb9c6

Browse files
authored
Merge pull request #1717 from microsoftgraph/fix/batch-steps-order
Retain insertion order of batch request steps
2 parents 9ad2008 + 68c43c1 commit 84fb9c6

File tree

2 files changed

+30
-3
lines changed

2 files changed

+30
-3
lines changed

src/main/java/com/microsoft/graph/core/content/BatchRequestContent.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
* A class representing the content of a batch request.
2525
*/
2626
public class BatchRequestContent {
27-
private HashMap<String, BatchRequestStep> batchRequestSteps;
27+
private LinkedHashMap<String, BatchRequestStep> batchRequestSteps;
2828
private RequestAdapter requestAdapter;
2929
private final String maxStepsExceededMessage = String.format(Locale.US,ErrorConstants.Messages.MAXIMUM_VALUE_EXCEEDED, "Number of request steps", CoreConstants.BatchRequest.MAX_REQUESTS);
3030

@@ -56,7 +56,7 @@ public BatchRequestContent(@Nonnull RequestAdapter requestAdapter, @Nonnull List
5656
throw new IllegalArgumentException(maxStepsExceededMessage);
5757
}
5858

59-
this.batchRequestSteps = new HashMap<>();
59+
this.batchRequestSteps = new LinkedHashMap<>();
6060
for (BatchRequestStep requestStep : batchRequestSteps) {
6161
addBatchRequestStep(requestStep);
6262
}
@@ -68,7 +68,7 @@ public BatchRequestContent(@Nonnull RequestAdapter requestAdapter, @Nonnull List
6868
@Nonnull
6969
public Map<String, BatchRequestStep> getBatchRequestSteps() {
7070

71-
return new HashMap<>(batchRequestSteps);
71+
return new LinkedHashMap<>(batchRequestSteps);
7272
}
7373
/**
7474
* Adds a batch request step to the batch request.

src/test/java/com/microsoft/graph/core/content/BatchRequestContentTest.java

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@
22

33
import com.microsoft.graph.core.CoreConstants;
44
import com.microsoft.graph.core.ErrorConstants;
5+
import com.google.gson.JsonArray;
6+
import com.google.gson.JsonElement;
7+
import com.google.gson.JsonObject;
8+
import com.google.gson.JsonParser;
59
import com.microsoft.graph.core.BaseClient;
610
import com.microsoft.graph.core.models.BatchRequestStep;
711
import com.microsoft.graph.core.requests.IBaseClient;
@@ -62,6 +66,29 @@ void BatchRequestContent_InitializeWithInvalidDependsOnIds() {
6266
assertEquals(ErrorConstants.Messages.INVALID_DEPENDS_ON_REQUEST_ID, ex.getMessage());
6367
}
6468
}
69+
70+
@Test
71+
void BatchRequestContent_RetainsOrderOfBatchRequestSteps() throws Exception {
72+
BatchRequestStep requestStep = new BatchRequestStep("1", defaultTestRequest);
73+
BatchRequestStep requestStep2 = new BatchRequestStep("ab23", defaultTestRequest);
74+
BatchRequestStep requestStep3 = new BatchRequestStep("b", defaultTestRequest, Arrays.asList("1"));
75+
76+
BatchRequestContent batchRequestContent = new BatchRequestContent(client, Arrays.asList(requestStep, requestStep2, requestStep3));
77+
InputStream batchRequestPayload = batchRequestContent.getBatchRequestContent();
78+
String requestContentString = readInputStream(batchRequestPayload);
79+
JsonElement jsonElement = JsonParser.parseString(requestContentString);
80+
JsonObject jsonObject = jsonElement.getAsJsonObject();
81+
if (jsonObject.has("requests")) {
82+
JsonElement requests = jsonObject.get("requests");
83+
assertTrue(requests.isJsonArray());
84+
JsonArray jsonArray = requests.getAsJsonArray();
85+
assertEquals(3, jsonArray.size());
86+
assertEquals("1", jsonArray.get(0).getAsJsonObject().get("id").getAsString());
87+
assertEquals("ab23", jsonArray.get(1).getAsJsonObject().get("id").getAsString());
88+
assertEquals("b", jsonArray.get(2).getAsJsonObject().get("id").getAsString());
89+
}
90+
}
91+
6592
@Test
6693
void BatchRequestContent_AddBatchRequestStepWithNewRequestStep() {
6794
BatchRequestStep batchRequestStep = new BatchRequestStep("1", defaultTestRequest);

0 commit comments

Comments
 (0)