From 68c43c1371f77553afb2dbf9af370feaa5740c59 Mon Sep 17 00:00:00 2001 From: Philip Gichuhi Date: Tue, 20 Aug 2024 10:13:08 +0300 Subject: [PATCH] fix: Retain insertion order of batch request steps --- .../core/content/BatchRequestContent.java | 6 ++--- .../core/content/BatchRequestContentTest.java | 27 +++++++++++++++++++ 2 files changed, 30 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/microsoft/graph/core/content/BatchRequestContent.java b/src/main/java/com/microsoft/graph/core/content/BatchRequestContent.java index 9b1072fb..9faa912b 100644 --- a/src/main/java/com/microsoft/graph/core/content/BatchRequestContent.java +++ b/src/main/java/com/microsoft/graph/core/content/BatchRequestContent.java @@ -24,7 +24,7 @@ * A class representing the content of a batch request. */ public class BatchRequestContent { - private HashMap batchRequestSteps; + private LinkedHashMap batchRequestSteps; private RequestAdapter requestAdapter; private final String maxStepsExceededMessage = String.format(Locale.US,ErrorConstants.Messages.MAXIMUM_VALUE_EXCEEDED, "Number of request steps", CoreConstants.BatchRequest.MAX_REQUESTS); @@ -56,7 +56,7 @@ public BatchRequestContent(@Nonnull RequestAdapter requestAdapter, @Nonnull List throw new IllegalArgumentException(maxStepsExceededMessage); } - this.batchRequestSteps = new HashMap<>(); + this.batchRequestSteps = new LinkedHashMap<>(); for (BatchRequestStep requestStep : batchRequestSteps) { addBatchRequestStep(requestStep); } @@ -68,7 +68,7 @@ public BatchRequestContent(@Nonnull RequestAdapter requestAdapter, @Nonnull List @Nonnull public Map getBatchRequestSteps() { - return new HashMap<>(batchRequestSteps); + return new LinkedHashMap<>(batchRequestSteps); } /** * Adds a batch request step to the batch request. diff --git a/src/test/java/com/microsoft/graph/core/content/BatchRequestContentTest.java b/src/test/java/com/microsoft/graph/core/content/BatchRequestContentTest.java index b944a189..c74d4164 100644 --- a/src/test/java/com/microsoft/graph/core/content/BatchRequestContentTest.java +++ b/src/test/java/com/microsoft/graph/core/content/BatchRequestContentTest.java @@ -2,6 +2,10 @@ import com.microsoft.graph.core.CoreConstants; import com.microsoft.graph.core.ErrorConstants; +import com.google.gson.JsonArray; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; import com.microsoft.graph.core.BaseClient; import com.microsoft.graph.core.models.BatchRequestStep; import com.microsoft.graph.core.requests.IBaseClient; @@ -62,6 +66,29 @@ void BatchRequestContent_InitializeWithInvalidDependsOnIds() { assertEquals(ErrorConstants.Messages.INVALID_DEPENDS_ON_REQUEST_ID, ex.getMessage()); } } + + @Test + void BatchRequestContent_RetainsOrderOfBatchRequestSteps() throws Exception { + BatchRequestStep requestStep = new BatchRequestStep("1", defaultTestRequest); + BatchRequestStep requestStep2 = new BatchRequestStep("ab23", defaultTestRequest); + BatchRequestStep requestStep3 = new BatchRequestStep("b", defaultTestRequest, Arrays.asList("1")); + + BatchRequestContent batchRequestContent = new BatchRequestContent(client, Arrays.asList(requestStep, requestStep2, requestStep3)); + InputStream batchRequestPayload = batchRequestContent.getBatchRequestContent(); + String requestContentString = readInputStream(batchRequestPayload); + JsonElement jsonElement = JsonParser.parseString(requestContentString); + JsonObject jsonObject = jsonElement.getAsJsonObject(); + if (jsonObject.has("requests")) { + JsonElement requests = jsonObject.get("requests"); + assertTrue(requests.isJsonArray()); + JsonArray jsonArray = requests.getAsJsonArray(); + assertEquals(3, jsonArray.size()); + assertEquals("1", jsonArray.get(0).getAsJsonObject().get("id").getAsString()); + assertEquals("ab23", jsonArray.get(1).getAsJsonObject().get("id").getAsString()); + assertEquals("b", jsonArray.get(2).getAsJsonObject().get("id").getAsString()); + } + } + @Test void BatchRequestContent_AddBatchRequestStepWithNewRequestStep() { BatchRequestStep batchRequestStep = new BatchRequestStep("1", defaultTestRequest);