diff options
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.java | 199 |
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); + } +} |