package com.octo.android.robospice.persistence.string;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.List;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.CharEncoding;
import android.app.Application;
import android.test.AndroidTestCase;
import android.test.suitebuilder.annotation.MediumTest;
import com.octo.android.robospice.persistence.DurationInMillis;
@MediumTest
public class InFileStringObjectPersisterTest extends AndroidTestCase {
private static final long FIVE_SECONDS = 5 * DurationInMillis.ONE_SECOND;
private static final String TEST_DATA = "foo";
private static final String TEST_CACHE_KEY = "TEST_CACHE_KEY";
private InFileStringObjectPersister inFileStringObjectPersister;
@Override
protected void setUp() throws Exception {
super.setUp();
Application application = (Application) getContext().getApplicationContext();
inFileStringObjectPersister = new InFileStringObjectPersister(application);
}
public void testSaveDataToCacheAndReturnData() throws Exception {
inFileStringObjectPersister.saveDataToCacheAndReturnData(TEST_DATA, TEST_CACHE_KEY);
File cachedFile = inFileStringObjectPersister.getCacheFile(TEST_CACHE_KEY);
assertTrue(cachedFile.exists());
@SuppressWarnings("unchecked")
List<String> actual = IOUtils.readLines(new FileInputStream(cachedFile), CharEncoding.UTF_8);
assertEquals(1, actual.size());
assertEquals(TEST_DATA, actual.get(0));
}
public void testLoadDataFromCache_no_expiracy() throws Exception {
File cachedFile = inFileStringObjectPersister.getCacheFile(TEST_CACHE_KEY);
FileOutputStream output = new FileOutputStream(cachedFile);
IOUtils.write(TEST_DATA, output, CharEncoding.UTF_8);
IOUtils.closeQuietly(output);
String actual = inFileStringObjectPersister.loadDataFromCache(TEST_CACHE_KEY, DurationInMillis.ALWAYS_RETURNED);
assertEquals(TEST_DATA, actual);
}
public void testLoadDataFromCache_not_expired() throws Exception {
File cachedFile = inFileStringObjectPersister.getCacheFile(TEST_CACHE_KEY);
FileOutputStream output = new FileOutputStream(cachedFile);
IOUtils.write(TEST_DATA, output, CharEncoding.UTF_8);
IOUtils.closeQuietly(output);
String actual = inFileStringObjectPersister.loadDataFromCache(TEST_CACHE_KEY, FIVE_SECONDS);
assertEquals(TEST_DATA, actual);
}
public void testLoadDataFromCache_expired() throws Exception {
File cachedFile = inFileStringObjectPersister.getCacheFile(TEST_CACHE_KEY);
FileOutputStream output = new FileOutputStream(cachedFile);
IOUtils.write(TEST_DATA, output, CharEncoding.UTF_8);
IOUtils.closeQuietly(output);
cachedFile.setLastModified(System.currentTimeMillis() - FIVE_SECONDS);
String actual = inFileStringObjectPersister.loadDataFromCache(TEST_CACHE_KEY, DurationInMillis.ONE_SECOND);
assertNull(actual);
}
@Override
protected void tearDown() throws Exception {
inFileStringObjectPersister.removeAllDataFromCache();
}
}