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