diff options
Diffstat (limited to 'src/test/java/at')
4 files changed, 273 insertions, 4 deletions
diff --git a/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/OperationDAOTest.java b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/OperationDAOTest.java new file mode 100644 index 0000000..726735d --- /dev/null +++ b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/OperationDAOTest.java @@ -0,0 +1,81 @@ +package at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dao; + +import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Operation; +import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Operation.Severity; +import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Operation.Status; +import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Vehicle; +import at.ac.tuwien.sepm.assignment.groupphase.exception.ElementNotFoundException; +import at.ac.tuwien.sepm.assignment.groupphase.util.JdbcTestCase; +import java.time.Instant; +import java.util.Collections; +import java.util.Set; +import org.dbunit.dataset.DataSetException; +import org.dbunit.dataset.IDataSet; +import org.junit.Test; + +public class OperationDAOTest extends JdbcTestCase { + +    private static final String[] COMPARE_TABLES = +            new String[] {"VehicleOperation", "Operation", "Vehicle", "VehicleVersion"}; + +    private OperationDAO operationDAO; + +    private final Operation o; + +    public OperationDAOTest() { +        this.operationDAO = new DBOperationDAO(getJdbcConnectionManager()); + +        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.now()) +                        .destination("New description") +                        .additionalInfo("Test") +                        .build(); +    } + +    @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); +    } +} diff --git a/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/service/OperationServiceComponentTest.java b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/service/OperationServiceComponentTest.java index 8e13d0e..9754b2d 100644 --- a/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/service/OperationServiceComponentTest.java +++ b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/service/OperationServiceComponentTest.java @@ -5,6 +5,7 @@ import static org.hamcrest.CoreMatchers.is;  import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dao.DBOperationDAO;  import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dao.OperationDAO; +import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dao.VehicleDatabaseDao;  import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Operation;  import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Operation.Severity;  import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Operation.Status; @@ -21,9 +22,18 @@ import org.junit.Test;  public class OperationServiceComponentTest { -    private final OperationDAO operationDAO = -            new DBOperationDAO(new JDBCConnectionManager("jdbc:h2:mem:test;DB_CLOSE_DELAY=-1")); -    private final OperationService operationService = new OperationServiceImpl(operationDAO); +    // TODO: dependency injection + +    private final JDBCConnectionManager jdbcConnectionManager = +            new JDBCConnectionManager("jdbc:h2:mem:test;DB_CLOSE_DELAY=-1"); + +    private final OperationDAO operationDAO = new DBOperationDAO(jdbcConnectionManager); + +    private final VehicleDatabaseDao vehicleDatabaseDao = +            new VehicleDatabaseDao(jdbcConnectionManager); + +    private final OperationService operationService = +            new OperationServiceImpl(operationDAO, vehicleDatabaseDao);      /*@Test      public void testaddOperationTest() { diff --git a/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/service/OperationServiceTest.java b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/service/OperationServiceTest.java new file mode 100644 index 0000000..70185d3 --- /dev/null +++ b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/service/OperationServiceTest.java @@ -0,0 +1,175 @@ +package at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.service; + +import static org.mockito.ArgumentMatchers.anyLong; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dao.OperationDAO; +import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dao.VehicleDAO; +import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Operation; +import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Operation.Severity; +import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Operation.Status; +import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Vehicle; +import at.ac.tuwien.sepm.assignment.groupphase.exception.ElementNotFoundException; +import at.ac.tuwien.sepm.assignment.groupphase.exception.InvalidOperationException; +import at.ac.tuwien.sepm.assignment.groupphase.exception.InvalidVehicleException; +import at.ac.tuwien.sepm.assignment.groupphase.exception.PersistenceException; +import java.time.Instant; +import java.util.Collections; +import java.util.Set; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.MockitoJUnitRunner; + +@RunWith(MockitoJUnitRunner.class) +public class OperationServiceTest { + +    @Mock private OperationDAO operationDAO; + +    @Mock private VehicleDAO vehicleDAO; + +    @InjectMocks private OperationServiceImpl operationService; + +    private Set<Vehicle> vehicles; +    private Vehicle v1, v2, v3, v4, v5; + +    @Before +    public void setUp() throws ElementNotFoundException, PersistenceException { +        v1 = +                Vehicle.builder() +                        .id(1) +                        .name("RTW-1") +                        .constructionType(Vehicle.ConstructionType.HOCHDACH) +                        .type(Vehicle.VehicleType.RTW) +                        .status(Vehicle.Status.FREI_FUNK) +                        .hasNef(true) +                        .build(); + +        v2 = +                Vehicle.builder() +                        .id(2) +                        .name("KTW-1") +                        .constructionType(Vehicle.ConstructionType.HOCHDACH) +                        .type(Vehicle.VehicleType.KTW) +                        .status(Vehicle.Status.FREI_WACHE) +                        .hasNef(true) +                        .build(); + +        v3 = +                Vehicle.builder() +                        .id(3) +                        .name("KTW-2") +                        .constructionType(Vehicle.ConstructionType.MITTELHOCHDACH) +                        .type(Vehicle.VehicleType.KTW_B) +                        .status(Vehicle.Status.FREI_FUNK) +                        .hasNef(false) +                        .build(); + +        v4 = +                Vehicle.builder() +                        .id(4) +                        .name("BKTW-2") +                        .constructionType(Vehicle.ConstructionType.HOCHDACH) +                        .type(Vehicle.VehicleType.BKTW) +                        .status(Vehicle.Status.FREI_FUNK) +                        .hasNef(false) +                        .build(); + +        v5 = +                Vehicle.builder() +                        .id(5) +                        .name("NEF-1") +                        .constructionType(Vehicle.ConstructionType.NORMAL) +                        .type(Vehicle.VehicleType.NEF) +                        .status(Vehicle.Status.FREI_WACHE) +                        .hasNef(true) +                        .build(); + +        Vehicle v6 = +                Vehicle.builder() +                        .id(6) +                        .name("NAH-1") +                        .constructionType(Vehicle.ConstructionType.MITTELHOCHDACH) +                        .type(Vehicle.VehicleType.NAH) +                        .status(Vehicle.Status.ABGEMELDET) +                        .hasNef(true) +                        .build(); + +        vehicles = Set.of(v1, v2, v3, v4, v5, v6); + +        Operation o = +                Operation.builder() +                        .id(1) +                        .opCode("ALP-95E7") +                        .severity(Severity.E) +                        .status(Status.ACTIVE) +                        .vehicles(Collections.singleton(v1)) +                        .created(Instant.now()) +                        .destination("Wiedner Hauptstraße 35, Wien") +                        .build(); + +        Operation o2 = o.toBuilder().status(Status.CANCELLED).build(); + +        when(operationDAO.get(anyLong())) +                .thenAnswer( +                        ans -> { +                            long arg = ans.getArgument(0); +                            if (arg == 1L) return o; +                            else if (arg == 5L) return o2; +                            else throw new ElementNotFoundException(""); +                        }); + +        when(vehicleDAO.get(anyLong())) +                .thenAnswer( +                        ans -> { +                            int arg = ((Long) ans.getArgument(0)).intValue(); +                            return vehicles.stream() +                                    .filter(v -> v.id() == arg) +                                    .findFirst() +                                    .orElseThrow(() -> new ElementNotFoundException("")); +                        }); +    } + +    @Test +    public void requestNormal() throws Exception { +        Set<Long> vehicleIds = Set.of(2L, 3L, 4L, 5L); +        operationService.requestVehicles(1, vehicleIds); + +        Operation result = +                operationDAO.get(1).toBuilder().vehicles(Set.of(v1, v2, v3, v4, v5)).build(); +        verify(operationDAO, times(1)).update(result); +        verify(operationDAO, times(0)).get(6L); +    } + +    @Test +    public void requestExistingVehicle() throws Exception { +        operationService.requestVehicles(1, Set.of(1L)); + +        Operation result = operationDAO.get(1); +        verify(operationDAO, times(0)).update(result); +    } + +    @Test(expected = InvalidVehicleException.class) +    public void requestInvalidVehicle() throws Exception { +        operationService.requestVehicles(1, Set.of(5L, 6L)); +    } + +    @Test(expected = InvalidOperationException.class) +    public void requestInvalidOperation() throws Exception { +        operationService.requestVehicles(2, Set.of(1L)); +    } + +    @Test(expected = InvalidVehicleException.class) +    public void requestInactiveVehicle() throws Exception { +        operationService.requestVehicles(1, Set.of(6L)); +    } + +    @Test(expected = InvalidOperationException.class) +    public void requestInactiveOperation() throws Exception { +        operationService.requestVehicles(5, Set.of(1L)); +    } +} diff --git a/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/service/OperationServiceUnitTest.java b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/service/OperationServiceUnitTest.java index 29a840b..7b574a1 100644 --- a/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/service/OperationServiceUnitTest.java +++ b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/service/OperationServiceUnitTest.java @@ -7,6 +7,7 @@ import static org.mockito.Mockito.mock;  import static org.mockito.Mockito.when;  import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dao.OperationDAO; +import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dao.VehicleDAO;  import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Operation;  import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Operation.Severity;  import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Operation.Status; @@ -23,7 +24,9 @@ import org.junit.Test;  public class OperationServiceUnitTest {      private final OperationDAO operationDAO = mock(OperationDAO.class); -    private final OperationService operationService = new OperationServiceImpl(operationDAO); +    private final VehicleDAO vehicleDAO = mock(VehicleDAO.class); +    private final OperationService operationService = +            new OperationServiceImpl(operationDAO, vehicleDAO);      @Test      public void addOperationTest() {  | 
