Skip to content

Commit ea8f26b

Browse files
authored
make content-type configurable (#1010)
1 parent f32f8c0 commit ea8f26b

File tree

5 files changed

+57
-9
lines changed

5 files changed

+57
-9
lines changed

clients/line-bot-client-base/src/main/java/com/linecorp/bot/client/base/BotAwareJacksonConverter.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,9 +65,9 @@ public Converter<?, RequestBody> requestBodyConverter(Type type,
6565

6666
private RequestBody buildRequestBodyFromUploadFile(Object o) {
6767
if (o instanceof UploadFile.StringUploadFile uploadFile) {
68-
return RequestBody.create(uploadFile.src(), MediaType.parse("text/plain"));
68+
return RequestBody.create(uploadFile.src(), MediaType.parse(uploadFile.contentType()));
6969
} else if (o instanceof UploadFile.FileUploadFile uploadFile) {
70-
return RequestBody.create(uploadFile.src(), MediaType.parse("text/plain"));
70+
return RequestBody.create(uploadFile.src(), MediaType.parse(uploadFile.contentType()));
7171
}
7272

7373
throw new IllegalArgumentException("Unsupported object: " + o);

clients/line-bot-client-base/src/main/java/com/linecorp/bot/client/base/UploadFile.java

Lines changed: 27 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,28 +21,51 @@
2121
import java.io.File;
2222

2323
public interface UploadFile {
24+
/**
25+
* Upload file from String.
26+
*/
27+
static StringUploadFile fromString(String src, String contentType) {
28+
return new StringUploadFile(src, contentType);
29+
}
2430

2531
/**
2632
* Upload file from String.
33+
* content-type is hard-coded as `text/plain`.
34+
*
35+
* @deprecated use `fromString(String, String)` instead.
2736
*/
37+
@Deprecated
2838
static StringUploadFile fromString(String src) {
29-
return new StringUploadFile(src);
39+
return new StringUploadFile(src, "text/plain");
40+
}
41+
42+
/**
43+
* Upload file from File.
44+
*/
45+
static FileUploadFile fromFile(File src, String contentType) {
46+
return new FileUploadFile(src, contentType);
3047
}
3148

3249
/**
3350
* Upload file from File.
51+
* content-type is hard-coded as `text/plain`.
52+
*
53+
* @deprecated use `fromFile(File, String)` instead.
3454
*/
55+
@Deprecated
3556
static FileUploadFile fromFile(File src) {
36-
return new FileUploadFile(src);
57+
return new FileUploadFile(src, "text/plain");
3758
}
3859

3960
record StringUploadFile(
40-
String src
61+
String src,
62+
String contentType
4163
) implements UploadFile {
4264
}
4365

4466
record FileUploadFile(
45-
File src
67+
File src,
68+
String contentType
4669
) implements UploadFile {
4770
}
4871
}

clients/line-bot-messaging-api-client/src/test/java/com/linecorp/bot/messaging/client/MessagingApiBlobClientExTest.java

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,18 +18,22 @@
1818

1919
import static com.github.tomakehurst.wiremock.client.WireMock.aResponse;
2020
import static com.github.tomakehurst.wiremock.client.WireMock.configureFor;
21+
import static com.github.tomakehurst.wiremock.client.WireMock.containing;
2122
import static com.github.tomakehurst.wiremock.client.WireMock.equalTo;
2223
import static com.github.tomakehurst.wiremock.client.WireMock.get;
2324
import static com.github.tomakehurst.wiremock.client.WireMock.getRequestedFor;
25+
import static com.github.tomakehurst.wiremock.client.WireMock.post;
2426
import static com.github.tomakehurst.wiremock.client.WireMock.stubFor;
2527
import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo;
28+
import static com.github.tomakehurst.wiremock.client.WireMock.urlPathTemplate;
2629
import static com.github.tomakehurst.wiremock.client.WireMock.verify;
2730
import static com.github.tomakehurst.wiremock.core.WireMockConfiguration.wireMockConfig;
2831
import static java.util.Objects.requireNonNull;
2932
import static org.assertj.core.api.Assertions.assertThat;
3033

3134
import java.io.IOException;
3235
import java.net.URI;
36+
import java.util.Map;
3337

3438
import org.junit.jupiter.api.AfterEach;
3539
import org.junit.jupiter.api.BeforeEach;
@@ -40,9 +44,12 @@
4044
import org.slf4j.bridge.SLF4JBridgeHandler;
4145

4246
import com.github.tomakehurst.wiremock.WireMockServer;
47+
import com.ocadotechnology.gembus.test.Arranger;
4348

4449
import com.linecorp.bot.client.base.BlobContent;
4550
import com.linecorp.bot.client.base.Result;
51+
import com.linecorp.bot.client.base.UploadFile;
52+
import com.linecorp.bot.messaging.model.TextMessage;
4653

4754
@ExtendWith(MockitoExtension.class)
4855
@Timeout(5)
@@ -108,4 +115,22 @@ public void getMessageContent() throws IOException {
108115
assertThat(result.requestId()).isEqualTo("ppp");
109116
assertThat(requireNonNull(result.body()).string()).isEqualTo("JPG]]]]]]");
110117
}
118+
119+
@Test
120+
public void setRichMenuImageTest() {
121+
stubFor(post(urlPathTemplate("/v2/bot/richmenu/{richMenuId}/content"))
122+
.withHeader("content-type", containing("image/jpeg")).willReturn(
123+
aResponse()
124+
.withStatus(200)
125+
.withHeader("content-type", "application/json")
126+
.withBody("{}")));
127+
128+
String richMenuId = Arranger.some(String.class, Map.of(
129+
"message", () -> new TextMessage("hello"),
130+
"recipient", () -> null,
131+
"filter", () -> null));
132+
UploadFile body = UploadFile.fromString("HELLO_FILE", "image/jpeg");
133+
134+
target.setRichMenuImage(richMenuId, body).join();
135+
}
111136
}

samples/sample-manage-audience/src/main/java/com/linecorp/bot/messagingapidemoapp/controller/ManageAudienceController.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@ public CompletableFuture<RedirectView> postUploadByFile(
137137

138138
return blobClient.createAudienceForUploadingUserIds(
139139
description, isIfaAudience, uploadDescription,
140-
UploadFile.fromFile(convFile)
140+
UploadFile.fromFile(convFile, "text/plain")
141141
).thenApply(
142142
result -> new RedirectView("/manage_audience/" + result.body().audienceGroupId())
143143
).whenComplete((a, b) -> {
@@ -259,7 +259,7 @@ public CompletableFuture<RedirectView> postAddAudienceByFile(
259259

260260
return blobClient.addUserIdsToAudience(
261261
audienceGroupId, uploadDescription,
262-
UploadFile.fromFile(convFile)
262+
UploadFile.fromFile(convFile, "text/plain")
263263
).thenApply(
264264
it -> new RedirectView("/manage_audience/" + audienceGroupId)
265265
).whenComplete((a, b) -> {

templates/api_test.mustache

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ public class {{classname}}Test {
8787

8888
{{#allParams}}
8989
{{#isFile}}
90-
UploadFile {{paramName}} = UploadFile.fromString("HELLO_FILE");
90+
UploadFile {{paramName}} = UploadFile.fromString("HELLO_FILE", "text/plain");
9191
{{/isFile}}
9292
{{^isFile}}
9393
{{{dataType}}} {{paramName}} = Arranger.some({{dataType}}.class{{#mockMessage}}, Map.of("message", () -> new TextMessage("hello"), "recipient", () -> null, "filter", () -> null){{/mockMessage}});

0 commit comments

Comments
 (0)