@@ -97,7 +97,7 @@ public void testSaveAsyncNotDirty() throws Exception {
97
97
ParseFile .State state = new ParseFile .State .Builder ()
98
98
.url ("http://example.com" )
99
99
.build ();
100
- Task <ParseFile .State > task = controller .saveAsync (state , null , null , null , null );
100
+ Task <ParseFile .State > task = controller .saveAsync (state , ( byte []) null , null , null , null );
101
101
task .waitForCompletion ();
102
102
103
103
verify (restClient , times (0 )).execute (any (ParseHttpRequest .class ));
@@ -113,15 +113,15 @@ public void testSaveAsyncAlreadyCancelled() throws Exception {
113
113
114
114
ParseFile .State state = new ParseFile .State .Builder ().build ();
115
115
Task <Void > cancellationToken = Task .cancelled ();
116
- Task <ParseFile .State > task = controller .saveAsync (state , null , null , null , cancellationToken );
116
+ Task <ParseFile .State > task = controller .saveAsync (state , ( byte []) null , null , null , cancellationToken );
117
117
task .waitForCompletion ();
118
118
119
119
verify (restClient , times (0 )).execute (any (ParseHttpRequest .class ));
120
120
assertTrue (task .isCancelled ());
121
121
}
122
122
123
123
@ Test
124
- public void testSaveAsyncSuccess () throws Exception {
124
+ public void testSaveAsyncSuccessWithByteArray () throws Exception {
125
125
JSONObject json = new JSONObject ();
126
126
json .put ("name" , "new_file_name" );
127
127
json .put ("url" , "http://example.com" );
@@ -155,7 +155,43 @@ public void testSaveAsyncSuccess() throws Exception {
155
155
}
156
156
157
157
@ Test
158
- public void testSaveAsyncFailure () throws Exception {
158
+ public void testSaveAsyncSuccessWithFile () throws Exception {
159
+ JSONObject json = new JSONObject ();
160
+ json .put ("name" , "new_file_name" );
161
+ json .put ("url" , "http://example.com" );
162
+ String content = json .toString ();
163
+
164
+ ParseHttpResponse response = mock (ParseHttpResponse .class );
165
+ when (response .getStatusCode ()).thenReturn (200 );
166
+ when (response .getContent ()).thenReturn (new ByteArrayInputStream (content .getBytes ()));
167
+ when (response .getTotalSize ()).thenReturn ((long ) content .length ());
168
+
169
+ ParseHttpClient restClient = mock (ParseHttpClient .class );
170
+ when (restClient .execute (any (ParseHttpRequest .class ))).thenReturn (response );
171
+
172
+ File root = temporaryFolder .getRoot ();
173
+ ParseFileController controller = new ParseFileController (restClient , root );
174
+
175
+ File file = new File (root , "test" );
176
+ ParseFileUtils .writeStringToFile (file , "content" , "UTF-8" );
177
+ ParseFile .State state = new ParseFile .State .Builder ()
178
+ .name ("file_name" )
179
+ .mimeType ("mime_type" )
180
+ .build ();
181
+ Task <ParseFile .State > task = controller .saveAsync (state , file , null , null , null );
182
+ ParseFile .State result = ParseTaskUtils .wait (task );
183
+
184
+ verify (restClient , times (1 )).execute (any (ParseHttpRequest .class ));
185
+ assertEquals ("new_file_name" , result .name ());
186
+ assertEquals ("http://example.com" , result .url ());
187
+ File cachedFile = new File (root , "new_file_name" );
188
+ assertTrue (cachedFile .exists ());
189
+ assertTrue (file .exists ());
190
+ assertEquals ("content" , ParseFileUtils .readFileToString (cachedFile , "UTF-8" ));
191
+ }
192
+
193
+ @ Test
194
+ public void testSaveAsyncFailureWithByteArray () throws Exception {
159
195
// TODO(grantland): Remove once we no longer rely on retry logic.
160
196
ParseRequest .setDefaultInitialRetryDelay (1L );
161
197
@@ -180,6 +216,34 @@ public void testSaveAsyncFailure() throws Exception {
180
216
assertEquals (0 , root .listFiles ().length );
181
217
}
182
218
219
+ @ Test
220
+ public void testSaveAsyncFailureWithFile () throws Exception {
221
+ // TODO(grantland): Remove once we no longer rely on retry logic.
222
+ ParseRequest .setDefaultInitialRetryDelay (1L );
223
+
224
+ ParseHttpClient restClient = mock (ParseHttpClient .class );
225
+ when (restClient .execute (any (ParseHttpRequest .class ))).thenThrow (new IOException ());
226
+
227
+ File root = temporaryFolder .getRoot ();
228
+ ParseFileController controller = new ParseFileController (restClient , root );
229
+
230
+ File file = temporaryFolder .newFile ("test" );
231
+ ParseFile .State state = new ParseFile .State .Builder ()
232
+ .build ();
233
+ Task <ParseFile .State > task = controller .saveAsync (state , file , null , null , null );
234
+ task .waitForCompletion ();
235
+
236
+ // TODO(grantland): Abstract out command runner so we don't have to account for retries.
237
+ verify (restClient , times (5 )).execute (any (ParseHttpRequest .class ));
238
+ assertTrue (task .isFaulted ());
239
+ Exception error = task .getError ();
240
+ assertThat (error , instanceOf (ParseException .class ));
241
+ assertEquals (ParseException .CONNECTION_FAILED , ((ParseException ) error ).getCode ());
242
+ // Make sure the original file is not deleted and there is no cache file in the folder
243
+ assertEquals (1 , root .listFiles ().length );
244
+ assertTrue (file .exists ());
245
+ }
246
+
183
247
//endregion
184
248
185
249
//region testFetchAsync
0 commit comments