package com.github.droidfu.cachefu;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import java.io.IOException;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
import android.os.Parcel;
import android.util.Log;
import com.github.droidfu.TestBase;
@RunWith(PowerMockRunner.class)
@PrepareForTest({ Log.class })
public class CachedModelTest extends TestBase {
class TestObject extends CachedModel {
private String testString;
public TestObject() {
super();
}
public TestObject(String id) {
super(id);
}
public String getTestString() {
return testString;
}
public void setTestString(String testString) {
this.testString = testString;
}
@Override
public boolean reloadFromCachedModel(ModelCache modelCache, CachedModel cachedModel) {
TestObject cachedTestObject = (TestObject) cachedModel;
testString = cachedTestObject.testString;
return false;
}
@Override
public void readFromParcel(Parcel source) throws IOException {
super.readFromParcel(source);
testString = source.readString();
}
@Override
public void writeToParcel(Parcel dest, int flags) {
super.writeToParcel(dest, flags);
dest.writeString(testString);
}
@Override
public String createKey(String id) {
return "test_object_" + id;
}
}
@Test
public void testSaveStoresInCache() {
ModelCache modelCache = new ModelCache(1, 1, 1);
String id = "123";
TestObject preObject = new TestObject(id);
preObject.setTestString("this is a test");
assertTrue(preObject.save(modelCache));
TestObject postObject = (TestObject) modelCache.get(preObject.getKey());
assertEquals("this is a test", postObject.getTestString());
}
@Test
public void testSaveFailsWithoutObjectCacheOrId() {
ModelCache modelCache = new ModelCache(1, 1, 1);
String id = "123";
TestObject testObject = new TestObject();
assertFalse(testObject.save(modelCache));
testObject.setId(id);
assertFalse(testObject.save(null));
testObject.setId(null);
assertFalse(testObject.save(modelCache));
testObject.setId(id);
assertTrue(testObject.save(modelCache));
}
@Test
public void testReloadUpdatesObjectWithCachedData() {
ModelCache modelCache = new ModelCache(1, 1, 1);
String id = "123";
TestObject originalObject = new TestObject(id);
originalObject.setTestString("original text");
originalObject.save(modelCache);
TestObject overridingObject = new TestObject(id);
overridingObject.setTestString("this is new text");
overridingObject.save(modelCache);
originalObject.reload(modelCache);
assertEquals("this is new text", originalObject.getTestString());
}
}