package nl.fontys.sofa.limo.orientdb.dao;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import nl.fontys.sofa.limo.domain.component.event.Event;
import nl.fontys.sofa.limo.domain.component.event.distribution.PoissonDistribution;
import nl.fontys.sofa.limo.domain.component.procedure.Procedure;
import nl.fontys.sofa.limo.domain.component.procedure.TimeType;
import nl.fontys.sofa.limo.domain.component.procedure.value.RangeValue;
import nl.fontys.sofa.limo.domain.component.procedure.value.SingleValue;
import nl.fontys.sofa.limo.orientdb.OrientDBConnector;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.netbeans.junit.NbTestCase;
/**
*
* @author Sven Mäurer
*/
public class OrientDBEventDAOTest extends NbTestCase {
private static final String EVENT_NAME = "Pirates";
private OrientDBEventDAO dao;
public OrientDBEventDAOTest(String testCase) {
super(testCase);
}
@Before
@Override
public void setUp() {
try {
Field databaseURLField = OrientDBConnector.class.getDeclaredField("databaseURL");
databaseURLField.setAccessible(true);
databaseURLField.set(null, "memory:tests");
} catch (NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException ex) {
Logger.getLogger(OrientProcedureCategoryDAOTest.class.getName()).log(Level.SEVERE, null, ex);
}
dao = new OrientDBEventDAO();
}
@After
@Override
public void tearDown() {
for (Event ht : dao.findAll()) {
dao.delete(ht);
}
dao = null;
OrientDBConnector.close();
}
/**
* Test of findAll method, of class OrientDBEventDAO.
*/
@Test
public void testFindAll() {
List<Event> events = dao.findAll();
assertTrue(events.isEmpty());
}
//
// /**
// * Test of findById method, of class OrientDBEventDAO.
// */
// @Test
// public void testFindById() {
// Event event = dao.findById("");
// assertNull(event);
// event = dao.findById("38129803980");
// assertNull(event);
// }
//
// /**
// * Test of insert method, of class OrientDBEventDAO.
// */
// @Test
// public void testInsert() {
// List<Event> events = dao.findAll();
// int oldSize = events.size();
// Event event = createEvent();
// event = dao.insert(event);
// events = dao.findAll();
// assertEquals(oldSize + 1, events.size());
// Event foundEvent = null;
// for (Event e : events) {
// if (e.getId().equals(event.getId())) {
// foundEvent = e;
// break;
// }
// }
// assertNotNull(foundEvent);
// assertEquals(event.getName(), foundEvent.getName());
//
// // PROCEDURES
// Procedure expectedProcedure = event.getProcedures().get(0);
// Procedure foundProcedure = foundEvent.getProcedures().get(0);
// assertEquals(expectedProcedure.getName(), foundProcedure.getName());
// assertEquals(expectedProcedure.getCost().getValue(), foundProcedure.getCost().getValue());
//
// // SUBEVENT
// List<Event> subEvents = event.getEvents();
// assertEquals(event.getEvents().size(), subEvents.size());
// Event foundSubEvent = subEvents.get(0);
// Event expectedSubEvent = event.getEvents().get(0);
// assertEquals(expectedSubEvent.getId(), foundSubEvent.getId());
// assertEquals(expectedSubEvent.getName(), foundSubEvent.getName());
//
// // SUBEVENT PROCEDURES
// List<Procedure> subEventProcedures = foundSubEvent.getProcedures();
// expectedProcedure = subEventProcedures.get(0);
// foundProcedure = foundSubEvent.getProcedures().get(0);
// assertEquals(expectedProcedure.getName(), foundProcedure.getName());
// assertEquals(expectedProcedure.getCost().getMin(), foundProcedure.getCost().getMin());
// assertEquals(expectedProcedure.getCost().getMax(), foundProcedure.getCost().getMax());
//
// // TIMES
// List<Procedure> expectedProcedures = event.getProcedures();
// List<Procedure> foundProcedures = foundEvent.getProcedures();
// assertEquals(expectedProcedures.size(), foundProcedures.size());
// Procedure expectedLeadTime = expectedProcedures.get(0);
// Procedure foundLeadTime = foundProcedures.get(0);
// assertEquals(expectedLeadTime.getName(), foundLeadTime.getName());
// assertEquals(expectedLeadTime.getTime().getValue(), foundLeadTime.getTime().getValue());
//
// // PROBABILITY
// assertEquals(event.getProbability().getClass(), foundEvent.getProbability().getClass());
// }
//
// /**
// * Test of update method, of class OrientDBEventDAO.
// */
// @Test
// public void testUpdate() {
// String newEventName = "Pirate attack";
// Event event = new Event();
// event.setName(EVENT_NAME);
// boolean updateSuccess = dao.update(event);
// assertFalse(updateSuccess);
// event = dao.insert(event);
// event = dao.findById(event.getId());
// event.setName(newEventName);
// updateSuccess = dao.update(event);
// assertTrue(updateSuccess);
// event = dao.findById(event.getId());
// assertEquals(newEventName, event.getName());
// }
//
// /**
// * Test of delete method, of class OrientDBEventDAO.
// */
// @Test
// public void testDelete() {
// boolean deleteSuccess = dao.delete(new Event());
// assertFalse(deleteSuccess);
// Event event = new Event();
// event.setName(EVENT_NAME);
// event = dao.insert(event);
// deleteSuccess = dao.delete(event);
// assertTrue(deleteSuccess);
// }
//
// private Event createEvent() {
// //EVENT
// Event event = new Event();
// event.setName(EVENT_NAME);
// event.setProbability(new PoissonDistribution());
// ArrayList<Procedure> procedures = new ArrayList<>();
// Procedure shipping = new Procedure("Shipping", "Transport", new SingleValue(1000), new SingleValue(9000), TimeType.MINUTES, new SingleValue(0));
// procedures.add(shipping);
// Procedure attack = new Procedure("Pirate Attack", "Unforeseeable", new SingleValue(10000), new SingleValue(5000), TimeType.MINUTES, new SingleValue(0));
// procedures.add(attack);
// event.setProcedures(procedures);
//
// //SUBEVENT
// Event subEvent = new Event();
// subEvent.setName("Repair cannonball damage");
// ArrayList<Procedure> subEventProcedures = new ArrayList<>();
// Procedure rapairingProcess = new Procedure("Repairing cannonball damage", "Repairing", new RangeValue(5000, 10000), new SingleValue(7500), TimeType.MINUTES, new SingleValue(0));
// subEventProcedures.add(rapairingProcess);
// subEvent.setProcedures(subEventProcedures);
// event.getEvents().add(subEvent);
//
// return event;
// }
}