package de.swm.gwt.client.mobile.keystore.impl;
import de.swm.gwt.client.mobile.keystore.IStorage;
import de.swm.gwt.client.mobile.keystore.KeySet;
import de.swm.gwt.client.testhelper.SwmJsonWriterReader;
import de.swm.gwt.client.testhelper.SwmTestStorage;
import name.pehl.piriti.json.client.JsonReader;
import name.pehl.piriti.json.client.JsonWriter;
import org.junit.Before;
import org.junit.Test;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import static junit.framework.Assert.*;
/**
* Unit Test
*
* @author wiese.daniel
* <br>
* copyright (C) 2012, Stadtwerke München GmbH
*/
public class KeyStoreOperationsTest {
/**
* Json Reader for {@link TestDto}. @author wiese.daniel <br>
* copyright (C) 2012, SWM Services GmbH
*/
public interface TestDtoJsonReader extends JsonReader<TestDto> {
}
/**
* Json Writer for {@link TestDto}. @author wiese.daniel <br>
* copyright (C) 2012, SWM Services GmbH
*/
public interface TestDtoJsonWriter extends JsonWriter<TestDto> {
}
/**
* Json Reader for {@link KeySet}. @author wiese.daniel <br>
* copyright (C) 2012, SWM Services GmbH
*/
public interface KeySetJsonReader extends JsonReader<KeySet> {
}
/**
* JsonWriter for {@link KeySet}. @author wiese.daniel <br>
* copyright (C) 2012, SWM Services GmbH
*/
public interface KeySetJsonWriter extends JsonWriter<KeySet> {
}
private IStorage storage;
private KeySetJsonReader keySetJsonReader;
private KeySetJsonWriter keySetJsonWriter;
private TestDtoJsonWriter testDtoJsonWriter;
private TestDtoJsonReader testDtoJsonReader;
@Before
public void setUp() {
storage = new SwmTestStorage();
keySetJsonReader = SwmJsonWriterReader.createReader(KeySetJsonReader.class);
keySetJsonWriter = SwmJsonWriterReader.createWriter(KeySetJsonWriter.class);
testDtoJsonWriter = SwmJsonWriterReader.createWriter(TestDtoJsonWriter.class);
testDtoJsonReader = SwmJsonWriterReader.createReader(TestDtoJsonReader.class);
}
@Test
public void testGetDTOList_usingKeyset() throws Exception {
KeyStoreOperations ops = new KeyStoreOperations(storage, keySetJsonReader, keySetJsonWriter);
List<TestDto> list = new ArrayList<TestDto>();
list.add(new TestDto(1, "Test1"));
list.add(new TestDto(2, "Test2"));
list.add(new TestDto(3, "Test3"));
KeySet keySet = new KeySet(TestDto.class, "user", "UC_LIST");
ops.createList(list, keySet, testDtoJsonWriter);
final List<TestDto> dtoListFromStore = ops.getDTOList(keySet, testDtoJsonReader);
assertEquals(3, dtoListFromStore.size());
assertTrue(dtoListFromStore.contains(new TestDto(1, "Test1")));
assertTrue(dtoListFromStore.contains(new TestDto(2, "Test2")));
assertTrue(dtoListFromStore.contains(new TestDto(3, "Test3")));
}
@Test
public void testGetDTOList_withoutKeyset() throws Exception {
KeyStoreOperations ops = new KeyStoreOperations(storage, keySetJsonReader, keySetJsonWriter);
List<TestDto> list = new ArrayList<TestDto>();
list.add(new TestDto(1, "Test1"));
list.add(new TestDto(2, "Test2"));
list.add(new TestDto(3, "Test3"));
KeySet keySet = new KeySet(TestDto.class, "user", "UC_LIST");
ops.createList(list, keySet, testDtoJsonWriter);
final List<TestDto> dtoListFromStore = ops.getDTOList("user", "UC_LIST", TestDto.class, testDtoJsonReader);
assertEquals(3, dtoListFromStore.size());
assertTrue(dtoListFromStore.contains(new TestDto(1, "Test1")));
assertTrue(dtoListFromStore.contains(new TestDto(2, "Test2")));
assertTrue(dtoListFromStore.contains(new TestDto(3, "Test3")));
}
@Test
public void testRemoveDTOList() throws Exception {
KeyStoreOperations ops = new KeyStoreOperations(storage, keySetJsonReader, keySetJsonWriter);
List<TestDto> list = new ArrayList<TestDto>();
list.add(new TestDto(1, "Test1"));
list.add(new TestDto(2, "Test2"));
list.add(new TestDto(3, "Test3"));
KeySet keySet = new KeySet(TestDto.class, "user", "UC_LIST");
ops.createList(list, keySet, testDtoJsonWriter);
assertEquals(4, storage.getLength());
ops.removeDTOList(keySet);
assertEquals(0, storage.getLength());
}
@Test
public void testGetDTOListAndDeleteIt() throws Exception {
KeyStoreOperations ops = new KeyStoreOperations(storage, keySetJsonReader, keySetJsonWriter);
List<TestDto> list = new ArrayList<TestDto>();
list.add(new TestDto(1, "Test1"));
list.add(new TestDto(2, "Test2"));
list.add(new TestDto(3, "Test3"));
KeySet keySet = new KeySet(TestDto.class, "user", "UC_LIST");
ops.createList(list, keySet, testDtoJsonWriter);
assertEquals(4, storage.getLength());
final List<TestDto> dtoListFromStore = ops.getDTOListAndDeleteIt(keySet, testDtoJsonReader);
//ist empty?
assertEquals(0, storage.getLength());
//is result ok?
assertEquals(3, dtoListFromStore.size());
assertTrue(dtoListFromStore.contains(new TestDto(1, "Test1")));
assertTrue(dtoListFromStore.contains(new TestDto(2, "Test2")));
assertTrue(dtoListFromStore.contains(new TestDto(3, "Test3")));
}
@Test
public void testUpdateDTO() throws Exception {
KeyStoreOperations ops = new KeyStoreOperations(storage, keySetJsonReader, keySetJsonWriter);
List<TestDto> list = new ArrayList<TestDto>();
list.add(new TestDto(1, "Test1"));
list.add(new TestDto(2, "Test2"));
list.add(new TestDto(3, "Test3"));
KeySet keySet = new KeySet(TestDto.class, "user", "UC_LIST");
ops.createList(list, keySet, testDtoJsonWriter);
assertEquals(4, storage.getLength());
ops.updateDTO(new TestDto(2, "Test2X"), keySet, "2", testDtoJsonWriter);
//ist size same?
assertEquals(4, storage.getLength());
//is result ok?
final List<TestDto> dtoListFromStore = ops.getDTOList("user", "UC_LIST", TestDto.class, testDtoJsonReader);
assertEquals(3, dtoListFromStore.size());
assertTrue(dtoListFromStore.contains(new TestDto(1, "Test1")));
assertFalse(dtoListFromStore.contains(new TestDto(2, "Test2")));
assertTrue(dtoListFromStore.contains(new TestDto(2, "Test2X")));
assertTrue(dtoListFromStore.contains(new TestDto(3, "Test3")));
}
@Test
public void testDeleteDTO() throws Exception {
KeyStoreOperations ops = new KeyStoreOperations(storage, keySetJsonReader, keySetJsonWriter);
List<TestDto> list = new ArrayList<TestDto>();
list.add(new TestDto(1, "Test1"));
list.add(new TestDto(2, "Test2"));
list.add(new TestDto(3, "Test3"));
KeySet keySet = new KeySet(TestDto.class, "user", "UC_LIST");
ops.createList(list, keySet, testDtoJsonWriter);
assertEquals(4, storage.getLength());
ops.deleteDTO(keySet, "2", testDtoJsonWriter);
assertEquals(3, storage.getLength());
//is result ok?
final List<TestDto> dtoListFromStore = ops.getDTOList("user", "UC_LIST", TestDto.class, testDtoJsonReader);
assertEquals(2, dtoListFromStore.size());
assertTrue(dtoListFromStore.contains(new TestDto(1, "Test1")));
assertFalse(dtoListFromStore.contains(new TestDto(2, "Test2")));
assertTrue(dtoListFromStore.contains(new TestDto(3, "Test3")));
}
@Test
public void testUpdateOrCreateDTOList() throws Exception {
KeyStoreOperations ops = new KeyStoreOperations(storage, keySetJsonReader, keySetJsonWriter);
List<TestDto> list = new ArrayList<TestDto>();
list.add(new TestDto(1, "Test1"));
list.add(new TestDto(2, "Test2"));
list.add(new TestDto(3, "Test3"));
KeySet keySet = new KeySet(TestDto.class, "user", "UC_LIST");
//1x Schreiben , noch nicht existent
ops.updateOrCreateDTOList(list, keySet, testDtoJsonWriter, Arrays.asList(1L, 2L, 3L));
assertEquals(4, storage.getLength());
//is result ok?
List<TestDto> dtoListFromStore = ops.getDTOList("user", "UC_LIST", TestDto.class, testDtoJsonReader);
assertEquals(3, dtoListFromStore.size());
assertTrue(dtoListFromStore.contains(new TestDto(1, "Test1")));
assertTrue(dtoListFromStore.contains(new TestDto(2, "Test2")));
assertTrue(dtoListFromStore.contains(new TestDto(3, "Test3")));
//2x Schreiben , bereits existent
list = new ArrayList<TestDto>();
list.add(new TestDto(1, "Test1"));
list.add(new TestDto(2, "Test2XX"));
list.add(new TestDto(3, "Test3"));
ops.updateOrCreateDTOList(list, keySet, testDtoJsonWriter, Arrays.asList(1L, 2L, 3L));
assertEquals(4, storage.getLength());
//is result ok?
dtoListFromStore = ops.getDTOList("user", "UC_LIST", TestDto.class, testDtoJsonReader);
assertEquals(3, dtoListFromStore.size());
assertTrue(dtoListFromStore.contains(new TestDto(1, "Test1")));
assertTrue(dtoListFromStore.contains(new TestDto(2, "Test2XX")));
assertFalse(dtoListFromStore.contains(new TestDto(2, "Test2")));
assertTrue(dtoListFromStore.contains(new TestDto(3, "Test3")));
}
@Test
public void testLoadKeysetFromStoreOrCreateEmptyOne() throws Exception {
KeyStoreOperations ops = new KeyStoreOperations(storage, keySetJsonReader, keySetJsonWriter);
KeySet keySet = ops.loadKeysetFormStoreOrCreateEmptyOne(TestDto.class, "user", "UC_LSIT");
assertEquals(0, keySet.getKeys().size());
//elemente hinzufuegen
keySet.createKey("Key1");
keySet.createKey("Key2");
keySet.createKey("Key3");
storage.setItem(keySet.createKeyCollectionKey(), keySetJsonWriter.toJson(keySet));
//noch einmal lesen
keySet = ops.loadKeysetFormStoreOrCreateEmptyOne(TestDto.class, "user", "UC_LSIT");
assertEquals(3, keySet.getKeys().size());
assertTrue(keySet.getKeys().contains("user_de.swm.gwt.client.mobile.keystore.impl.TestDto_UC_LSIT_Key1"));
assertTrue(keySet.getKeys().contains("user_de.swm.gwt.client.mobile.keystore.impl.TestDto_UC_LSIT_Key2"));
assertTrue(keySet.getKeys().contains("user_de.swm.gwt.client.mobile.keystore.impl.TestDto_UC_LSIT_Key3"));
}
@Test
public void testCreateList() throws Exception {
KeyStoreOperations ops = new KeyStoreOperations(storage, keySetJsonReader, keySetJsonWriter);
List<TestDto> list = new ArrayList<TestDto>();
list.add(new TestDto(1, "Test1"));
list.add(new TestDto(2, "Test2"));
list.add(new TestDto(3, "Test3"));
KeySet keySet = new KeySet(TestDto.class, "user", "UC_LIST");
ops.createList(list, keySet, testDtoJsonWriter);
assertEquals(4, storage.getLength());
//is result ok?
final List<TestDto> dtoListFromStore = ops.getDTOList("user", "UC_LIST", TestDto.class, testDtoJsonReader);
assertEquals(3, dtoListFromStore.size());
assertTrue(dtoListFromStore.contains(new TestDto(1, "Test1")));
assertTrue(dtoListFromStore.contains(new TestDto(2, "Test2")));
assertTrue(dtoListFromStore.contains(new TestDto(3, "Test3")));
}
}