@Override /* package */ Task<Void> saveAsync(String sessionToken, Task<Void> toAwait) { return saveAsync(sessionToken, isLazy(), toAwait); }
tasks = new ArrayList<>(); for (final ParseUser user : users) { tasks.add(user.saveAsync(sessionToken));
private Task<Void> linkWithAsync( final String authType, final Map<String, String> authData, final Task<Void> toAwait, final String sessionToken) { synchronized (mutex) { final boolean isLazy = isLazy(); final Map<String, String> oldAnonymousData = getAuthData(ParseAnonymousUtils.AUTH_TYPE); stripAnonymity(); putAuthData(authType, authData); return saveAsync(sessionToken, isLazy, toAwait).continueWithTask(new Continuation<Void, Task<Void>>() { @Override public Task<Void> then(Task<Void> task) { synchronized (mutex) { if (task.isFaulted() || task.isCancelled()) { removeAuthData(authType); restoreAnonymity(oldAnonymousData); return task; } return synchronizeAuthDataAsync(authType); } } }); } }
@Test public void testUnlinkFromAsyncWithAuthType() throws Exception { // Register a mock currentUserController to make getAsync work ParseUser mockUser = mock(ParseUser.class); when(mockUser.getSessionToken()).thenReturn("sessionToken"); ParseCurrentUserController currentUserController = mock(ParseCurrentUserController.class); when(currentUserController.getAsync()).thenReturn(Task.forResult(mockUser)); ParseCorePlugins.getInstance().registerCurrentUserController(currentUserController); // Set user initial state String authType = "facebook"; Map<String, String> authData = new HashMap<>(); authData.put("facebookToken", "facebookTest"); ParseUser.State userState = new ParseUser.State.Builder() .objectId("test") .putAuthData(authType, authData) .build(); ParseUser user = ParseObject.from(userState); ParseUser partialMockUser = spy(user); doReturn(Task.<Void>forResult(null)) .when(partialMockUser) .saveAsync(anyString(), Matchers.<Task<Void>>any()); ParseTaskUtils.wait(partialMockUser.unlinkFromInBackground(authType)); // Verify we delete authData assertNull(user.getAuthData().get("facebook")); // Verify we save the user verify(partialMockUser, times(1)).saveAsync(eq("sessionToken"), Matchers.<Task<Void>>any()); }
@Test public void testSignUpAsyncWithObjectIdSetAndAuthDataSet() throws Exception { // Register a mock currentUserController to make getCurrentUser work ParseUser currentUser = mock(ParseUser.class); when(currentUser.getSessionToken()).thenReturn("sessionToken"); ParseCurrentUserController currentUserController = mock(ParseCurrentUserController.class); when(currentUserController.getAsync(anyBoolean())).thenReturn(Task.forResult(currentUser)); ParseCorePlugins.getInstance().registerCurrentUserController(currentUserController); ParseUser.State userState = new ParseUser.State.Builder() .objectId("test") .putAuthData(ParseAnonymousUtils.AUTH_TYPE, null) .build(); ParseUser user = ParseObject.from(userState); user.setUsername("userName"); user.setPassword("password"); //TODO (mengyan): Avoid using partial mock after we have ParseObjectInstanceController ParseUser partialMockUser = spy(user); doReturn(Task.<Void>forResult(null)) .when(partialMockUser) .saveAsync(anyString(), Matchers.<Task<Void>>any()); ParseTaskUtils.wait(partialMockUser.signUpAsync(Task.<Void>forResult(null))); // Verify user is saved verify(partialMockUser, times(1)).saveAsync(eq("sessionToken"), Matchers.<Task<Void>>any()); }
when(currentUser.getSessionToken()).thenReturn("oldSessionToken"); when(currentUser.getAuthData()).thenReturn(new HashMap<String, Map<String, String>>()); when(currentUser.saveAsync(anyString(), eq(false), Matchers.<Task<Void>>any())) .thenReturn(Task.<Void>forResult(null)); ParseUser.State state = new ParseUser.State.Builder() .saveAsync(eq("oldSessionToken"), eq(false), Matchers.<Task<Void>>any());
doReturn(Task.<Void>forError(saveException)) .when(partialMockCurrentUser) .saveAsync(anyString(), eq(false), Matchers.<Task<Void>>any()); ParseCurrentUserController currentUserController = mock(ParseCurrentUserController.class); when(currentUserController.getAsync(anyBoolean())) .saveAsync(eq("oldSessionToken"), eq(false), Matchers.<Task<Void>>any());
if (authData.containsKey(ParseAnonymousUtils.AUTH_TYPE) && authData.get(ParseAnonymousUtils.AUTH_TYPE) == null) { return saveAsync(sessionToken, toAwait); revert(); return user.saveAsync(sessionToken, isLazy, toAwait).continueWithTask(new Continuation<Void, Task<Void>>() { @Override public Task<Void> then(Task<Void> task) {
@Test public void testSaveAsyncWithLazyAndNotCurrentUser() throws Exception { // Register a mock currentUserController to make setCurrentUser work ParseCurrentUserController currentUserController = mock(ParseCurrentUserController.class); when(currentUserController.setAsync(any(ParseUser.class))) .thenReturn(Task.<Void>forResult(null)); ParseCorePlugins.getInstance().registerCurrentUserController(currentUserController); // Set facebook authData to null to verify cleanAuthData() ParseUser.State userState = new ParseUser.State.Builder() .putAuthData("facebook", null) .build(); ParseUser user = ParseObject.from(userState); setLazy(user); user.setIsCurrentUser(false); ParseUser partialMockUser = spy(user); doReturn(Task.<Void>forResult(null)) .when(partialMockUser) .resolveLazinessAsync(Matchers.<Task<Void>>any()); ParseTaskUtils.wait(partialMockUser.saveAsync("sessionToken", Task.<Void>forResult(null))); // Make sure we do not clean authData assertTrue(partialMockUser.getAuthData().containsKey("facebook")); // Make sure we do not save new currentUser verify(currentUserController, never()).setAsync(partialMockUser); }
@Test public void testSaveAsyncWithLazyAndCurrentUser() throws Exception { // Register a mock currentUserController to make setCurrentUser work ParseCurrentUserController currentUserController = mock(ParseCurrentUserController.class); when(currentUserController.setAsync(any(ParseUser.class))) .thenReturn(Task.<Void>forResult(null)); ParseCorePlugins.getInstance().registerCurrentUserController(currentUserController); // Set facebook authData to null to verify cleanAuthData() ParseUser.State userState = new ParseUser.State.Builder() .putAuthData("facebook", null) .build(); ParseUser user = ParseObject.from(userState); setLazy(user); user.setIsCurrentUser(true); ParseUser partialMockUser = spy(user); doReturn(Task.<Void>forResult(null)) .when(partialMockUser) .resolveLazinessAsync(Matchers.<Task<Void>>any()); ParseTaskUtils.wait(partialMockUser.saveAsync("sessionToken", Task.<Void>forResult(null))); // Make sure we clean authData assertFalse(partialMockUser.getAuthData().containsKey("facebook")); // Make sure we save new currentUser verify(currentUserController, times(1)).setAsync(partialMockUser); }
public Task<Void> then(Task<String> task) { final String sessionToken = task.getResult(); return saveAsync(sessionToken);