package sushi.persistence.test;
import static org.junit.Assert.assertTrue;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.junit.Before;
import org.junit.FixMethodOrder;
import org.junit.Test;
import org.junit.runners.MethodSorters;
import sushi.event.SushiEvent;
import sushi.event.SushiEventType;
import sushi.event.collection.SushiMapTree;
import sushi.persistence.Persistor;
import sushi.process.SushiProcess;
import sushi.util.SushiTestHelper;
/**
* This class tests the saving, finding and removing of {@link SushiEventType}.
* @author micha
*/
@FixMethodOrder(MethodSorters.JVM)
public class EventTypePersistorTest implements PersistenceTest {
@Before
public void setup(){
Persistor.useTestEnviroment();
}
@Override
@Test
public void testStoreAndRetrieve() {
storeExampleEventType();
assertTrue("Value should be 2, but was " + SushiEventType.findAll().size(),SushiEventType.findAll().size()==2);
SushiEventType.removeAll();
assertTrue("Value should be 0, but was " + SushiEventType.findAll().size(),SushiEventType.findAll().size()==0);
}
private void storeExampleEventType() {
List<SushiEventType> eventTypes = SushiTestHelper.createEventTypes();
SushiEventType firstEventType = eventTypes.get(0);
SushiEventType secondEventType = eventTypes.get(1);
ArrayList<SushiEventType> eventTypes1 = new ArrayList<SushiEventType>();
eventTypes1.add(firstEventType);
ArrayList<SushiEventType> eventTypes2 = new ArrayList<SushiEventType>();
eventTypes1.add(secondEventType);
assertTrue(SushiEventType.save(eventTypes));
SushiProcess process1 = new SushiProcess("Process1", eventTypes1);
process1.save();
SushiProcess process2 = new SushiProcess("Process2", eventTypes2);
process2.save();
}
private void storeExampleEvents() {
SushiEventType eventType = SushiEventType.findByTypeName("Kino");
SushiMapTree<String, Serializable> hm = new SushiMapTree<String, Serializable>();
hm.put("Location", 1);
hm.put("Movie", "Event");
SushiEvent event = new SushiEvent(eventType, new Date(), hm);
event.save();
}
@Override
@Test
public void testFind() {
storeExampleEventType();
assertTrue(SushiEventType.findAll().size() == 2);
SushiEventType eventType = SushiEventType.findByAttribute("TypeName", "Kino").get(0);
assertTrue(eventType.getTypeName().equals("Kino"));
// assertTrue(eventType.getValueTypes().get("Location") == false);
// assertTrue(eventType.getValueTypes().get("SecondaryEvent") == true);
}
@Override
@Test
public void testRemove() {
storeExampleEventType();
List<SushiEventType> eventTypes;
eventTypes = SushiEventType.findAll();
assertTrue("Value should be 2, but was " + SushiEventType.findAll().size(),SushiEventType.findAll().size()==2);
SushiEventType deleteEventType = eventTypes.get(0);
deleteEventType.remove();
eventTypes = SushiEventType.findAll();
assertTrue(eventTypes.size() == 1);
assertTrue(eventTypes.get(0).getID() != deleteEventType.getID());
}
@Test
public void testRemoveEventTypeWithEvents() {
storeExampleEventType();
storeExampleEvents();
List<SushiEventType> eventTypes;
List<SushiEvent> events;
eventTypes = SushiEventType.findAll();
assertTrue("Value should be 2, but was " + SushiEventType.findAll().size(),SushiEventType.findAll().size()==2);
SushiEventType deleteEventType = SushiEventType.findByTypeName("Kino");
events = SushiEvent.findByEventType(deleteEventType);
assertTrue("Value should be 1, but was " +events.size(), events.size() == 1);
// assertTrue("should contain 1 event, but contains " + eventTypes.get(0).getChilds().size(), eventTypes.get(0).getChilds().size() == 1);
deleteEventType.remove();
events = SushiEvent.findByEventType(deleteEventType);
assertTrue("Value should be 0, but was " + events.size(), events.size() == 0);
eventTypes = SushiEventType.findAll();
assertTrue(eventTypes.size() == 1);
assertTrue(eventTypes.get(0).getID() != deleteEventType.getID());
}
}