aboutsummaryrefslogtreecommitdiffstats
path: root/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/missioncontrol/dao/OperationDAOTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/java/at/ac/tuwien/sepm/assignment/groupphase/missioncontrol/dao/OperationDAOTest.java')
-rw-r--r--src/test/java/at/ac/tuwien/sepm/assignment/groupphase/missioncontrol/dao/OperationDAOTest.java199
1 files changed, 199 insertions, 0 deletions
diff --git a/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/missioncontrol/dao/OperationDAOTest.java b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/missioncontrol/dao/OperationDAOTest.java
new file mode 100644
index 0000000..d9e7fb7
--- /dev/null
+++ b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/missioncontrol/dao/OperationDAOTest.java
@@ -0,0 +1,199 @@
+package at.ac.tuwien.sepm.assignment.groupphase.missioncontrol.dao;
+
+import static org.junit.Assert.assertEquals;
+
+import at.ac.tuwien.sepm.assignment.groupphase.exception.ElementNotFoundException;
+import at.ac.tuwien.sepm.assignment.groupphase.exception.PersistenceException;
+import at.ac.tuwien.sepm.assignment.groupphase.missioncontrol.dto.Operation;
+import at.ac.tuwien.sepm.assignment.groupphase.missioncontrol.dto.Operation.Severity;
+import at.ac.tuwien.sepm.assignment.groupphase.missioncontrol.dto.Operation.Status;
+import at.ac.tuwien.sepm.assignment.groupphase.missioncontrol.dto.Vehicle;
+import at.ac.tuwien.sepm.assignment.groupphase.missioncontrol.dto.Vehicle.ConstructionType;
+import at.ac.tuwien.sepm.assignment.groupphase.missioncontrol.dto.Vehicle.VehicleType;
+import at.ac.tuwien.sepm.assignment.groupphase.util.JdbcTestCase;
+import java.time.Instant;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.EnumSet;
+import java.util.LinkedList;
+import java.util.Set;
+import java.util.TimeZone;
+import org.dbunit.dataset.DataSetException;
+import org.dbunit.dataset.IDataSet;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+public class OperationDAOTest extends JdbcTestCase {
+
+ private static final String[] COMPARE_TABLES =
+ new String[] {"VehicleOperation", "Operation", "Vehicle", "VehicleVersion"};
+
+ private final OperationDAO operationDAO;
+
+ private final Operation o;
+
+ private final Operation originalOperation;
+
+ public OperationDAOTest() throws PersistenceException {
+ // TODO: fix once everything properly uses dependency injection
+ EmployeeDAO employeeDAO = new EmployeeDatabaseDAO(getJdbcConnectionManager());
+ RegistrationDatabaseDAO registrationDatabaseDAO =
+ new RegistrationDatabaseDAO(getJdbcConnectionManager(), employeeDAO);
+ VehicleDAO vehicleDAO =
+ new VehicleDatabaseDAO(getJdbcConnectionManager(), registrationDatabaseDAO);
+ this.operationDAO =
+ new OperationDatabaseDAO(
+ getJdbcConnectionManager(), vehicleDAO, registrationDatabaseDAO);
+
+ Vehicle v1 =
+ Vehicle.builder()
+ .id(1)
+ .name("RTW-1")
+ .constructionType(Vehicle.ConstructionType.HOCHDACH)
+ .type(Vehicle.VehicleType.RTW)
+ .status(Vehicle.Status.FREI_FUNK)
+ .hasNef(true)
+ .build();
+
+ Vehicle v2 = v1.toBuilder().id(2).build();
+ Vehicle v3 = v1.toBuilder().id(3).build();
+
+ o =
+ Operation.builder()
+ .id(1)
+ .opCode("RD-2B0M")
+ .severity(Severity.B)
+ .status(Status.ACTIVE)
+ .vehicles(Set.of(v1, v2, v3))
+ .created(Instant.ofEpochSecond(1514764800)) // 2018-01-01 00:00:00.0
+ .destination("New destination")
+ .additionalInfo("New information")
+ .build();
+
+ Vehicle vehicle =
+ Vehicle.builder()
+ .id(4)
+ .name("BKTW-4")
+ .constructionType(ConstructionType.HOCHDACH)
+ .type(VehicleType.BKTW)
+ .hasNef(false)
+ .status(Vehicle.Status.ZUM_BERUFUNGSORT)
+ .registrations(new LinkedList<>())
+ .build();
+
+ originalOperation =
+ Operation.builder()
+ .id(1)
+ .opCode("ALP-95E7")
+ .severity(Severity.E)
+ .created(Instant.parse("2000-01-01T00:00:00.0Z"))
+ .destination("Wiedner Hauptstraße 35, Wien")
+ .additionalInfo("Additional information")
+ .status(Status.ACTIVE)
+ .vehicles(Set.of(vehicle))
+ .build();
+ }
+
+ @BeforeClass
+ public static void before() {
+ TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
+ }
+
+ @Override
+ protected IDataSet getDataSet() throws DataSetException {
+ return getDataSet("operationDAOUpdateSetup.xml");
+ }
+
+ @Test
+ public void testUpdateNormal() throws Exception {
+ operationDAO.update(o);
+
+ compareWith("operationDAOUpdateNormal.xml", COMPARE_TABLES);
+ }
+
+ @Test(expected = ElementNotFoundException.class)
+ public void testUpdateMissing() throws Exception {
+ Operation op = o.toBuilder().id(73).build();
+
+ operationDAO.update(op);
+ }
+
+ @Test
+ public void testUpdateRemoveVehicles() throws Exception {
+ Operation op = o.toBuilder().vehicles(Collections.emptySet()).build();
+
+ operationDAO.update(op);
+
+ compareWith("operationDAOUpdateRemoveVehicles.xml", COMPARE_TABLES);
+ }
+
+ @Test
+ public void testListOperations() throws Exception {
+ Set<Operation> operationSet = operationDAO.list(EnumSet.allOf(Status.class));
+
+ assertEquals(Set.of(originalOperation), operationSet);
+ }
+
+ @Test
+ public void testGetOperations() throws Exception {
+ Operation gotOperation = operationDAO.get(originalOperation.id());
+
+ assertEquals(originalOperation, gotOperation);
+ }
+
+ @Test
+ public void testAddOperation() throws Exception {
+ long id = operationDAO.add(o);
+ assertEquals(2, id);
+ compareWith("operationDAOAddOperation.xml", COMPARE_TABLES);
+ }
+
+ @Test(expected = PersistenceException.class)
+ public void testAddFaultyOperation() throws PersistenceException {
+ Vehicle vehicle =
+ Vehicle.builder()
+ .status(Vehicle.Status.FREI_FUNK)
+ .constructionType(ConstructionType.HOCHDACH)
+ .name("BKTW_123")
+ .hasNef(true)
+ .type(VehicleType.BKTW)
+ .build();
+
+ Operation operation =
+ Operation.builder()
+ .status(Status.ACTIVE)
+ .opCode(String.valueOf(Arrays.stream(new int[200]).map(i -> 'a')))
+ .created(Instant.now())
+ .destination("Wiedner Hauptstraße 35, Wien")
+ .additionalInfo("HTU Wien")
+ .severity(Severity.B)
+ .vehicles(Set.of(vehicle))
+ .build();
+ operationDAO.add(operation);
+ }
+
+ @Test(expected = PersistenceException.class)
+ public void testAddFaultyOperation2() throws PersistenceException {
+ Vehicle vehicle =
+ Vehicle.builder()
+ .status(Vehicle.Status.FREI_FUNK)
+ .constructionType(ConstructionType.HOCHDACH)
+ .name("BKTW_123")
+ .hasNef(true)
+ .type(VehicleType.BKTW)
+ .build();
+
+ Operation operation =
+ Operation.builder()
+ .status(Status.ACTIVE)
+ .opCode("ALP-95E7")
+ .created(Instant.now())
+ .destination(
+ "Wiednerstraße 888, 1010 Wien Wiednerstraße 888, 1010 Wien Wiednerstraße 888, 1010 Wien Wiednerstraße 888, 1010 Wien Wiednerstraße 888, 1010 Wien ")
+ .additionalInfo("HTU Wien")
+ .severity(Severity.B)
+ .vehicles(Set.of(vehicle))
+ .build();
+ operationDAO.add(operation);
+ }
+}