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 support@imagekit.io .', 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