Skip to content

Commit 34c68de

Browse files
authored
Merge pull request #816 from FabienVSymphony/BYC-1642
BYC-1642 Add support for list of ApiClientBodyPart
2 parents f0948e2 + 42b172e commit 34c68de

File tree

3 files changed

+50
-2
lines changed

3 files changed

+50
-2
lines changed

symphony-bdk-http/symphony-bdk-http-api/src/main/java/com/symphony/bdk/http/api/util/ApiUtils.java

+13-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package com.symphony.bdk.http.api.util;
22

3+
import com.symphony.bdk.http.api.ApiClientBodyPart;
4+
35
import org.apiguardian.api.API;
46
import org.slf4j.Logger;
57
import org.slf4j.LoggerFactory;
@@ -55,12 +57,22 @@ public static void addDefaultRootCaCertificates(KeyStore trustStore) throws Gene
5557
}
5658

5759
public static boolean isCollectionOfFiles(Object paramValue) {
60+
return isCollectionOf(paramValue, File.class);
61+
}
62+
63+
public static boolean isCollectionOfApiClientBodyPart(Object paramValue) {
64+
return isCollectionOf(paramValue, ApiClientBodyPart.class);
65+
}
66+
67+
68+
private static boolean isCollectionOf(Object paramValue, Class clazz) {
69+
5870
if (!(paramValue instanceof Collection<?>)) {
5971
return false;
6072
}
6173

6274
final Collection<?> collection = (Collection<?>) paramValue;
63-
return !collection.isEmpty() && collection.stream().allMatch(p -> p instanceof File);
75+
return !collection.isEmpty() && collection.stream().allMatch(clazz::isInstance);
6476
}
6577

6678
private static String getBdkVersion() {

symphony-bdk-http/symphony-bdk-http-webclient/src/main/java/com/symphony/bdk/http/webclient/ApiClientWebClient.java

+6-1
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
import java.util.stream.Collectors;
3838
import java.util.stream.Stream;
3939

40+
import static com.symphony.bdk.http.api.util.ApiUtils.isCollectionOfApiClientBodyPart;
4041
import static com.symphony.bdk.http.api.util.ApiUtils.isCollectionOfFiles;
4142

4243
/**
@@ -241,8 +242,12 @@ private void serializeMultiPartDataEntry(String paramKey, Object paramValue,
241242
}
242243
} else if (paramValue instanceof ApiClientBodyPart) {
243244
serializeApiClientBodyPart(paramKey, (ApiClientBodyPart) paramValue, formValueMap);
245+
} else if (isCollectionOfApiClientBodyPart(paramValue)) {
246+
for (Object o : (Collection<?>) paramValue) {
247+
serializeApiClientBodyPart(paramKey, (ApiClientBodyPart) o, formValueMap);
248+
}
244249
} else {
245-
formValueMap.add(paramKey, parameterToString(paramValue));
250+
formValueMap.add(paramKey, parameterToString(paramValue));
246251
}
247252
}
248253

symphony-bdk-http/symphony-bdk-http-webclient/src/test/java/com/symphony/bdk/http/webclient/ApiClientWebClientTest.java

+31
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import static org.mockito.ArgumentMatchers.anyString;
55

66
import com.symphony.bdk.http.api.ApiClient;
7+
import com.symphony.bdk.http.api.ApiClientBodyPart;
78
import com.symphony.bdk.http.api.ApiException;
89
import com.symphony.bdk.http.api.ApiResponse;
910
import com.symphony.bdk.http.api.Pair;
@@ -24,8 +25,10 @@
2425
import org.mockserver.model.ParameterBody;
2526
import org.springframework.http.MediaType;
2627

28+
import java.io.ByteArrayInputStream;
2729
import java.io.FileOutputStream;
2830
import java.io.IOException;
31+
import java.io.InputStream;
2932
import java.nio.charset.StandardCharsets;
3033
import java.nio.file.Path;
3134
import java.util.ArrayList;
@@ -286,6 +289,34 @@ void testInvokeApiWithFormValueTest(final BdkMockServer mockServer, @TempDir Pat
286289
assertEquals("success", response.getData().getMessage());
287290
}
288291

292+
@Test
293+
void testInvokeApiWithApiClientBodyPart(final BdkMockServer mockServer) throws ApiException {
294+
mockServer.onRequestModifierWithResponse(200,
295+
httpRequest -> httpRequest
296+
.withMethod("POST")
297+
.withPath("/test-api")
298+
.withHeader(Header.header("sessionToken", "test-token"))
299+
.withBody(anyString())
300+
.withCookie("cookie", "test-cookie"),
301+
httpResponse -> httpResponse
302+
.withBody("{\"code\": 200, \"message\": \"success\"}"));
303+
Map<String, Object> formParams = new HashMap<>();
304+
305+
formParams.put("attachment", Collections.singletonList(new ApiClientBodyPart(new ByteArrayInputStream("test".getBytes()), "filename")));
306+
307+
308+
ApiResponse<Response> response =
309+
this.apiClient.invokeAPI("/test-api", "POST", null, null,
310+
Collections.singletonMap("sessionToken", "test-token"),
311+
Collections.singletonMap("cookie", "test-cookie"), formParams, null, MediaType.MULTIPART_FORM_DATA_VALUE,
312+
new String[] {},
313+
new TypeReference<Response>() {});
314+
315+
316+
assertEquals(200, response.getData().getCode());
317+
assertEquals("success", response.getData().getMessage());
318+
}
319+
289320
@Test
290321
void shouldClearTraceIdIfNotSet(final BdkMockServer mockServer) throws ApiException {
291322
mockServer.onRequestModifierWithResponse(200,

0 commit comments

Comments
 (0)