package de.swm.gwt.client.mobile.keystore.impl;
import de.swm.gwt.client.mobile.keystore.IStorageOperationCompleted;
import de.swm.gwt.client.mobile.keystore.IStorage;
import de.swm.gwt.client.mobile.keystore.ITransaction;
import de.swm.gwt.client.testhelper.SwmTestStorage;
import org.junit.Before;
import org.junit.Test;
import static junit.framework.Assert.assertEquals;
import static junit.framework.Assert.assertTrue;
/**
* Unit Test
*
* @author wiese.daniel
* <br>
* copyright (C) 2012, Stadtwerke München GmbH
*/
public class TransactionalStorageTest {
private IStorage toTest;
private boolean commitCompletedWasCalled;
@Before
public void setUp() {
toTest = new TransactionalStorage(new SwmTestStorage());
commitCompletedWasCalled = false;
//toTest.beginTransaction().commit();
}
@Test
public void testClear_withRollback() throws Exception {
toTest.setItem("Key1", "Value1");
toTest.setItem("Key2", "Value2");
toTest.setItem("Key3", "Value3");
assertEquals(3, toTest.getLength());
final ITransaction phaseCommit = toTest.beginTransaction();
toTest.clear();
assertEquals(0, toTest.getLength());
assertTrue(toTest.getItem("Key1") == null);
assertTrue(toTest.getItem("Key2") == null);
assertTrue(toTest.getItem("Key3") == null);
phaseCommit.rollback();
assertEquals(3, toTest.getLength());
assertEquals("Value1", toTest.getItem("Key1"));
assertEquals("Value2", toTest.getItem("Key2"));
assertEquals("Value3", toTest.getItem("Key3"));
}
@Test
public void testClear_withoutTx() throws Exception {
toTest.setItem("Key1", "Value1");
toTest.setItem("Key2", "Value2");
toTest.setItem("Key3", "Value3");
assertEquals(3, toTest.getLength());
toTest.clear();
assertTrue(toTest.getItem("Key1") == null);
assertTrue(toTest.getItem("Key2") == null);
assertTrue(toTest.getItem("Key3") == null);
assertEquals(0, toTest.getLength());
}
@Test
public void testClear_withInsert_andRollback() throws Exception {
toTest.setItem("Key1", "Value1");
toTest.setItem("Key2", "Value2");
toTest.setItem("Key3", "Value3");
assertEquals(3, toTest.getLength());
final ITransaction phaseCommit = toTest.beginTransaction();
toTest.clear();
toTest.setItem("Key4", "Value4");
toTest.setItem("Key3", "Value3-changed");
assertEquals(2, toTest.getLength());
assertTrue(toTest.getItem("Key1") == null);
assertTrue(toTest.getItem("Key2") == null);
assertEquals("Value3-changed", toTest.getItem("Key3"));
assertEquals("Value4", toTest.getItem("Key4"));
phaseCommit.rollback();
assertEquals(3, toTest.getLength());
assertEquals("Value1", toTest.getItem("Key1"));
assertEquals("Value2", toTest.getItem("Key2"));
assertEquals("Value3", toTest.getItem("Key3"));
}
@Test
public void testClear_withCommit() throws Exception {
toTest.setItem("Key1", "Value1");
toTest.setItem("Key2", "Value2");
toTest.setItem("Key3", "Value3");
assertEquals(3, toTest.getLength());
final ITransaction phaseCommit = toTest.beginTransaction();
toTest.clear();
assertEquals(0, toTest.getLength());
assertTrue(toTest.getItem("Key1") == null);
assertTrue(toTest.getItem("Key2") == null);
assertTrue(toTest.getItem("Key3") == null);
phaseCommit.commit(new IStorageOperationCompleted() {
@Override
public void isCompleted() {
assertEquals(0, toTest.getLength());
assertTrue(toTest.getItem("Key1") == null);
assertTrue(toTest.getItem("Key2") == null);
assertTrue(toTest.getItem("Key3") == null);
commitCompletedWasCalled = true;
}
});
assertTrue("Commit completed was not called", commitCompletedWasCalled);
}
@Test
public void testClear_withInsert_withCommit() throws Exception {
toTest.setItem("Key1", "Value1");
toTest.setItem("Key2", "Value2");
toTest.setItem("Key3", "Value3");
assertEquals(3, toTest.getLength());
final ITransaction phaseCommit = toTest.beginTransaction();
toTest.clear();
toTest.setItem("Key4", "Value4");
toTest.setItem("Key3", "Value3-changed");
assertEquals(2, toTest.getLength());
assertTrue(toTest.getItem("Key1") == null);
assertTrue(toTest.getItem("Key2") == null);
assertEquals("Value3-changed", toTest.getItem("Key3"));
assertEquals("Value4", toTest.getItem("Key4"));
phaseCommit.commit(new IStorageOperationCompleted() {
@Override
public void isCompleted() {
assertEquals(2, toTest.getLength());
assertTrue(toTest.getItem("Key1") == null);
assertTrue(toTest.getItem("Key2") == null);
assertEquals("Value3-changed", toTest.getItem("Key3"));
assertEquals("Value4", toTest.getItem("Key4"));
commitCompletedWasCalled = true;
}
});
assertTrue("Commit completed was not called", commitCompletedWasCalled);
}
@Test
public void testGetItem_withCommitAndRollback() throws Exception {
toTest.setItem("Key1", "Value1");
toTest.setItem("Key2", "Value2");
toTest.setItem("Key3", "Value3");
assertEquals(3, toTest.getLength());
final ITransaction phaseCommit = toTest.beginTransaction();
assertEquals("Value1", toTest.getItem("Key1"));
assertEquals("Value2", toTest.getItem("Key2"));
assertEquals("Value3", toTest.getItem("Key3"));
phaseCommit.commit(new IStorageOperationCompleted() {
@Override
public void isCompleted() {
assertEquals("Value1", toTest.getItem("Key1"));
assertEquals("Value2", toTest.getItem("Key2"));
assertEquals("Value3", toTest.getItem("Key3"));
final ITransaction phaseCommit2 = toTest.beginTransaction();
phaseCommit2.rollback();
assertEquals("Value1", toTest.getItem("Key1"));
assertEquals("Value2", toTest.getItem("Key2"));
assertEquals("Value3", toTest.getItem("Key3"));
commitCompletedWasCalled = true;
}
});
assertTrue("Commit completed was not called", commitCompletedWasCalled);
}
@Test
public void testRemoveItem_withCommit() throws Exception {
toTest.setItem("Key1", "Value1");
toTest.setItem("Key2", "Value2");
toTest.setItem("Key3", "Value3");
assertEquals(3, toTest.getLength());
final ITransaction phaseCommit = toTest.beginTransaction();
toTest.removeItem("Key1");
assertEquals(null, toTest.getItem("Key1"));
assertEquals("Value2", toTest.getItem("Key2"));
assertEquals("Value3", toTest.getItem("Key3"));
phaseCommit.commit(new IStorageOperationCompleted() {
@Override
public void isCompleted() {
assertEquals(null, toTest.getItem("Key1"));
assertEquals("Value2", toTest.getItem("Key2"));
assertEquals("Value3", toTest.getItem("Key3"));
commitCompletedWasCalled = true;
}
});
//assertTrue("Commit completed was not called", commitCompletedWasCalled);
}
@Test
public void testRemoveItem_withRollback() throws Exception {
toTest.setItem("Key1", "Value1");
toTest.setItem("Key2", "Value2");
toTest.setItem("Key3", "Value3");
assertEquals(3, toTest.getLength());
final ITransaction phaseCommit = toTest.beginTransaction();
toTest.removeItem("Key1");
assertEquals(null, toTest.getItem("Key1"));
assertEquals("Value2", toTest.getItem("Key2"));
assertEquals("Value3", toTest.getItem("Key3"));
phaseCommit.rollback();
assertEquals("Value1", toTest.getItem("Key1"));
assertEquals("Value2", toTest.getItem("Key2"));
assertEquals("Value3", toTest.getItem("Key3"));
}
@Test
public void testSetItem_withCommit() throws Exception {
toTest.setItem("Key1", "Value1");
toTest.setItem("Key2", "Value2");
toTest.setItem("Key3", "Value3");
assertEquals(3, toTest.getLength());
final ITransaction phaseCommit = toTest.beginTransaction();
toTest.setItem("Key1", "Value1-changed");
toTest.setItem("Key5", "Value5");
toTest.setItem("Key6", "Value6");
assertEquals("Value1-changed", toTest.getItem("Key1"));
assertEquals("Value2", toTest.getItem("Key2"));
assertEquals("Value3", toTest.getItem("Key3"));
assertEquals("Value5", toTest.getItem("Key5"));
assertEquals("Value6", toTest.getItem("Key6"));
assertEquals(5, toTest.getLength());
phaseCommit.commit(new IStorageOperationCompleted() {
@Override
public void isCompleted() {
assertEquals(5, toTest.getLength());
assertEquals("Value1-changed", toTest.getItem("Key1"));
assertEquals("Value2", toTest.getItem("Key2"));
assertEquals("Value3", toTest.getItem("Key3"));
assertEquals("Value5", toTest.getItem("Key5"));
assertEquals("Value6", toTest.getItem("Key6"));
commitCompletedWasCalled = true;
}
});
assertTrue("Commit completed was not called", commitCompletedWasCalled);
}
@Test
public void testSetItem_withRollback() throws Exception {
toTest.setItem("Key1", "Value1");
toTest.setItem("Key2", "Value2");
toTest.setItem("Key3", "Value3");
assertEquals(3, toTest.getLength());
final ITransaction phaseCommit = toTest.beginTransaction();
toTest.setItem("Key1", "Value1-changed");
toTest.setItem("Key5", "Value5");
toTest.setItem("Key6", "Value6");
assertEquals("Value1-changed", toTest.getItem("Key1"));
assertEquals("Value2", toTest.getItem("Key2"));
assertEquals("Value3", toTest.getItem("Key3"));
assertEquals("Value5", toTest.getItem("Key5"));
assertEquals("Value6", toTest.getItem("Key6"));
assertEquals(5, toTest.getLength());
phaseCommit.rollback();
assertEquals(3, toTest.getLength());
assertEquals("Value1", toTest.getItem("Key1"));
assertEquals("Value2", toTest.getItem("Key2"));
assertEquals("Value3", toTest.getItem("Key3"));
assertEquals(null, toTest.getItem("Key5"));
assertEquals(null, toTest.getItem("Key6"));
}
}