/** * This reports time as the server sees it, so that if you create a {@code ParseObject}, then wait a * while, and then call {@link #save()}, the creation time will be the time of the first * {@link #save()} call rather than the time the object was created locally. * * @return The first time this object was saved on the server. */ public Date getCreatedAt() { long createdAt = getState().createdAt(); return createdAt > 0 ? new Date(createdAt) : null; }
Init(State state) { className = state.className(); objectId = state.objectId(); createdAt = state.createdAt(); updatedAt = state.updatedAt(); availableKeys = Collections.synchronizedSet(state.availableKeys()); for (String key : state.keySet()) { serverData.put(key, state.get(key)); availableKeys.add(key); } isComplete = state.isComplete(); }
assertEquals(createAtLong, newState.createdAt()); assertEquals(updateAtLong, newState.updatedAt()); assertEquals("testObjectId", newState.objectId());
assertEquals(date.getTime(), state.createdAt()); assertEquals(((ParseObject) state.get("child")).getObjectId(), childObject.getObjectId());
@Test public void testParcelable() { long updatedAt = System.currentTimeMillis(); long createdAt = updatedAt + 10; ParseObject.State state = new ParseObject.State.Builder("TestObject") .objectId("fake") .createdAt(new Date(createdAt)) .updatedAt(new Date(updatedAt)) .isComplete(true) .put("foo", "bar") .put("baz", "qux") .availableKeys(Arrays.asList("safe", "keys")) .build(); Parcel parcel = Parcel.obtain(); state.writeToParcel(parcel, ParseParcelEncoder.get()); parcel.setDataPosition(0); ParseObject.State copy = ParseObject.State.createFromParcel(parcel, ParseParcelDecoder.get()); assertEquals(state.className(), copy.className()); assertEquals(state.objectId(), copy.objectId()); assertEquals(state.createdAt(), copy.createdAt()); assertEquals(state.updatedAt(), copy.updatedAt()); assertEquals(state.isComplete(), copy.isComplete()); assertEquals(state.keySet().size(), copy.keySet().size()); assertEquals(state.get("foo"), copy.get("foo")); assertEquals(state.get("baz"), copy.get("baz")); assertEquals(state.availableKeys().size(), copy.availableKeys().size()); assertTrue(state.availableKeys().containsAll(copy.availableKeys())); assertTrue(copy.availableKeys().containsAll(state.availableKeys())); }
long dateLong = ParseDateFormat.getInstance().parse(objectJSON.getString("createdAt")).getTime(); assertEquals(dateLong, object.getState().createdAt()); dateLong = ParseDateFormat.getInstance().parse(objectJSON.getString("updatedAt")).getTime(); assertEquals(dateLong, object.getState().updatedAt()); dateLong = ParseDateFormat.getInstance().parse(objectAgainJSON.getString("createdAt")).getTime(); assertEquals(dateLong, objectAgain.getState().createdAt()); dateLong = ParseDateFormat.getInstance().parse(objectAgainJSON.getString("updatedAt")).getTime();
@Test public void testDecodeSuccessWithOldFormatJson() throws Exception { Date createAt = new Date(1000); Date updateAt = new Date(2000); String createAtStr = ParseImpreciseDateFormat.getInstance().format(createAt); String updateAtStr = ParseImpreciseDateFormat.getInstance().format(updateAt); JSONObject pointerJson = new JSONObject(); JSONArray innerObjectJson = new JSONArray() .put(0, "innerObject") .put(1, "innerObjectId"); pointerJson.put("inner", innerObjectJson); JSONObject oldObjectJson = new JSONObject() .put(KEY_OLD_OBJECT_ID, "objectId") .put(KEY_OLD_CREATED_AT, createAtStr) .put(KEY_OLD_UPDATED_AT, updateAtStr) .put(KEY_OLD_POINTERS, pointerJson); ParseObjectCurrentCoder coder = ParseObjectCurrentCoder.get(); ParseObject.State.Builder builder = coder.decode(new ParseObject.State.Builder("Test"), oldObjectJson, ParseDecoder.get()); // We use the builder to build a state to verify the content in the builder ParseObject.State state = builder.build(); assertEquals(createAt.getTime(), state.createdAt()); assertEquals(updateAt.getTime(), state.updatedAt()); assertEquals("objectId", state.objectId()); ParseObject innerObject = (ParseObject) state.get("inner"); assertEquals("innerObject", innerObject.getClassName()); assertEquals("innerObjectId", innerObject.getObjectId()); }
@Test public void testSaveAsync() throws Exception { // Make mock response and client JSONObject mockResponse = new JSONObject(); String createAtStr = "2015-08-09T22:15:13.460Z"; long createAtLong = ParseDateFormat.getInstance().parse(createAtStr).getTime(); String updateAtStr = "2015-08-09T22:15:13.497Z"; long updateAtLong = ParseDateFormat.getInstance().parse(updateAtStr).getTime(); mockResponse.put("createdAt", createAtStr); mockResponse.put("objectId", "testObjectId"); mockResponse.put("updatedAt", updateAtStr); ParseHttpClient restClient = ParseTestUtils.mockParseHttpClientWithResponse(mockResponse, 200, "OK"); // Make test state ParseObject object = new ParseObject("Test"); object.put("key", "value"); NetworkObjectController controller = new NetworkObjectController(restClient); ParseObject.State newState = ParseTaskUtils.wait(controller.saveAsync( object.getState(), object.startSave(), "sessionToken", ParseDecoder.get())); assertEquals(createAtLong, newState.createdAt()); assertEquals(updateAtLong, newState.updatedAt()); assertEquals("testObjectId", newState.objectId()); assertFalse(newState.isComplete()); }
@Test public void testFetchAsync() throws Exception { // Make mock response and client JSONObject mockResponse = new JSONObject(); String createAtStr = "2015-08-09T22:15:13.460Z"; long createAtLong = ParseDateFormat.getInstance().parse(createAtStr).getTime(); String updateAtStr = "2015-08-09T22:15:13.497Z"; long updateAtLong = ParseDateFormat.getInstance().parse(updateAtStr).getTime(); mockResponse.put("createdAt", createAtStr); mockResponse.put("objectId", "testObjectId"); mockResponse.put("key", "value"); mockResponse.put("updatedAt", updateAtStr); ParseHttpClient restClient = ParseTestUtils.mockParseHttpClientWithResponse(mockResponse, 200, "OK"); // Make test state ParseObject.State state = new ParseObject.State.Builder("Test") .objectId("testObjectId") .build(); NetworkObjectController controller = new NetworkObjectController(restClient); ParseObject.State newState = ParseTaskUtils.wait(controller.fetchAsync(state, "sessionToken", ParseDecoder.get())); assertEquals(createAtLong, newState.createdAt()); assertEquals(updateAtLong, newState.updatedAt()); assertEquals("value", newState.get("key")); assertEquals("testObjectId", newState.objectId()); assertTrue(newState.isComplete()); }
@Test public void testCopy() { long updatedAt = System.currentTimeMillis(); long createdAt = updatedAt + 10; ParseObject.State state = new ParseObject.State.Builder("TestObject") .objectId("fake") .createdAt(new Date(createdAt)) .updatedAt(new Date(updatedAt)) .isComplete(true) .put("foo", "bar") .put("baz", "qux") .availableKeys(Arrays.asList("safe", "keys")) .build(); ParseObject.State copy = new ParseObject.State.Builder(state).build(); assertEquals(state.className(), copy.className()); assertEquals(state.objectId(), copy.objectId()); assertEquals(state.createdAt(), copy.createdAt()); assertEquals(state.updatedAt(), copy.updatedAt()); assertEquals(state.isComplete(), copy.isComplete()); assertEquals(state.keySet().size(), copy.keySet().size()); assertEquals(state.get("foo"), copy.get("foo")); assertEquals(state.get("baz"), copy.get("baz")); assertEquals(state.availableKeys().size(), copy.availableKeys().size()); assertTrue(state.availableKeys().containsAll(copy.availableKeys())); assertTrue(copy.availableKeys().containsAll(state.availableKeys())); }
/** * Applies a {@code State} on top of this {@code Builder} instance. * * @param other The {@code State} to apply over this instance. * @return A new {@code Builder} instance. */ public T apply(State other) { if (other.objectId() != null) { objectId(other.objectId()); } if (other.createdAt() > 0) { createdAt(other.createdAt()); } if (other.updatedAt() > 0) { updatedAt(other.updatedAt()); } isComplete(isComplete || other.isComplete()); for (String key : other.keySet()) { put(key, other.get(key)); } availableKeys(other.availableKeys()); return self(); }
@Test public void testDecodeSuccessWithoutOldFormatJson() throws Exception { Date createAt = new Date(1000); Date updateAt = new Date(2000); String createAtStr = ParseDateFormat.getInstance().format(createAt); String updateAtStr = ParseDateFormat.getInstance().format(updateAt); JSONObject dataJson = new JSONObject() .put(KEY_OBJECT_ID, "objectId") .put(KEY_CREATED_AT, createAtStr) .put(KEY_UPDATED_AT, updateAtStr) .put("key", "value"); JSONObject objectJson = new JSONObject(); objectJson.put(KEY_DATA, dataJson); ParseObjectCurrentCoder coder = ParseObjectCurrentCoder.get(); ParseObject.State.Builder builder = coder.decode(new ParseObject.State.Builder("Test"), objectJson, ParseDecoder.get()); // We use the builder to build a state to verify the content in the builder ParseObject.State state = builder.build(); assertEquals(createAt.getTime(), state.createdAt()); assertEquals(updateAt.getTime(), state.updatedAt()); assertEquals("objectId", state.objectId()); assertEquals("value", state.get("key")); }
@Test public void testProperties() { long updatedAt = System.currentTimeMillis(); long createdAt = updatedAt + 10; ParseObject.State state = new ParseObject.State.Builder("TestObject") .objectId("fake") .createdAt(new Date(createdAt)) .updatedAt(new Date(updatedAt)) .isComplete(true) .build(); assertEquals("TestObject", state.className()); assertEquals("fake", state.objectId()); assertEquals(createdAt, state.createdAt()); assertEquals(updatedAt, state.updatedAt()); assertTrue(state.isComplete()); }
private static void verifyBasicSessionState(JSONObject mockResponse, ParseSession.State state) throws JSONException { assertEquals("_Session", state.className()); long createAtLong = ParseDateFormat.getInstance().parse(mockResponse.getString("createdAt")).getTime(); assertEquals(createAtLong, state.createdAt()); assertEquals(mockResponse.getString("objectId"), state.objectId()); assertEquals(mockResponse.getString("sessionToken"), state.get("sessionToken")); assertEquals(mockResponse.getString("restricted"), state.get("restricted")); assertEquals( mockResponse.getJSONObject("createdWith").getString("action"), ((Map<String, String>) state.get("createdWith")).get("action")); }
@Test public void testDefaults() { ParseObject.State state = new ParseObject.State.Builder("TestObject").build(); assertEquals("TestObject", state.className()); assertNull(state.objectId()); assertEquals(-1, state.createdAt()); assertEquals(-1, state.updatedAt()); assertFalse(state.isComplete()); assertTrue(state.keySet().isEmpty()); assertTrue(state.availableKeys().isEmpty()); }
@Test public void testAutomaticUpdatedAt() { long createdAt = System.currentTimeMillis(); ParseObject.State state = new ParseObject.State.Builder("TestObject") .createdAt(new Date(createdAt)) .build(); assertEquals(createdAt, state.createdAt()); assertEquals(createdAt, state.updatedAt()); }