Skip to content

Commit fa04655

Browse files
authored
Merge pull request #2 from imagekit-developer/ci_features
CI badge
2 parents 6b6f09b + 40fe859 commit fa04655

File tree

8 files changed

+281
-25
lines changed

8 files changed

+281
-25
lines changed

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,3 +6,5 @@ config.properties
66
.DS_Store
77
.project
88
.settings
9+
bin
10+
.classpath

README.md

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
# ImageKit Java SDK
22

33
[![Java CI](https://github.com/imagekit-developer/imagekit-java/workflows/Java%20CI/badge.svg)](https://github.com/imagekit-developer/imagekit-java)
4+
[![Release](https://jitpack.io/v/com.github.imagekit-developer/imagekit-java.svg)](https://jitpack.io/#com.github.imagekit-developer/imagekit-java)
45
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
56
[![Twitter Follow](https://img.shields.io/twitter/follow/imagekitio?label=Follow&style=social)](https://twitter.com/ImagekitIo)
67

@@ -42,7 +43,7 @@ allprojects {
4243
Step 2. Add the dependency on project's `build.gradle`:
4344
```
4445
dependencies {
45-
implementation 'com.github.imagekit-developer:imagekit-java:1.0.0'
46+
implementation 'com.github.imagekit-developer:imagekit-java:1.0.1'
4647
}
4748
```
4849
### Maven users
@@ -60,7 +61,7 @@ Step 2. Add the dependency in POM file:
6061
<dependency>
6162
<groupId>com.github.imagekit-developer</groupId>
6263
<artifactId>imagekit-java</artifactId>
63-
<version>1.0.0</version>
64+
<version>1.0.1</version>
6465
</dependency>
6566
```
6667

@@ -121,7 +122,7 @@ String url = ImageKit.getInstance().getUrl(options);
121122
```
122123
The result in a URL like
123124
```
124-
https://ik.imagekit.io/your_imagekit_id/tr:w-400,h-600/default-image.jpg?v=123&ik-sdk-version=java-1.0.0
125+
https://ik.imagekit.io/your_imagekit_id/tr:w-400,h-600/default-image.jpg?v=123&ik-sdk-version=java-1.0.1
125126
```
126127

127128
**2. Using full image URL**
@@ -146,7 +147,7 @@ String url = ImageKit.getInstance().getUrl(options);
146147
The results in a URL like
147148

148149
```
149-
https://ik.imagekit.io/your_imagekit_id/default-image.jpg?tr=w-400,h-600&ik-sdk-version=java-1.0.0
150+
https://ik.imagekit.io/your_imagekit_id/default-image.jpg?tr=w-400,h-600&ik-sdk-version=java-1.0.1
150151
```
151152

152153
The ```.getUrl()``` method accepts the following parameters
@@ -186,7 +187,7 @@ String url = ImageKit.getInstance().getUrl(options);
186187

187188
Sample Result URL -
188189
```
189-
https://ik.imagekit.io/your_imagekit_id/default-image.jpg?tr=h-300&w-400:rt-90&ik-sdk-version=java-1.0.0
190+
https://ik.imagekit.io/your_imagekit_id/default-image.jpg?tr=h-300&w-400:rt-90&ik-sdk-version=java-1.0.1
190191
```
191192

192193
**2. Sharpening and contrast transforms and a progressive JPG image**
@@ -214,7 +215,7 @@ String url = ImageKit.getInstance().getUrl(options);
214215
Note that because the `src` parameter was used, the transformation string gets added as a query parameter.
215216

216217
```
217-
https://ik.imagekit.io/your_imagekit_id/default-image.jpg?tr=f-jpg&pr-true&e-sharpen&e-contrast-1&ik-sdk-version=java-1.0.0
218+
https://ik.imagekit.io/your_imagekit_id/default-image.jpg?tr=f-jpg&pr-true&e-sharpen&e-contrast-1&ik-sdk-version=java-1.0.1
218219
```
219220

220221
**3. Signed URL that expires in 300 seconds with the default URL endpoint and other query parameters**
@@ -235,7 +236,7 @@ String url = ImageKit.getInstance().getUrl(options);
235236
```
236237
**Sample Result URL**
237238
```
238-
https://ik.imagekit.io/your_imagekit_id/tr:h-600,w-400/default-image.jpg?ik-t=1567358667&ik-s=f2c7cdacbe7707b71a83d49cf1c6110e3d701054&ik-sdk-version=java-1.0.0
239+
https://ik.imagekit.io/your_imagekit_id/tr:h-600,w-400/default-image.jpg?ik-t=1567358667&ik-s=f2c7cdacbe7707b71a83d49cf1c6110e3d701054&ik-sdk-version=java-1.0.1
239240
```
240241

241242
**List of transformations**

imagekit-sdk/build.gradle

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ plugins {
44
}
55

66
group 'io.imagekit.sdk'
7-
version '1.0.0'
7+
version '1.0.1'
88

99
sourceCompatibility = 1.8
1010

@@ -16,4 +16,5 @@ dependencies {
1616
compile fileTree(include: ['*.jar'], dir: '../libs')
1717
testCompile group: 'junit', name: 'junit', version: '4.12'
1818
testCompile "org.mockito:mockito-all:2.+"
19+
testImplementation 'com.squareup.okhttp3:mockwebserver:3.10.0'
1920
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
package io.imagekit.sdk.constants;
22

33
public class Version {
4-
public static final String VERSION_CODE="java-1.0.0";
4+
public static final String VERSION_CODE="java-1.0.1";
55
}

imagekit-sdk/src/main/java/io/imagekit/sdk/tasks/MultipartBuilder.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,4 +64,13 @@ public RequestBody build(FileUpdateRequest fileUpdateRequest){
6464
}
6565
return RequestBody.create(MediaType.parse("application/json; charset=utf-8"), new Gson().toJson(fileUpdateRequest));
6666
}
67+
68+
public RequestBody build(String json){
69+
if (json==null){
70+
throw new RuntimeException("Error: You can't send null body.");
71+
}
72+
else {
73+
return RequestBody.create(MediaType.parse("application/json; charset=utf-8"), json);
74+
}
75+
}
6776
}

imagekit-sdk/src/main/java/io/imagekit/sdk/tasks/RestClient.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -334,7 +334,7 @@ public ResultFileDelete bulkDeleteFiles(List<String> fileIds){
334334
request=new Request.Builder()
335335
.url(url)
336336
.post(
337-
RequestBody.create(MediaType.parse("application/json; charset=utf-8"), String.format("{\"fileIds\":%s}",new Gson().toJson(fileIds)))
337+
multipartBuilder.build(String.format("{\"fileIds\":%s}",new Gson().toJson(fileIds)))
338338
)
339339
.headers(Headers.of(headers))
340340
.build();
@@ -380,7 +380,7 @@ public ResultCache purgeCache(String url){
380380
request=new Request.Builder()
381381
.url("https://api.imagekit.io/v1/files/purge")
382382
.post(
383-
RequestBody.create(MediaType.parse("application/json; charset=utf-8"), String.format("{\"url\":\"%s\"}",url))
383+
multipartBuilder.build(String.format("{\"url\":\"%s\"}",url))
384384
)
385385
.headers(Headers.of(headers))
386386
.build();
Lines changed: 239 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,239 @@
1+
package io.imagekit.sdk.tasks;
2+
3+
import com.google.gson.Gson;
4+
import io.imagekit.sdk.models.FileCreateRequest;
5+
import io.imagekit.sdk.models.FileUpdateRequest;
6+
import okhttp3.*;
7+
import okhttp3.mockwebserver.Dispatcher;
8+
import okhttp3.mockwebserver.MockResponse;
9+
import okhttp3.mockwebserver.MockWebServer;
10+
import okhttp3.mockwebserver.RecordedRequest;
11+
import org.junit.After;
12+
import org.junit.Before;
13+
import org.junit.Test;
14+
import java.util.ArrayList;
15+
import java.util.HashMap;
16+
import java.util.List;
17+
import java.util.Map;
18+
import java.util.concurrent.TimeUnit;
19+
import static org.junit.Assert.assertEquals;
20+
21+
22+
public class MultipartBuilderTest {
23+
MockWebServer server;
24+
Map<String, String> headers;
25+
OkHttpClient okHttpClient;
26+
MultipartBuilder SUT;
27+
28+
@Before
29+
public void setUp() throws Exception {
30+
SUT=new MultipartBuilder();
31+
32+
String credential = Credentials.basic("private_key_test","");
33+
headers=new HashMap<>();
34+
headers.put("Accept-Encoding","application/json");
35+
headers.put("Content-Type","application/json");
36+
headers.put("Authorization",credential);
37+
38+
server = new MockWebServer();
39+
MockResponse response=new MockResponse()
40+
.setResponseCode(200)
41+
.setBody("{isSuccessful=true, message='Your request contains invalid file.', help='For support kindly contact us at [email protected] .', fileId='null', name='null', url='null', thumbnail='null', height=0, width=0, size=0, filePath='null', tags='null', isPrivateFile=false, customCoordinates='null', fileType='null'}");
42+
43+
server.setDispatcher(new Dispatcher() {
44+
@Override
45+
public MockResponse dispatch(RecordedRequest request) throws InterruptedException {
46+
return response;
47+
}
48+
});
49+
server.start();
50+
51+
okHttpClient= new OkHttpClient.Builder()
52+
.connectTimeout(2, TimeUnit.SECONDS)
53+
.readTimeout(2, TimeUnit.SECONDS)
54+
.writeTimeout(2, TimeUnit.SECONDS)
55+
.build();
56+
57+
}
58+
59+
@After
60+
public void tearDown() throws Exception {
61+
server.shutdown();
62+
}
63+
64+
@Test
65+
public void build_test_with_FileCreateRequest() throws Exception{
66+
67+
FileCreateRequest fileCreateRequest=new FileCreateRequest("f06830ca9f1e3e90","demo.jpg");
68+
fileCreateRequest.setPrivateFile(true);
69+
70+
MultipartBody body = SUT.build(fileCreateRequest);
71+
72+
HttpUrl baseUrl = server.url("/api/v1/files/upload");
73+
Request request=new Request.Builder()
74+
.url(baseUrl)
75+
.post(body)
76+
.headers(Headers.of(headers))
77+
.build();
78+
79+
Response response = okHttpClient.newCall(request).execute();
80+
81+
String boundary=body.boundary();
82+
83+
String expectedMultipartData="--"+boundary+"\r\n" +
84+
"Content-Disposition: form-data; name=\"file\"\r\n" +
85+
"Content-Length: 16\r\n\r\n" +
86+
"f06830ca9f1e3e90\r\n" +
87+
"--"+boundary+"\r\n" +
88+
"Content-Disposition: form-data; name=\"fileName\"\r\n" +
89+
"Content-Length: 8\r\n\r\n" +
90+
"demo.jpg\r\n" +
91+
"--"+boundary+"\r\n" +
92+
"Content-Disposition: form-data; name=\"useUniqueFileName\"\r\n" +
93+
"Content-Length: 4\r\n\r\n" +
94+
"true\r\n" +
95+
"--"+boundary+"\r\n" +
96+
"Content-Disposition: form-data; name=\"isPrivateFile\"\r\n" +
97+
"Content-Length: 4\r\n\r\n" +
98+
"true\r\n" +
99+
"--"+boundary+"--\r\n";
100+
101+
// It's capture multipart request
102+
RecordedRequest recordedRequest=server.takeRequest();
103+
104+
String data=recordedRequest.getBody().readUtf8();
105+
106+
assertEquals(expectedMultipartData, data);
107+
}
108+
109+
@Test
110+
public void build_test_with_FileCreateRequest_more_params() throws Exception{
111+
112+
FileCreateRequest fileCreateRequest=new FileCreateRequest("f06830ca9f1e3e90","demo.jpg");
113+
fileCreateRequest.setPrivateFile(true);
114+
fileCreateRequest.setFolder("/sample-folder");
115+
List<String> tags=new ArrayList<>();
116+
tags.add("Software");
117+
tags.add("Developer");
118+
tags.add("Engineer");
119+
fileCreateRequest.setTags(tags);
120+
fileCreateRequest.setCustomCoordinates("10,10,100,100");
121+
List<String> responseFields=new ArrayList<>();
122+
responseFields.add("metadata");
123+
fileCreateRequest.setResponseFields(responseFields);
124+
125+
MultipartBody body = SUT.build(fileCreateRequest);
126+
127+
HttpUrl baseUrl = server.url("/api/v1/files/upload");
128+
Request request=new Request.Builder()
129+
.url(baseUrl)
130+
.post(body)
131+
.headers(Headers.of(headers))
132+
.build();
133+
134+
Response response = okHttpClient.newCall(request).execute();
135+
136+
String boundary=body.boundary();
137+
138+
String expectedMultipartData="--"+boundary+"\r\n" +
139+
"Content-Disposition: form-data; name=\"file\"\r\n" +
140+
"Content-Length: 16\r\n\r\n" +
141+
"f06830ca9f1e3e90\r\n" +
142+
"--"+boundary+"\r\n" +
143+
"Content-Disposition: form-data; name=\"fileName\"\r\n" +
144+
"Content-Length: 8\r\n\r\n" +
145+
"demo.jpg\r\n" +
146+
"--"+boundary+"\r\n" +
147+
"Content-Disposition: form-data; name=\"useUniqueFileName\"\r\n" +
148+
"Content-Length: 4\r\n\r\n" +
149+
"true\r\n" +
150+
"--"+boundary+"\r\n" +
151+
"Content-Disposition: form-data; name=\"tags\"\r\n" +
152+
"Content-Length: 27\r\n\r\n" +
153+
"Software,Developer,Engineer\r\n" +
154+
"--"+boundary+"\r\n" +
155+
"Content-Disposition: form-data; name=\"folder\"\r\n" +
156+
"Content-Length: 14\r\n\r\n" +
157+
"/sample-folder\r\n" +
158+
"--"+boundary+"\r\n" +
159+
"Content-Disposition: form-data; name=\"isPrivateFile\"\r\n" +
160+
"Content-Length: 4\r\n\r\n" +
161+
"true\r\n" +
162+
"--"+boundary+"\r\n" +
163+
"Content-Disposition: form-data; name=\"customCoordinates\"\r\n" +
164+
"Content-Length: 13\r\n\r\n" +
165+
"10,10,100,100\r\n" +
166+
"--"+boundary+"\r\n" +
167+
"Content-Disposition: form-data; name=\"responseFields\"\r\n" +
168+
"Content-Length: 8\r\n\r\n" +
169+
"metadata\r\n" +
170+
"--"+boundary+"--\r\n";
171+
172+
173+
// It's capture multipart request
174+
RecordedRequest recordedRequest=server.takeRequest();
175+
176+
String data=recordedRequest.getBody().readUtf8();
177+
178+
assertEquals(expectedMultipartData, data);
179+
}
180+
181+
@Test
182+
public void build_test_with_FileUpdateRequest() throws Exception{
183+
184+
FileUpdateRequest fileUpdateRequest=new FileUpdateRequest("598821f949c0a938d57563bd");
185+
List<String> tags=new ArrayList<>();
186+
tags.add("t-shirt");
187+
tags.add("round-neck");
188+
tags.add("sale2020");
189+
fileUpdateRequest.setTags(tags);
190+
191+
RequestBody body=SUT.build(fileUpdateRequest);
192+
193+
HttpUrl baseUrl = server.url(String.format("/v1/files/%s/details",fileUpdateRequest.getFileId()));
194+
Request request=new Request.Builder()
195+
.url(baseUrl)
196+
.post(body)
197+
.headers(Headers.of(headers))
198+
.build();
199+
200+
Response response = okHttpClient.newCall(request).execute();
201+
202+
203+
String expectedRequestObject="{\"fileId\":\"598821f949c0a938d57563bd\",\"tags\":[\"t-shirt\",\"round-neck\",\"sale2020\"]}";
204+
205+
// It's capture multipart request
206+
RecordedRequest recordedRequest=server.takeRequest();
207+
208+
String data=recordedRequest.getBody().readUtf8();
209+
210+
assertEquals(expectedRequestObject, data);
211+
}
212+
213+
@Test
214+
public void build_test_with_From_Json_String() throws Exception{
215+
216+
String json="{\"fileIds\":[\"598821f949c0a938d57534bd\",\"338821f949c0a938d57563bz\",\"987821f949c0a938d57563rt\"]}";
217+
218+
RequestBody body=SUT.build(json);
219+
220+
HttpUrl baseUrl = server.url("/v1/files/batch/deleteByFileIds");
221+
Request request=new Request.Builder()
222+
.url(baseUrl)
223+
.post(body)
224+
.headers(Headers.of(headers))
225+
.build();
226+
227+
Response response = okHttpClient.newCall(request).execute();
228+
229+
230+
String expectedRequestObject="{\"fileIds\":[\"598821f949c0a938d57534bd\",\"338821f949c0a938d57563bz\",\"987821f949c0a938d57563rt\"]}";
231+
232+
// It's capture multipart request
233+
RecordedRequest recordedRequest=server.takeRequest();
234+
235+
String data=recordedRequest.getBody().readUtf8();
236+
237+
assertEquals(expectedRequestObject, data);
238+
}
239+
}

0 commit comments

Comments
 (0)