/*
* 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 android.os.Parcel;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.annotation.Config;
import java.util.Arrays;
import java.util.Date;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
@RunWith(RobolectricTestRunner.class)
@Config(constants = BuildConfig.class, sdk = TestHelper.ROBOLECTRIC_SDK_VERSION)
public class ParseObjectStateTest {
@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 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());
}
@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()));
}
@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()));
}
@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());
}
@Test
public void testServerData() {
ParseObject.State.Builder builder = new ParseObject.State.Builder("TestObject");
ParseObject.State state = builder.build();
assertTrue(state.keySet().isEmpty());
builder.put("foo", "bar")
.put("baz", "qux");
state = builder.build();
assertEquals(2, state.keySet().size());
assertEquals("bar", state.get("foo"));
assertEquals("qux", state.get("baz"));
builder.remove("foo");
state = builder.build();
assertEquals(1, state.keySet().size());
assertNull(state.get("foo"));
assertEquals("qux", state.get("baz"));
builder.clear();
state = builder.build();
assertTrue(state.keySet().isEmpty());
assertNull(state.get("foo"));
assertNull(state.get("baz"));
}
@Test
public void testToString() {
String string = new ParseObject.State.Builder("TestObject").build().toString();
assertTrue(string.contains("com.parse.ParseObject$State"));
assertTrue(string.contains("className"));
assertTrue(string.contains("objectId"));
assertTrue(string.contains("createdAt"));
assertTrue(string.contains("updatedAt"));
assertTrue(string.contains("isComplete"));
assertTrue(string.contains("serverData"));
assertTrue(string.contains("availableKeys"));
}
}