|
26 | 26 | import static org.junit.Assert.assertArrayEquals;
|
27 | 27 | import static org.junit.Assert.assertEquals;
|
28 | 28 | import static org.junit.Assert.assertFalse;
|
| 29 | +import static org.junit.Assert.assertNull; |
29 | 30 | import static org.junit.Assert.assertTrue;
|
30 | 31 | import static org.mockito.Matchers.any;
|
31 | 32 | import static org.mockito.Matchers.anyString;
|
@@ -55,30 +56,51 @@ public void testConstructor() throws Exception {
|
55 | 56 | String name = "name";
|
56 | 57 | byte[] data = "hello".getBytes();
|
57 | 58 | String contentType = "content_type";
|
| 59 | + File file = temporaryFolder.newFile("test"); |
58 | 60 |
|
59 |
| - ParseFile file = new ParseFile(name, data, contentType); |
60 |
| - assertEquals("name", file.getName()); |
61 |
| - assertEquals("hello", new String(file.getData())); |
62 |
| - assertEquals("content_type", file.getState().mimeType()); |
63 |
| - assertTrue(file.isDirty()); |
64 |
| - |
65 |
| - file = new ParseFile(data); |
66 |
| - assertEquals("file", file.getName()); // Default |
67 |
| - assertEquals("hello", new String(file.getData())); |
68 |
| - assertEquals(null, file.getState().mimeType()); |
69 |
| - assertTrue(file.isDirty()); |
70 |
| - |
71 |
| - file = new ParseFile(name, data); |
72 |
| - assertEquals("name", file.getName()); |
73 |
| - assertEquals("hello", new String(file.getData())); |
74 |
| - assertEquals(null, file.getState().mimeType()); |
75 |
| - assertTrue(file.isDirty()); |
76 |
| - |
77 |
| - file = new ParseFile(data, contentType); |
78 |
| - assertEquals("file", file.getName()); // Default |
79 |
| - assertEquals("hello", new String(file.getData())); |
80 |
| - assertEquals("content_type", file.getState().mimeType()); |
81 |
| - assertTrue(file.isDirty()); |
| 61 | + ParseFile parseFile = new ParseFile(name, data, contentType); |
| 62 | + assertEquals("name", parseFile.getName()); |
| 63 | + assertEquals("hello", new String(parseFile.getData())); |
| 64 | + assertEquals("content_type", parseFile.getState().mimeType()); |
| 65 | + assertTrue(parseFile.isDirty()); |
| 66 | + |
| 67 | + parseFile = new ParseFile(data); |
| 68 | + assertEquals("file", parseFile.getName()); // Default |
| 69 | + assertEquals("hello", new String(parseFile.getData())); |
| 70 | + assertEquals(null, parseFile.getState().mimeType()); |
| 71 | + assertTrue(parseFile.isDirty()); |
| 72 | + |
| 73 | + parseFile = new ParseFile(name, data); |
| 74 | + assertEquals("name", parseFile.getName()); |
| 75 | + assertEquals("hello", new String(parseFile.getData())); |
| 76 | + assertEquals(null, parseFile.getState().mimeType()); |
| 77 | + assertTrue(parseFile.isDirty()); |
| 78 | + |
| 79 | + parseFile = new ParseFile(data, contentType); |
| 80 | + assertEquals("file", parseFile.getName()); // Default |
| 81 | + assertEquals("hello", new String(parseFile.getData())); |
| 82 | + assertEquals("content_type", parseFile.getState().mimeType()); |
| 83 | + assertTrue(parseFile.isDirty()); |
| 84 | + |
| 85 | + // TODO(mengyan): Test file pointer in ParseFile when we have proper stage strategy |
| 86 | + parseFile = new ParseFile(name, file, contentType); |
| 87 | + assertEquals("name", parseFile.getName()); |
| 88 | + assertEquals("content_type", parseFile.getState().mimeType()); |
| 89 | + assertTrue(parseFile.isDirty()); |
| 90 | + |
| 91 | + parseFile = new ParseFile(file); |
| 92 | + assertEquals("file", parseFile.getName()); // Default |
| 93 | + assertEquals(null, parseFile.getState().mimeType()); |
| 94 | + assertTrue(parseFile.isDirty()); |
| 95 | + |
| 96 | + parseFile = new ParseFile(name, file); |
| 97 | + assertEquals("name", parseFile.getName()); |
| 98 | + assertEquals(null, parseFile.getState().mimeType()); |
| 99 | + assertTrue(parseFile.isDirty()); |
| 100 | + |
| 101 | + parseFile = new ParseFile(file, contentType); |
| 102 | + assertEquals("file", parseFile.getName()); // Default |
| 103 | + assertEquals("content_type", parseFile.getState().mimeType()); |
82 | 104 | }
|
83 | 105 |
|
84 | 106 | @Test(expected = IllegalArgumentException.class)
|
@@ -162,6 +184,82 @@ public void testSaveAsyncCancelled() throws Exception {
|
162 | 184 | Matchers.<Task<Void>>any());
|
163 | 185 | }
|
164 | 186 |
|
| 187 | + @Test |
| 188 | + public void testSaveAsyncSuccessWithData() throws Exception { |
| 189 | + String name = "name"; |
| 190 | + byte[] data = "hello".getBytes(); |
| 191 | + String contentType = "content_type"; |
| 192 | + String url = "url"; |
| 193 | + ParseFile.State state = new ParseFile.State.Builder() |
| 194 | + .url(url) |
| 195 | + .build(); |
| 196 | + ParseFileController controller = mock(ParseFileController.class); |
| 197 | + when(controller.saveAsync( |
| 198 | + any(ParseFile.State.class), |
| 199 | + any(byte[].class), |
| 200 | + any(String.class), |
| 201 | + any(ProgressCallback.class), |
| 202 | + Matchers.<Task<Void>>any())).thenReturn(Task.forResult(state)); |
| 203 | + ParseCorePlugins.getInstance().registerFileController(controller); |
| 204 | + |
| 205 | + ParseFile parseFile = new ParseFile(name, data, contentType); |
| 206 | + ParseTaskUtils.wait(parseFile.saveAsync(null, null, null)); |
| 207 | + |
| 208 | + // Verify controller get the correct data |
| 209 | + ArgumentCaptor<ParseFile.State> stateCaptor = ArgumentCaptor.forClass(ParseFile.State.class); |
| 210 | + ArgumentCaptor<byte[]> dataCaptor = ArgumentCaptor.forClass(byte[].class); |
| 211 | + verify(controller, times(1)).saveAsync( |
| 212 | + stateCaptor.capture(), |
| 213 | + dataCaptor.capture(), |
| 214 | + any(String.class), |
| 215 | + any(ProgressCallback.class), |
| 216 | + Matchers.<Task<Void>>any()); |
| 217 | + assertNull(stateCaptor.getValue().url()); |
| 218 | + assertEquals(name, stateCaptor.getValue().name()); |
| 219 | + assertEquals(contentType, stateCaptor.getValue().mimeType()); |
| 220 | + assertArrayEquals(data, dataCaptor.getValue()); |
| 221 | + // Verify the state of ParseFile has been updated |
| 222 | + assertEquals(url, parseFile.getUrl()); |
| 223 | + } |
| 224 | + |
| 225 | + @Test |
| 226 | + public void testSaveAsyncSuccessWithFile() throws Exception { |
| 227 | + String name = "name"; |
| 228 | + File file = temporaryFolder.newFile("test"); |
| 229 | + String contentType = "content_type"; |
| 230 | + String url = "url"; |
| 231 | + ParseFile.State state = new ParseFile.State.Builder() |
| 232 | + .url(url) |
| 233 | + .build(); |
| 234 | + ParseFileController controller = mock(ParseFileController.class); |
| 235 | + when(controller.saveAsync( |
| 236 | + any(ParseFile.State.class), |
| 237 | + any(File.class), |
| 238 | + any(String.class), |
| 239 | + any(ProgressCallback.class), |
| 240 | + Matchers.<Task<Void>>any())).thenReturn(Task.forResult(state)); |
| 241 | + ParseCorePlugins.getInstance().registerFileController(controller); |
| 242 | + |
| 243 | + ParseFile parseFile = new ParseFile(name, file, contentType); |
| 244 | + ParseTaskUtils.wait(parseFile.saveAsync(null, null, null)); |
| 245 | + |
| 246 | + // Verify controller get the correct data |
| 247 | + ArgumentCaptor<ParseFile.State> stateCaptor = ArgumentCaptor.forClass(ParseFile.State.class); |
| 248 | + ArgumentCaptor<File> fileCaptor = ArgumentCaptor.forClass(File.class); |
| 249 | + verify(controller, times(1)).saveAsync( |
| 250 | + stateCaptor.capture(), |
| 251 | + fileCaptor.capture(), |
| 252 | + any(String.class), |
| 253 | + any(ProgressCallback.class), |
| 254 | + Matchers.<Task<Void>>any()); |
| 255 | + assertNull(stateCaptor.getValue().url()); |
| 256 | + assertEquals(name, stateCaptor.getValue().name()); |
| 257 | + assertEquals(contentType, stateCaptor.getValue().mimeType()); |
| 258 | + assertEquals(file, fileCaptor.getValue()); |
| 259 | + // Verify the state of ParseFile has been updated |
| 260 | + assertEquals(url, parseFile.getUrl()); |
| 261 | + } |
| 262 | + |
165 | 263 | // TODO(grantland): testSaveAsyncNotDirtyAfterQueueAwait
|
166 | 264 | // TODO(grantland): testSaveAsyncSuccess
|
167 | 265 | // TODO(grantland): testSaveAsyncFailure
|
@@ -287,6 +385,12 @@ public void testTaskQueuedMethods() throws Exception {
|
287 | 385 | any(String.class),
|
288 | 386 | any(ProgressCallback.class),
|
289 | 387 | Matchers.<Task<Void>>any())).thenReturn(Task.forResult(state));
|
| 388 | + when(controller.saveAsync( |
| 389 | + any(ParseFile.State.class), |
| 390 | + any(File.class), |
| 391 | + any(String.class), |
| 392 | + any(ProgressCallback.class), |
| 393 | + Matchers.<Task<Void>>any())).thenReturn(Task.forResult(state)); |
290 | 394 | when(controller.fetchAsync(
|
291 | 395 | any(ParseFile.State.class),
|
292 | 396 | any(String.class),
|
|
0 commit comments