/* * Copyright (c) 2015-present, Parse, LLC. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. */ package com.parse; import org.json.JSONObject; import org.junit.Test; import java.util.HashMap; import java.util.Map; import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNull; public class ParseUserCurrentCoderTest { private static final String KEY_AUTH_DATA = "auth_data"; private static final String KEY_SESSION_TOKEN = "session_token"; @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")); } @Test public void testEncodeSuccessWithEmptyState() throws Exception { ParseUser.State state = new ParseUser.State.Builder() .build(); ParseUserCurrentCoder coder = ParseUserCurrentCoder.get(); JSONObject objectJson = coder.encode(state, null, PointerEncoder.get()); assertFalse(objectJson.has(KEY_SESSION_TOKEN)); assertFalse(objectJson.has(KEY_AUTH_DATA)); } @Test public void testDecodeSuccessWithSessionTokenAndAuthData() throws Exception { JSONObject facebookAuthDataJson = new JSONObject() .put("id", "facebookId") .put("access_token", "facebookAccessToken"); JSONObject twitterAuthDataJson = new JSONObject() .put("id", "twitterId") .put("access_token", "twitterAccessToken"); JSONObject authDataJson = new JSONObject() .put("facebook", facebookAuthDataJson) .put("twitter", twitterAuthDataJson); JSONObject objectJson = new JSONObject() .put(KEY_SESSION_TOKEN, "sessionToken") .put(KEY_AUTH_DATA, authDataJson); ParseUserCurrentCoder coder = ParseUserCurrentCoder.get(); ParseUser.State.Builder builder = coder.decode(new ParseUser.State.Builder(), objectJson, ParseDecoder.get()); // We use the builder to build a state to verify the content in the builder ParseUser.State state = builder.build(); assertEquals("sessionToken", state.sessionToken()); Map<String, Map<String, String>> authData = state.authData(); Map<String, String> facebookAuthData = authData.get("facebook"); assertEquals("facebookId", facebookAuthData.get("id")); assertEquals("facebookAccessToken", facebookAuthData.get("access_token")); Map<String, String> twitterAuthData = authData.get("twitter"); assertEquals("twitterId", twitterAuthData.get("id")); assertEquals("twitterAccessToken", twitterAuthData.get("access_token")); // Make sure objectJson does not have sessionToken and authData anymore assertFalse(objectJson.has(KEY_SESSION_TOKEN)); assertFalse(objectJson.has(KEY_AUTH_DATA)); } @Test public void testDecodeSuccessWithoutSessionTokenAndAuthData() throws Exception { JSONObject objectJson = new JSONObject(); ParseUserCurrentCoder coder = ParseUserCurrentCoder.get(); ParseUser.State.Builder builder = coder.decode(new ParseUser.State.Builder(), objectJson, ParseDecoder.get()); // We use the builder to build a state to verify the content in the builder ParseUser.State state = builder.build(); assertNull(state.sessionToken()); // We always return non-null for authData() assertEquals(0, state.authData().size()); } }