userBuilder.sessionToken(newSessionToken);
/* package */ Task<Void> logOutAsync(boolean revoke) { ParseAuthenticationManager controller = getAuthenticationManager(); List<Task<Void>> tasks = new ArrayList<>(); final String oldSessionToken; synchronized (mutex) { oldSessionToken = getState().sessionToken(); for (Map.Entry<String, Map<String, String>> entry : getAuthData().entrySet()) { tasks.add(controller.deauthenticateAsync(entry.getKey())); } State newState = getState().newBuilder() .sessionToken(null) .isNew(false) .build(); isCurrentUser = false; setState(newState); } if (revoke) { tasks.add(ParseSession.revokeAsync(oldSessionToken)); } return Task.whenAll(tasks); }
@Test public void testEncodeSuccess() throws Exception { Map<String, String> facebookAuthData = new HashMap<>(); facebookAuthData.put("id", "facebookId"); facebookAuthData.put("access_token", "facebookAccessToken"); Map<String, String> twitterAuthData = new HashMap<>(); twitterAuthData.put("id", "twitterId"); twitterAuthData.put("access_token", "twitterAccessToken"); ParseUser.State state = new ParseUser.State.Builder() .sessionToken("sessionToken") .putAuthData("facebook", facebookAuthData) .putAuthData("twitter", twitterAuthData) .build(); ParseUserCurrentCoder coder = ParseUserCurrentCoder.get(); JSONObject objectJson = coder.encode(state, null, PointerEncoder.get()); assertEquals("sessionToken", objectJson.getString(KEY_SESSION_TOKEN)); JSONObject authDataJson = objectJson.getJSONObject(KEY_AUTH_DATA); JSONObject facebookAuthDataJson = authDataJson.getJSONObject("facebook"); assertEquals("facebookId", facebookAuthDataJson.getString("id")); assertEquals("facebookAccessToken", facebookAuthDataJson.getString("access_token")); JSONObject twitterAuthDataJson = authDataJson.getJSONObject("twitter"); assertEquals("twitterId", twitterAuthDataJson.getString("id")); assertEquals("twitterAccessToken", twitterAuthDataJson.getString("access_token")); }
ParseUser.State newUserState = new ParseUser.State.Builder() .put("newKey", "newValue") .sessionToken("newSessionToken") .isNew(false) .build();
ParseUser.State newUserState = new ParseUser.State.Builder() .put("newKey", "newValue") .sessionToken("newSessionToken") .build(); when(userController.logInAsync(anyString(), Matchers.<Map<String, String>>any()))
ParseUser.State newUserState = new ParseUser.State.Builder() .put("newKey", "newValue") .sessionToken("newSessionToken") .isNew(false) .build();
ParseUser.State newUserState = new ParseUser.State.Builder() .put("newKey", "newValue") .sessionToken("newSessionToken") .build(); when(userController.logInAsync(anyString(), anyString()))
@Test public void testDontOverwriteSessionTokenForCurrentUser() { ParseUser.State sessionTokenState = new ParseUser.State.Builder() .sessionToken("sessionToken") .put("key0", "value0") .put("key1", "value1")
.objectId("objectId") .put("newKey", "newValue") .sessionToken("newSessionToken") .isNew(true) .build();
@Test public void testLoginWithAsyncWithNoCurrentUser() throws Exception { // Register a mock userController to make logIn work ParseUserController userController = mock(ParseUserController.class); ParseUser.State newUserState = new ParseUser.State.Builder() .put("newKey", "newValue") .sessionToken("newSessionToken") .build(); when(userController.logInAsync(anyString(), Matchers.<Map<String, String>>any())) .thenReturn(Task.forResult(newUserState)); ParseCorePlugins.getInstance().registerUserController(userController); // Register a mock currentUserController to make getCurrentUser work ParseCurrentUserController currentUserController = mock(ParseCurrentUserController.class); when(currentUserController.getAsync(false)).thenReturn(Task.<ParseUser>forResult(null)); when(currentUserController.setAsync(any(ParseUser.class))) .thenReturn(Task.<Void>forResult(null)); ParseCorePlugins.getInstance().registerCurrentUserController(currentUserController); String authType = "facebook"; Map<String, String> authData = new HashMap<>(); authData.put("token", "123"); ParseUser userAfterLogin = ParseTaskUtils.wait(ParseUser.logInWithInBackground(authType, authData)); // Make sure we login authData verify(userController, times(1)).logInAsync("facebook", authData); // Make sure we save the new created user as currentUser verify(currentUserController, times(1)).setAsync(any(ParseUser.class)); // Make sure the new created user has correct data assertEquals("newValue", userAfterLogin.get("newKey")); assertEquals("newSessionToken", userAfterLogin.getSessionToken()); }
ParseUser.State newUserState = new ParseUser.State.Builder() .put("key", "value") .sessionToken("sessionToken") .build(); when(userController.getUserAsync(anyString()))
ParseUser.State newUserState = new ParseUser.State.Builder() .put("newKey", "newValue") .sessionToken("newSessionToken") .build(); when(userController.signUpAsync(
@Test public void testBecome() 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); // Register a mock userController to make getUsreAsync work ParseUserController userController = mock(ParseUserController.class); ParseUser.State newUserState = new ParseUser.State.Builder() .put("key", "value") .sessionToken("sessionToken") .build(); when(userController.getUserAsync(anyString())) .thenReturn(Task.forResult(newUserState)); ParseCorePlugins.getInstance().registerUserController(userController); ParseUser user = ParseUser.become("sessionToken"); // Make sure we call getUserAsync verify(userController, times(1)).getUserAsync("sessionToken"); // Make sure we set currentUser verify(currentUserController, times(1)).setAsync(user); // Make sure user's data is correct assertEquals("sessionToken", user.getSessionToken()); assertEquals("value", user.get("key")); }
@Test public void testUpgradeToRevocableSessionAsync() throws Exception { // Register a mock currentUserController to verify setAsync ParseCurrentUserController currentUserController = mock(ParseCurrentUserController.class); ParseCorePlugins.getInstance().registerCurrentUserController(currentUserController); // Register a mock sessionController to verify revokeAsync() NetworkSessionController sessionController = mock(NetworkSessionController.class); ParseSession.State state = new ParseSession.State.Builder("_Session") .put("sessionToken", "r:newSessionToken") .build(); when(sessionController.upgradeToRevocable(anyString())) .thenReturn(Task.forResult(state)); ParseCorePlugins.getInstance().registerSessionController(sessionController); // Set user initial state ParseUser.State userState = new ParseUser.State.Builder() .objectId("test") .sessionToken("oldSessionToken") .build(); ParseUser user = ParseObject.from(userState); ParseTaskUtils.wait(user.upgradeToRevocableSessionAsync()); // Make sure we update to new sessionToken assertEquals("r:newSessionToken", user.getSessionToken()); // Make sure we update currentUser verify(currentUserController, times(1)).setAsync(user); }
@Test public void testLogIn() 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); // Register a mock userController to make logIn work ParseUserController userController = mock(ParseUserController.class); ParseUser.State newUserState = new ParseUser.State.Builder() .put("newKey", "newValue") .sessionToken("newSessionToken") .build(); when(userController.logInAsync(anyString(), anyString())) .thenReturn(Task.forResult(newUserState)); ParseCorePlugins.getInstance().registerUserController(userController); ParseUser user = ParseUser.logIn("userName", "password"); // Make sure user is login verify(userController, times(1)).logInAsync("userName", "password"); // Make sure we set currentUser verify(currentUserController, times(1)).setAsync(user); // Make sure user's data is correct assertEquals("newSessionToken", user.getSessionToken()); assertEquals("newValue", user.get("newKey")); }
@Test public void testLogOutAsync() throws Exception { // Register a mock sessionController to verify revokeAsync() NetworkSessionController sessionController = mock(NetworkSessionController.class); when(sessionController.revokeAsync(anyString())).thenReturn(Task.<Void>forResult(null)); ParseCorePlugins.getInstance().registerSessionController(sessionController); ParseAuthenticationManager manager = mock(ParseAuthenticationManager.class); when(manager.deauthenticateAsync(anyString())).thenReturn(Task.<Void>forResult(null)); ParseCorePlugins.getInstance().registerAuthenticationManager(manager); // Set user initial state String facebookAuthType = "facebook"; Map<String, String> facebookAuthData = new HashMap<>(); facebookAuthData.put("facebookToken", "facebookTest"); ParseUser.State userState = new ParseUser.State.Builder() .objectId("test") .putAuthData(facebookAuthType, facebookAuthData) .sessionToken("r:oldSessionToken") .build(); ParseUser user = ParseObject.from(userState); ParseTaskUtils.wait(user.logOutAsync()); verify(manager).deauthenticateAsync("facebook"); // Verify we revoke session verify(sessionController, times(1)).revokeAsync("r:oldSessionToken"); }
@Test public void testEncodeDecodeWithNullValues() { ParseUser.State state = new ParseUser.State.Builder() .sessionToken(null) .authData(null) .build(); ParseUserCurrentCoder coder = ParseUserCurrentCoder.get(); JSONObject object = coder.encode(state, null, PointerEncoder.get()); ParseUser.State.Builder builder = coder.decode(new ParseUser.State.Builder(), object, ParseDecoder.get()); state = builder.build(); assertNull(state.sessionToken()); assertEquals(0, state.authData().size()); } }
private Task<Void> setSessionTokenInBackground(String newSessionToken) { synchronized (mutex) { State state = getState(); if (newSessionToken.equals(state.sessionToken())) { return Task.forResult(null); } State.Builder builder = state.newBuilder() .sessionToken(newSessionToken); setState(builder.build()); return saveCurrentUserAsync(this); } }