aboutsummaryrefslogtreecommitdiffstats
path: root/src/test/java/at/ac/tuwien/sepm/assignment
diff options
context:
space:
mode:
authorTharre <tharre3@gmail.com>2018-05-11 15:49:43 +0200
committerTharre <tharre3@gmail.com>2018-05-11 15:49:43 +0200
commitf7d14a76123911f0bced08356a0c69e61147cb1b (patch)
treea75b0baa891453a14046c78503603d21986126c5 /src/test/java/at/ac/tuwien/sepm/assignment
parentacd6b64e494192f7c73032240029bfa53dccb362 (diff)
parent5298356db60cd971fed686d379130102843db819 (diff)
downloadsepm-groupproject-f7d14a76123911f0bced08356a0c69e61147cb1b.tar.gz
sepm-groupproject-f7d14a76123911f0bced08356a0c69e61147cb1b.tar.xz
sepm-groupproject-f7d14a76123911f0bced08356a0c69e61147cb1b.zip
Merge branch 'develop'
Diffstat (limited to 'src/test/java/at/ac/tuwien/sepm/assignment')
-rw-r--r--src/test/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/controller/RegistrationWindowApplication.java53
-rw-r--r--src/test/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/RegistrationDatabaseDAOTest.java168
-rw-r--r--src/test/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/service/RegistrationServiceImplTest.java148
-rw-r--r--src/test/java/at/ac/tuwien/sepm/assignment/groupphase/employee/CreateNewEmployeeApplication.java53
-rw-r--r--src/test/java/at/ac/tuwien/sepm/assignment/groupphase/employee/CreateNewEmployeeControllerTest.java85
-rw-r--r--src/test/java/at/ac/tuwien/sepm/assignment/groupphase/employee/EmployeePersistenceTest.java155
-rw-r--r--src/test/java/at/ac/tuwien/sepm/assignment/groupphase/employee/EmployeeServiceTest.java68
-rw-r--r--src/test/java/at/ac/tuwien/sepm/assignment/groupphase/employee/EmployeeServiceTestConfiguration.java19
-rw-r--r--src/test/java/at/ac/tuwien/sepm/assignment/groupphase/operation/OperationPersistenceTest.java109
-rw-r--r--src/test/java/at/ac/tuwien/sepm/assignment/groupphase/operation/OperationServiceComponentTest.java130
-rw-r--r--src/test/java/at/ac/tuwien/sepm/assignment/groupphase/operation/OperationServiceUnitTest.java155
-rw-r--r--src/test/java/at/ac/tuwien/sepm/assignment/groupphase/util/Helper.java28
-rw-r--r--src/test/java/at/ac/tuwien/sepm/assignment/groupphase/util/HighDpiAwareApplicationTest.java24
-rw-r--r--src/test/java/at/ac/tuwien/sepm/assignment/groupphase/util/ScaledBounds.java34
-rw-r--r--src/test/java/at/ac/tuwien/sepm/assignment/groupphase/vehicle/CarAddTestService.java283
-rw-r--r--src/test/java/at/ac/tuwien/sepm/assignment/groupphase/vehicle/CreateNewVehicleApplication.java51
-rw-r--r--src/test/java/at/ac/tuwien/sepm/assignment/groupphase/vehicle/CreateNewVehicleControllerTest.java79
-rw-r--r--src/test/java/at/ac/tuwien/sepm/assignment/groupphase/vehicle/VehicleServiceTestConfiguration.java19
18 files changed, 1661 insertions, 0 deletions
diff --git a/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/controller/RegistrationWindowApplication.java b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/controller/RegistrationWindowApplication.java
new file mode 100644
index 0000000..3293ae9
--- /dev/null
+++ b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/controller/RegistrationWindowApplication.java
@@ -0,0 +1,53 @@
+package at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.controller;
+
+import at.ac.tuwien.sepm.assignment.groupphase.util.SpringFXMLLoader;
+import java.lang.invoke.MethodHandles;
+import javafx.application.Application;
+import javafx.scene.Parent;
+import javafx.scene.Scene;
+import javafx.stage.Stage;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.context.annotation.AnnotationConfigApplicationContext;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.stereotype.Component;
+
+@Component
+@ComponentScan("at.ac.tuwien.sepm.assignment.groupphase")
+public class RegistrationWindowApplication extends Application {
+
+ private static final Logger LOG = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
+
+ public static AnnotationConfigApplicationContext context;
+
+ @Override
+ public void start(Stage primaryStage) throws Exception {
+ // setup application
+ primaryStage.setTitle("Person anlegen");
+ // primaryStage.setWidth(1366);
+ // primaryStage.setHeight(768);
+ primaryStage.centerOnScreen();
+ primaryStage.setOnCloseRequest(event -> LOG.debug("Application shutdown initiated"));
+
+ context = new AnnotationConfigApplicationContext(RegistrationWindowApplication.class);
+ final var fxmlLoader = context.getBean(SpringFXMLLoader.class);
+ primaryStage.setScene(
+ new Scene(
+ (Parent)
+ fxmlLoader.load(
+ getClass()
+ .getResourceAsStream(
+ "/fxml/RegistrationWindow.fxml"))));
+
+ // show application
+ primaryStage.show();
+ primaryStage.toFront();
+ LOG.debug("Application startup complete");
+ }
+
+ @Override
+ public void stop() {
+ LOG.debug("Stopping application");
+ context.close();
+ }
+}
diff --git a/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/RegistrationDatabaseDAOTest.java b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/RegistrationDatabaseDAOTest.java
new file mode 100644
index 0000000..03059ff
--- /dev/null
+++ b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/RegistrationDatabaseDAOTest.java
@@ -0,0 +1,168 @@
+package at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dao;
+
+import static org.junit.Assert.*;
+
+import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Employee;
+import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Employee.EducationLevel;
+import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Registration;
+import at.ac.tuwien.sepm.assignment.groupphase.exception.PersistenceException;
+import at.ac.tuwien.sepm.assignment.groupphase.util.JDBCConnectionManager;
+import java.nio.charset.Charset;
+import java.sql.SQLException;
+import java.time.Instant;
+import java.time.LocalDate;
+import java.util.LinkedList;
+import java.util.List;
+import org.h2.tools.RunScript;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
+
+public class RegistrationDatabaseDAOTest {
+
+ // Base taken from EmployeePersistenceTest
+
+ private static final String JDBC_DRIVER = org.h2.Driver.class.getName();
+ private static final String JDBC_URL = "jdbc:h2:mem:test;DB_CLOSE_DELAY=-1";
+ private static final String USER = "";
+ private static final String PASSWORD = "";
+
+ private RegistrationDAO registrationDAO;
+
+ public RegistrationDatabaseDAOTest() throws PersistenceException {
+ this.registrationDAO = new RegistrationDatabaseDAO(new JDBCConnectionManager(JDBC_URL));
+ }
+
+ @BeforeClass
+ public static void setupDatabase() throws SQLException {
+ RunScript.execute(
+ JDBC_URL,
+ USER,
+ PASSWORD,
+ "classpath:sql/database.sql",
+ Charset.forName("UTF8"),
+ false);
+ RunScript.execute(
+ JDBC_URL,
+ USER,
+ PASSWORD,
+ "classpath:sql/H2RegistrationDAOTest_populate.sql",
+ Charset.forName("UTF8"),
+ false);
+ }
+ /*
+ @Before
+ public void setUp() throws SQLException {
+ RunScript.execute(
+ JDBC_URL,
+ USER,
+ PASSWORD,
+ "classpath:sql/H2RegistrationDAOTest_populate.sql",
+ Charset.forName("UTF8"),
+ false);
+ }
+ */
+ @AfterClass
+ public static void tearDown() throws SQLException {
+ RunScript.execute(
+ JDBC_URL,
+ USER,
+ PASSWORD,
+ "classpath:sql/H2RegistrationDAOTest_depopulate.sql",
+ Charset.forName("UTF8"),
+ false);
+ }
+
+ @Rule public ExpectedException thrown = ExpectedException.none();
+
+ @Test
+ public void addRegistrationsShouldSucceed() throws PersistenceException {
+ List<Registration> registrations = new LinkedList<>();
+ /*
+ Vehicle vehicle = Vehicle.builder()
+ .id(1)
+ .name("RTW-1")
+ .constructionType(ConstructionType.HOCHDACH)
+ .type(VehicleType.RTW)
+ .status(Status.ABGEMELDET)
+ .hasNef(true)
+ .build();
+ */
+ Employee employee1 =
+ Employee.builder()
+ .id(1)
+ .name("John Doe")
+ .birthday(LocalDate.now()) // incorrect, but should be irrelevant
+ .educationLevel(EducationLevel.RS)
+ .isDriver(true)
+ .isPilot(true)
+ .build();
+ Employee employee2 =
+ Employee.builder()
+ .id(2)
+ .name("Nick \"Kage\" Verily")
+ .birthday(LocalDate.now()) // incorrect, but should be irrelevant
+ .educationLevel(EducationLevel.NKV)
+ .isDriver(true)
+ .isPilot(false)
+ .build();
+ Employee employee3 =
+ Employee.builder()
+ .id(3)
+ .name("Nicht Arzt")
+ .birthday(LocalDate.now()) // incorrect, but should be irrelevant
+ .educationLevel(EducationLevel.NA)
+ .isDriver(false)
+ .isPilot(false)
+ .build();
+ Registration registration1 =
+ Registration.builder()
+ .start(Instant.now()) // incorrect, but should be irrelevant to outcome
+ .end(Instant.now()) // same
+ .employee(employee1)
+ .build();
+ Registration registration2 =
+ Registration.builder()
+ .start(Instant.now()) // incorrect, but should be irrelevant to outcome
+ .end(Instant.now()) // same
+ .employee(employee2)
+ .build();
+ Registration registration3 =
+ Registration.builder()
+ .start(Instant.now()) // incorrect, but should be irrelevant to outcome
+ .end(Instant.now()) // same
+ .employee(employee3)
+ .build();
+ registrations.add(registration1);
+ registrations.add(registration2);
+ registrations.add(registration3);
+
+ List<Long> returnvalues = registrationDAO.add(1, registrations);
+ assertFalse(returnvalues.isEmpty()); // can be improved...
+ }
+
+ @Test
+ public void addRegistrationToInexistentVehicleShouldFail() throws PersistenceException {
+ thrown.expect(PersistenceException.class);
+ List<Registration> registrations = new LinkedList<>();
+ Employee employee =
+ Employee.builder()
+ .id(1)
+ .name("John Doe")
+ .birthday(LocalDate.now()) // incorrect, but should be irrelevant
+ .educationLevel(EducationLevel.RS)
+ .isDriver(true)
+ .isPilot(true)
+ .build();
+ Registration registration =
+ Registration.builder()
+ .start(Instant.MIN)
+ .end(Instant.MAX)
+ .employee(employee)
+ .build();
+ registrations.add(registration);
+ registrationDAO.add(200, registrations);
+ }
+}
diff --git a/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/service/RegistrationServiceImplTest.java b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/service/RegistrationServiceImplTest.java
new file mode 100644
index 0000000..f3efbef
--- /dev/null
+++ b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/service/RegistrationServiceImplTest.java
@@ -0,0 +1,148 @@
+package at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.service;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.when;
+
+import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dao.RegistrationDAO;
+import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Employee;
+import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Employee.EducationLevel;
+import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Registration;
+import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Vehicle;
+import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Vehicle.ConstructionType;
+import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Vehicle.Status;
+import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Vehicle.VehicleType;
+import at.ac.tuwien.sepm.assignment.groupphase.exception.InvalidRegistrationException;
+import at.ac.tuwien.sepm.assignment.groupphase.exception.InvalidVehicleException;
+import at.ac.tuwien.sepm.assignment.groupphase.exception.ServiceException;
+import java.time.Instant;
+import java.time.LocalDate;
+import java.time.temporal.ChronoUnit;
+import java.util.Arrays;
+import java.util.LinkedList;
+import java.util.List;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
+
+public class RegistrationServiceImplTest {
+
+ @Mock RegistrationDAO daoMock;
+
+ @Mock VehicleService vehicleService;
+
+ @Rule public MockitoRule mockitoRule = MockitoJUnit.rule();
+
+ @Rule public ExpectedException thrown = ExpectedException.none();
+
+ @Before
+ public void setUp() throws ServiceException {
+ MockitoAnnotations.initMocks(this);
+ when(vehicleService.list(any()))
+ .thenReturn(
+ Arrays.asList(
+ Vehicle.builder()
+ .id(1)
+ .name("RTW-1")
+ .constructionType(ConstructionType.HOCHDACH)
+ .status(Status.ABGEMELDET)
+ .type(VehicleType.RTW)
+ .hasNef(true)
+ .build()));
+ }
+
+ @Test
+ public void addValidRegistrationsShouldSucceed()
+ throws InvalidRegistrationException, ServiceException, InvalidVehicleException {
+ RegistrationService registrationService =
+ new RegistrationServiceImpl(daoMock, vehicleService);
+ List<Registration> registrations = new LinkedList<>();
+ Vehicle vehicle =
+ Vehicle.builder()
+ .id(1)
+ .name("RTW-1")
+ .constructionType(ConstructionType.HOCHDACH)
+ .type(VehicleType.RTW)
+ .status(Status.ABGEMELDET)
+ .hasNef(true)
+ .build();
+ Employee employee1 =
+ Employee.builder()
+ .id(1)
+ .name("John Doe")
+ .birthday(LocalDate.now()) // incorrect, but should be irrelevant
+ .educationLevel(EducationLevel.RS)
+ .isDriver(true)
+ .isPilot(true)
+ .build();
+ Employee employee2 =
+ Employee.builder()
+ .id(2)
+ .name("Nick \"Kage\" Verily")
+ .birthday(LocalDate.now()) // incorrect, but should be irrelevant
+ .educationLevel(EducationLevel.NKV)
+ .isDriver(true)
+ .isPilot(false)
+ .build();
+ Employee employee3 =
+ Employee.builder()
+ .id(3)
+ .name("Nicht Arzt")
+ .birthday(LocalDate.now()) // incorrect, but should be irrelevant
+ .educationLevel(EducationLevel.NA)
+ .isDriver(false)
+ .isPilot(false)
+ .build();
+ Instant start = Instant.now();
+ Instant end = start.plus(8, ChronoUnit.HOURS);
+ Registration registration1 =
+ Registration.builder().start(start).end(end).employee(employee1).build();
+ Registration registration2 =
+ Registration.builder().start(start).end(end).employee(employee2).build();
+ Registration registration3 =
+ Registration.builder().start(start).end(end).employee(employee3).build();
+ registrations.add(registration1);
+ registrations.add(registration2);
+ registrations.add(registration3);
+ registrationService.add(vehicle.id(), registrations);
+ }
+
+ @Test
+ public void addOnlyOnePersonToRTWShouldFail()
+ throws InvalidRegistrationException, ServiceException, InvalidVehicleException {
+ thrown.expect(InvalidRegistrationException.class);
+ RegistrationService registrationService =
+ new RegistrationServiceImpl(daoMock, vehicleService);
+ List<Registration> registrations = new LinkedList<>();
+ Vehicle vehicle =
+ Vehicle.builder()
+ .id(1)
+ .name("RTW-1")
+ .constructionType(ConstructionType.HOCHDACH)
+ .type(VehicleType.RTW)
+ .status(Status.ABGEMELDET)
+ .hasNef(true)
+ .build();
+ Employee employee =
+ Employee.builder()
+ .id(1)
+ .name("John Doe")
+ .birthday(LocalDate.now()) // incorrect, but should be irrelevant
+ .educationLevel(EducationLevel.RS)
+ .isDriver(true)
+ .isPilot(true)
+ .build();
+ Registration registration =
+ Registration.builder()
+ .start(Instant.MIN)
+ .end(Instant.MAX)
+ .employee(employee)
+ .build();
+ registrations.add(registration);
+ registrationService.add(vehicle.id(), registrations);
+ }
+}
diff --git a/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/employee/CreateNewEmployeeApplication.java b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/employee/CreateNewEmployeeApplication.java
new file mode 100644
index 0000000..e9f4801
--- /dev/null
+++ b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/employee/CreateNewEmployeeApplication.java
@@ -0,0 +1,53 @@
+package at.ac.tuwien.sepm.assignment.groupphase.employee;
+
+import at.ac.tuwien.sepm.assignment.groupphase.util.SpringFXMLLoader;
+import java.lang.invoke.MethodHandles;
+import javafx.application.Application;
+import javafx.scene.Parent;
+import javafx.scene.Scene;
+import javafx.stage.Stage;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.context.annotation.AnnotationConfigApplicationContext;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.stereotype.Component;
+
+@Component
+@ComponentScan("at.ac.tuwien.sepm.assignment.groupphase")
+public final class CreateNewEmployeeApplication extends Application {
+
+ private static final Logger LOG = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
+
+ public static AnnotationConfigApplicationContext context;
+
+ @Override
+ public void start(Stage primaryStage) throws Exception {
+ // setup application
+ primaryStage.setTitle("Person anlegen");
+ primaryStage.setWidth(1366);
+ primaryStage.setHeight(768);
+ primaryStage.centerOnScreen();
+ primaryStage.setOnCloseRequest(event -> LOG.debug("Application shutdown initiated"));
+
+ context = new AnnotationConfigApplicationContext(CreateNewEmployeeApplication.class);
+ final var fxmlLoader = context.getBean(SpringFXMLLoader.class);
+ primaryStage.setScene(
+ new Scene(
+ (Parent)
+ fxmlLoader.load(
+ getClass()
+ .getResourceAsStream(
+ "/fxml/createNewEmployee.fxml"))));
+
+ // show application
+ primaryStage.show();
+ primaryStage.toFront();
+ LOG.debug("Application startup complete");
+ }
+
+ @Override
+ public void stop() {
+ LOG.debug("Stopping application");
+ context.close();
+ }
+}
diff --git a/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/employee/CreateNewEmployeeControllerTest.java b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/employee/CreateNewEmployeeControllerTest.java
new file mode 100644
index 0000000..eb1a728
--- /dev/null
+++ b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/employee/CreateNewEmployeeControllerTest.java
@@ -0,0 +1,85 @@
+package at.ac.tuwien.sepm.assignment.groupphase.employee;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.when;
+
+import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.service.EmployeeService;
+import at.ac.tuwien.sepm.assignment.groupphase.exception.InvalidEmployeeException;
+import at.ac.tuwien.sepm.assignment.groupphase.exception.ServiceException;
+import at.ac.tuwien.sepm.assignment.groupphase.util.Helper;
+import at.ac.tuwien.sepm.assignment.groupphase.util.HighDpiAwareApplicationTest;
+import javafx.scene.control.DialogPane;
+import javafx.scene.input.MouseButton;
+import javafx.stage.Stage;
+import org.junit.After;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+import org.testfx.api.FxToolkit;
+import org.testfx.robot.Motion;
+
+public class CreateNewEmployeeControllerTest extends HighDpiAwareApplicationTest {
+
+ private EmployeeService employeeService;
+
+ @Before
+ public void setup() throws Exception {
+ // TODO: check if testfx can be run in headless mode on Jenkins
+ FxToolkit.registerPrimaryStage();
+ FxToolkit.setupApplication(CreateNewEmployeeApplication.class);
+ employeeService = CreateNewEmployeeApplication.context.getBean(EmployeeService.class);
+ }
+
+ @After
+ public void cleanup() throws Exception {
+ FxToolkit.cleanupStages();
+ }
+
+ @Test
+ public void testClickAddValidEmployee() throws InvalidEmployeeException, ServiceException {
+
+ when(employeeService.add(any())).thenReturn(1L);
+
+ clickOn("#inputName", Motion.DIRECT, MouseButton.PRIMARY);
+ write("Name");
+ clickOn("#btnCreate", Motion.DIRECT, MouseButton.PRIMARY);
+
+ Stage alertDialog = Helper.getTopModalStage(robotContext());
+ Assert.assertNotNull(alertDialog);
+
+ DialogPane dialogPane = (DialogPane) alertDialog.getScene().getRoot();
+ Assert.assertEquals("Erfolgreich angelegt", dialogPane.getHeaderText());
+ }
+
+ @Test
+ public void testClickAddInvalidEmployee() throws InvalidEmployeeException, ServiceException {
+
+ when(employeeService.add(any())).thenThrow(InvalidEmployeeException.class);
+
+ moveTo("#inputName");
+ clickOn("#btnCreate", Motion.DIRECT, MouseButton.PRIMARY);
+
+ Stage alertDialog = Helper.getTopModalStage(robotContext());
+ Assert.assertNotNull(alertDialog);
+
+ DialogPane dialogPane = (DialogPane) alertDialog.getScene().getRoot();
+ Assert.assertEquals("Ungültige Eingabe", dialogPane.getHeaderText());
+ }
+
+ @Test
+ public void testClickAddEmployeeWithServiceException()
+ throws InvalidEmployeeException, ServiceException {
+
+ when(employeeService.add(any())).thenThrow(ServiceException.class);
+
+ clickOn("#inputName", Motion.DIRECT, MouseButton.PRIMARY);
+ write("Test");
+ clickOn("#btnCreate", Motion.DIRECT, MouseButton.PRIMARY);
+
+ Stage alertDialog = Helper.getTopModalStage(robotContext());
+ Assert.assertNotNull(alertDialog);
+
+ DialogPane dialogPane = (DialogPane) alertDialog.getScene().getRoot();
+ Assert.assertEquals("Speicherfehler", dialogPane.getHeaderText());
+ }
+}
diff --git a/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/employee/EmployeePersistenceTest.java b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/employee/EmployeePersistenceTest.java
new file mode 100644
index 0000000..f8fe0f3
--- /dev/null
+++ b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/employee/EmployeePersistenceTest.java
@@ -0,0 +1,155 @@
+package at.ac.tuwien.sepm.assignment.groupphase.employee;
+
+import static junit.framework.TestCase.fail;
+
+import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dao.EmployeeDAO;
+import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dao.EmployeeDatabaseDao;
+import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Employee;
+import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Employee.EducationLevel;
+import at.ac.tuwien.sepm.assignment.groupphase.exception.PersistenceException;
+import at.ac.tuwien.sepm.assignment.groupphase.util.JDBCConnectionManager;
+import java.nio.charset.Charset;
+import java.sql.SQLException;
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
+import java.util.List;
+import org.dbunit.IDatabaseTester;
+import org.dbunit.JdbcDatabaseTester;
+import org.dbunit.dataset.DataSetException;
+import org.dbunit.dataset.IDataSet;
+import org.dbunit.dataset.xml.FlatXmlDataSetBuilder;
+import org.dbunit.operation.DatabaseOperation;
+import org.h2.tools.RunScript;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+public class EmployeePersistenceTest {
+
+ private static final String JDBC_DRIVER = org.h2.Driver.class.getName();
+ private static final String JDBC_URL = "jdbc:h2:mem:test;DB_CLOSE_DELAY=-1";
+ private static final String USER = "";
+ private static final String PASSWORD = "";
+
+ private EmployeeDAO employeePersistence;
+
+ public EmployeePersistenceTest() throws PersistenceException {
+ employeePersistence = new EmployeeDatabaseDao(new JDBCConnectionManager(JDBC_URL));
+ }
+
+ @BeforeClass
+ public static void createSchema() throws SQLException {
+ RunScript.execute(
+ JDBC_URL,
+ USER,
+ PASSWORD,
+ "classpath:sql/database.sql",
+ Charset.forName("UTF8"),
+ false);
+ }
+
+ @Before
+ public void importDataSet() throws Exception {
+ IDataSet dataSet = readDataSet();
+ cleanlyInsert(dataSet);
+ }
+
+ private IDataSet readDataSet() throws DataSetException {
+ return new FlatXmlDataSetBuilder()
+ .build(
+ getClass()
+ .getClassLoader()
+ .getResourceAsStream("employeeServiceTestData.xml"));
+ }
+
+ private void cleanlyInsert(IDataSet dataSet) throws Exception {
+ IDatabaseTester databaseTester =
+ new JdbcDatabaseTester(JDBC_DRIVER, JDBC_URL, USER, PASSWORD);
+
+ databaseTester.setSetUpOperation(DatabaseOperation.CLEAN_INSERT);
+ databaseTester.setDataSet(dataSet);
+ databaseTester.onSetup();
+ }
+
+ @Test
+ public void testListEmployees() {
+
+ try {
+ List<Employee> employees = employeePersistence.list();
+
+ Employee empOne =
+ Employee.builder()
+ .id(1)
+ .name("Adam")
+ .birthday(
+ LocalDate.parse(
+ "10.10.2010",
+ DateTimeFormatter.ofPattern("dd.MM.yyyy")))
+ .educationLevel(EducationLevel.RS)
+ .isDriver(true)
+ .isPilot(false)
+ .build();
+
+ Employee empTwo =
+ Employee.builder()
+ .id(2)
+ .name("Max")
+ .birthday(
+ LocalDate.parse(
+ "11.11.1990",
+ DateTimeFormatter.ofPattern("dd.MM.yyyy")))
+ .educationLevel(EducationLevel.NFS)
+ .isDriver(false)
+ .isPilot(false)
+ .build();
+
+ Employee empThree =
+ Employee.builder()
+ .id(3)
+ .name("Lisa")
+ .birthday(
+ LocalDate.parse(
+ "16.10.1999",
+ DateTimeFormatter.ofPattern("dd.MM.yyyy")))
+ .educationLevel(EducationLevel.NKI)
+ .isDriver(true)
+ .isPilot(false)
+ .build();
+
+ Assert.assertTrue(employees.contains(empOne));
+ Assert.assertTrue(employees.contains(empTwo));
+ Assert.assertTrue(employees.contains(empThree));
+ Assert.assertEquals(3, employees.size());
+
+ } catch (PersistenceException e) {
+ fail();
+ }
+ }
+
+ @Test
+ public void testEmployeeListNoElement() {
+
+ try {
+ List<Employee> employees = employeePersistence.list();
+
+ Employee empOne =
+ Employee.builder()
+ .id(10)
+ .name("Adam")
+ .birthday(
+ LocalDate.parse(
+ "10.10.2010",
+ DateTimeFormatter.ofPattern("dd.MM.yyyy")))
+ .educationLevel(EducationLevel.RS)
+ .isDriver(true)
+ .isPilot(false)
+ .build();
+
+ Assert.assertFalse(employees.contains(empOne));
+
+ } catch (PersistenceException e) {
+ fail();
+ }
+ }
+}
diff --git a/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/employee/EmployeeServiceTest.java b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/employee/EmployeeServiceTest.java
new file mode 100644
index 0000000..47328b3
--- /dev/null
+++ b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/employee/EmployeeServiceTest.java
@@ -0,0 +1,68 @@
+package at.ac.tuwien.sepm.assignment.groupphase.employee;
+
+import static junit.framework.TestCase.fail;
+import static org.hamcrest.CoreMatchers.is;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dao.EmployeeDAO;
+import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dao.EmployeeDatabaseDao;
+import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Employee;
+import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Employee.EducationLevel;
+import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.service.EmployeeService;
+import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.service.EmployeeServiceImpl;
+import at.ac.tuwien.sepm.assignment.groupphase.exception.InvalidEmployeeException;
+import at.ac.tuwien.sepm.assignment.groupphase.exception.PersistenceException;
+import at.ac.tuwien.sepm.assignment.groupphase.exception.ServiceException;
+import java.time.LocalDate;
+import org.junit.Assert;
+import org.junit.Test;
+
+public class EmployeeServiceTest {
+
+ private final EmployeeDAO employeePersistence = mock(EmployeeDatabaseDao.class);
+ private final EmployeeService employeeService = new EmployeeServiceImpl(employeePersistence);
+
+ public EmployeeServiceTest() throws PersistenceException {
+ when(employeePersistence.add(any())).thenReturn(1L);
+ }
+
+ @Test
+ public void testAddValidEmployee() {
+
+ Employee employee =
+ Employee.builder()
+ .name("Testperson")
+ .birthday(LocalDate.MIN)
+ .educationLevel(EducationLevel.NA)
+ .isDriver(true)
+ .isPilot(false)
+ .build();
+
+ try {
+ Assert.assertThat(employeeService.add(employee), is(1L));
+ } catch (InvalidEmployeeException | ServiceException e) {
+ fail();
+ }
+ }
+
+ @Test(expected = InvalidEmployeeException.class)
+ public void testAddInvalidEmployee() throws InvalidEmployeeException {
+
+ Employee employee =
+ Employee.builder()
+ .name("")
+ .birthday(LocalDate.MIN)
+ .educationLevel(EducationLevel.NA)
+ .isDriver(true)
+ .isPilot(false)
+ .build();
+
+ try {
+ employeeService.add(employee);
+ } catch (ServiceException e) {
+ fail();
+ }
+ }
+}
diff --git a/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/employee/EmployeeServiceTestConfiguration.java b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/employee/EmployeeServiceTestConfiguration.java
new file mode 100644
index 0000000..3668ef4
--- /dev/null
+++ b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/employee/EmployeeServiceTestConfiguration.java
@@ -0,0 +1,19 @@
+package at.ac.tuwien.sepm.assignment.groupphase.employee;
+
+import static org.mockito.Mockito.mock;
+
+import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.service.EmployeeService;
+import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.service.EmployeeServiceImpl;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Primary;
+
+@Configuration
+public class EmployeeServiceTestConfiguration {
+
+ @Bean
+ @Primary
+ public EmployeeService employeeService() {
+ return mock(EmployeeServiceImpl.class);
+ }
+}
diff --git a/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/operation/OperationPersistenceTest.java b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/operation/OperationPersistenceTest.java
new file mode 100644
index 0000000..be612d0
--- /dev/null
+++ b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/operation/OperationPersistenceTest.java
@@ -0,0 +1,109 @@
+package at.ac.tuwien.sepm.assignment.groupphase.operation;
+
+public class OperationPersistenceTest {
+
+ /*private final OperationDAO operationDAO =
+ new DBOperationDAO(new JDBCConnectionManager("jdbc:h2:mem:test;DB_CLOSE_DELAY=-1"));
+
+ @BeforeClass
+ public static void createSchema() throws SQLException {
+ RunScript.execute(
+ "jdbc:h2:mem:test;DB_CLOSE_DELAY=-1",
+ "",
+ "",
+ "classpath:sql/database.sql",
+ Charset.forName("UTF8"),
+ false);
+ }
+
+ @Test
+ public void addOperationTest() {
+ 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("Wiedner Hauptstraße 35, Wien")
+ .additionalInfo("HTU Wien")
+ .severity(Severity.B)
+ .vehicles(List.of(vehicle))
+ .build();
+ try {
+ operationDAO.add(operation);
+ } catch (PersistenceException e) {
+ fail();
+ }
+ }
+
+ /*@Test(expected = PersistenceException.class)
+ public void addFaultyOperationTest() 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("")
+ .created(Instant.now())
+ .destination("Wiedner Hauptstraße 35, Wien")
+ .additionalInfo("HTU Wien")
+ .severity(Severity.B)
+ .vehicles(List.of(vehicle))
+ .build();
+ operationDAO.add(operation);
+ }*/
+ /*
+
+ @Test(expected = PersistenceException.class)
+ public void addFaultyOperation1Test() throws PersistenceException {
+ operationDAO.add(null);
+ }
+
+ @Test(expected = PersistenceException.class)
+ public void addFaultyOperation2Test() 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(List.of(vehicle))
+ .build();
+ operationDAO.add(operation);
+ }
+
+ @Test(expected = PersistenceException.class)
+ public void addConnectionTest() throws PersistenceException {
+ operationDAO.connectVehicleToOperation(-1, 0);
+ }
+
+ // TODO: ADD CONNECTION TESTS
+ // KOMMT ID ZURÜCK?*/
+}
diff --git a/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/operation/OperationServiceComponentTest.java b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/operation/OperationServiceComponentTest.java
new file mode 100644
index 0000000..286ee07
--- /dev/null
+++ b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/operation/OperationServiceComponentTest.java
@@ -0,0 +1,130 @@
+package at.ac.tuwien.sepm.assignment.groupphase.operation;
+
+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);
+
+ @Test
+ public void addOperationTest() {
+ 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("Wiedner Hauptstraße 35, Wien")
+ .additionalInfo("HTU Wien")
+ .severity(Severity.B)
+ .vehicles(List.of(vehicle))
+ .build();
+ try {
+ // TODO: OPERATION DOES NOT WORK
+ Assert.assertThat(operationService.add(operation), is(1L));
+ } catch (InvalidOperationException | ServiceException e) {
+ fail();
+ }
+ }
+
+ @Test(expected = InvalidOperationException.class)
+ public void addFaultyOperationTest() throws InvalidOperationException {
+ Vehicle vehicle =
+ Vehicle.builder()
+ .status(Vehicle.Status.FREI_FUNK)
+ .constructionType(ConstructionType.HOCHDACH)
+ .name("BKTW_123")
+ .hasNef(true)
+ .type(VehicleType.BKTW)
+ .build();
+ Vehicle vehicle1 =
+ Vehicle.builder()
+ .status(Vehicle.Status.ABGEMELDET)
+ .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("Wiedner Hauptstraße 35, Wien")
+ .additionalInfo("HTU Wien")
+ .severity(Severity.B)
+ .vehicles(List.of(vehicle, vehicle1))
+ .build();
+ try {
+ Assert.assertThat(operationService.add(operation), is(1L));
+ } catch (ServiceException e) {
+ fail();
+ }
+ }
+
+ @Test(expected = InvalidOperationException.class)
+ public void addFaultyOperation2Test() throws InvalidOperationException {
+ Operation operation =
+ Operation.builder()
+ .status(Status.ACTIVE)
+ .opCode("ALP-95E7")
+ .created(Instant.now())
+ .destination("Wiedner Hauptstraße 35, Wien")
+ .additionalInfo("HTU Wien")
+ .severity(Severity.B)
+ .vehicles(List.of())
+ .build();
+ try {
+ Assert.assertThat(operationService.add(operation), is(1L));
+ } catch (ServiceException e) {
+ e.printStackTrace();
+ }
+ }
+
+ @Test(expected = InvalidOperationException.class)
+ public void addFaultyOperation3Test() throws InvalidOperationException {
+ Operation operation =
+ Operation.builder()
+ .status(Status.ACTIVE)
+ .opCode("ALP-95E7")
+ .created(Instant.now())
+ .destination("")
+ .additionalInfo("HTU Wien")
+ .severity(Severity.B)
+ .vehicles(List.of())
+ .build();
+ try {
+ Assert.assertThat(operationService.add(operation), is(1L));
+ } catch (ServiceException e) {
+ e.printStackTrace();
+ }
+ }
+
+ @Test(expected = InvalidOperationException.class)
+ public void addFaultyOperation4Test() throws InvalidOperationException {
+ Operation operation =
+ Operation.builder()
+ .status(Status.ACTIVE)
+ .opCode("")
+ .created(Instant.now())
+ .destination("Römergasse 7, 2500 Baden")
+ .additionalInfo("HTU Wien")
+ .severity(Severity.B)
+ .vehicles(List.of())
+ .build();
+ try {
+ Assert.assertThat(operationService.add(operation), is(1L));
+ } catch (ServiceException e) {
+ e.printStackTrace();
+ }
+ }*/
+}
diff --git a/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/operation/OperationServiceUnitTest.java b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/operation/OperationServiceUnitTest.java
new file mode 100644
index 0000000..fc10553
--- /dev/null
+++ b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/operation/OperationServiceUnitTest.java
@@ -0,0 +1,155 @@
+package at.ac.tuwien.sepm.assignment.groupphase.operation;
+
+import static junit.framework.TestCase.fail;
+import static org.hamcrest.CoreMatchers.is;
+import static org.mockito.ArgumentMatchers.any;
+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.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.einsatzverwaltung.dto.Vehicle.ConstructionType;
+import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Vehicle.VehicleType;
+import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.service.OperationService;
+import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.service.OperationServiceImpl;
+import at.ac.tuwien.sepm.assignment.groupphase.exception.InvalidOperationException;
+import at.ac.tuwien.sepm.assignment.groupphase.exception.PersistenceException;
+import at.ac.tuwien.sepm.assignment.groupphase.exception.ServiceException;
+import java.time.Instant;
+import java.util.List;
+import org.junit.Assert;
+import org.junit.Test;
+
+public class OperationServiceUnitTest {
+ private final OperationDAO operationDAO = mock(OperationDAO.class);
+ private final OperationService operationService = new OperationServiceImpl(operationDAO);
+
+ @Test
+ public void addOperationTest() {
+ try {
+ when(operationDAO.add(any())).thenReturn(1L);
+ } catch (PersistenceException e) {
+ fail();
+ }
+ 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("Wiedner Hauptstraße 35, Wien")
+ .additionalInfo("HTU Wien")
+ .severity(Severity.B)
+ .vehicles(List.of(vehicle))
+ .build();
+ try {
+ Assert.assertThat(operationService.add(operation), is(1L));
+ } catch (InvalidOperationException | ServiceException e) {
+ fail();
+ }
+ }
+
+ @Test(expected = InvalidOperationException.class)
+ public void addFaultyOperationTest() throws InvalidOperationException {
+ Vehicle vehicle =
+ Vehicle.builder()
+ .status(Vehicle.Status.FREI_FUNK)
+ .constructionType(ConstructionType.HOCHDACH)
+ .name("BKTW_123")
+ .hasNef(true)
+ .type(VehicleType.BKTW)
+ .build();
+ Vehicle vehicle1 =
+ Vehicle.builder()
+ .status(Vehicle.Status.ABGEMELDET)
+ .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("Wiedner Hauptstraße 35, Wien")
+ .additionalInfo("HTU Wien")
+ .severity(Severity.B)
+ .vehicles(List.of(vehicle, vehicle1))
+ .build();
+ try {
+ Assert.assertThat(operationService.add(operation), is(1L));
+ } catch (ServiceException e) {
+ fail();
+ }
+ }
+
+ @Test(expected = InvalidOperationException.class)
+ public void addFaultyOperation2Test() throws InvalidOperationException {
+ Operation operation =
+ Operation.builder()
+ .status(Status.ACTIVE)
+ .opCode("ALP-95E7")
+ .created(Instant.now())
+ .destination("Wiedner Hauptstraße 35, Wien")
+ .additionalInfo("HTU Wien")
+ .severity(Severity.B)
+ .vehicles(List.of())
+ .build();
+ try {
+ Assert.assertThat(operationService.add(operation), is(1L));
+ } catch (ServiceException e) {
+ e.printStackTrace();
+ }
+ }
+
+ @Test(expected = InvalidOperationException.class)
+ public void addFaultyOperation3Test() throws InvalidOperationException {
+ Operation operation =
+ Operation.builder()
+ .status(Status.ACTIVE)
+ .opCode("ALP-95E7")
+ .created(Instant.now())
+ .destination("")
+ .additionalInfo("HTU Wien")
+ .severity(Severity.B)
+ .vehicles(List.of())
+ .build();
+ try {
+ Assert.assertThat(operationService.add(operation), is(1L));
+ } catch (ServiceException e) {
+ e.printStackTrace();
+ }
+ }
+
+ @Test(expected = InvalidOperationException.class)
+ public void addFaultyOperation4Test() throws InvalidOperationException {
+ Operation operation =
+ Operation.builder()
+ .status(Status.ACTIVE)
+ .opCode("")
+ .created(Instant.now())
+ .destination("Römergasse 7, 2500 Baden")
+ .additionalInfo("HTU Wien")
+ .severity(Severity.B)
+ .vehicles(List.of())
+ .build();
+ try {
+ Assert.assertThat(operationService.add(operation), is(1L));
+ } catch (ServiceException e) {
+ e.printStackTrace();
+ }
+ }
+}
diff --git a/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/util/Helper.java b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/util/Helper.java
new file mode 100644
index 0000000..b808206
--- /dev/null
+++ b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/util/Helper.java
@@ -0,0 +1,28 @@
+package at.ac.tuwien.sepm.assignment.groupphase.util;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import javafx.stage.Modality;
+import javafx.stage.Stage;
+import javafx.stage.Window;
+import org.testfx.api.FxRobotContext;
+
+public class Helper {
+
+ public static Stage getTopModalStage(FxRobotContext robotContext) {
+
+ List<Window> allWindows = new ArrayList<>(robotContext.getWindowFinder().listWindows());
+ Collections.reverse(allWindows);
+ return (Stage)
+ allWindows
+ .stream()
+ .filter(window -> window instanceof Stage)
+ .filter(
+ window ->
+ ((Stage) window).getModality()
+ == Modality.APPLICATION_MODAL)
+ .findFirst()
+ .orElse(null);
+ }
+}
diff --git a/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/util/HighDpiAwareApplicationTest.java b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/util/HighDpiAwareApplicationTest.java
new file mode 100644
index 0000000..c9816a1
--- /dev/null
+++ b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/util/HighDpiAwareApplicationTest.java
@@ -0,0 +1,24 @@
+package at.ac.tuwien.sepm.assignment.groupphase.util;
+
+import javafx.geometry.Bounds;
+import javafx.scene.Node;
+import org.testfx.api.FxRobotContext;
+import org.testfx.framework.junit.ApplicationTest;
+import org.testfx.service.locator.impl.BoundsLocatorImpl;
+import org.testfx.service.locator.impl.PointLocatorImpl;
+
+public class HighDpiAwareApplicationTest extends ApplicationTest {
+
+ public HighDpiAwareApplicationTest() {
+ FxRobotContext context = robotContext();
+ context.setBoundsLocator(
+ new BoundsLocatorImpl() {
+ @Override
+ public Bounds boundsOnScreenFor(Node node) {
+ Bounds bounds = super.boundsOnScreenFor(node);
+ return ScaledBounds.wrap(bounds);
+ }
+ });
+ robotContext().setPointLocator(new PointLocatorImpl(context.getBoundsLocator()));
+ }
+}
diff --git a/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/util/ScaledBounds.java b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/util/ScaledBounds.java
new file mode 100644
index 0000000..02c15c4
--- /dev/null
+++ b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/util/ScaledBounds.java
@@ -0,0 +1,34 @@
+package at.ac.tuwien.sepm.assignment.groupphase.util;
+
+import java.awt.GraphicsEnvironment;
+import javafx.geometry.BoundingBox;
+import javafx.geometry.Bounds;
+
+public class ScaledBounds extends BoundingBox {
+
+ private static final double scale;
+
+ static {
+ scale =
+ 1
+ / GraphicsEnvironment.getLocalGraphicsEnvironment()
+ .getDefaultScreenDevice()
+ .getDefaultConfiguration()
+ .getDefaultTransform()
+ .getScaleX();
+ }
+
+ public static ScaledBounds wrap(Bounds bounds) {
+ return new ScaledBounds(bounds);
+ }
+
+ private ScaledBounds(Bounds wrapped) {
+ super(
+ wrapped.getMinX() * scale,
+ wrapped.getMinY() * scale,
+ wrapped.getMinZ() * scale,
+ wrapped.getWidth() * scale,
+ wrapped.getHeight() * scale,
+ wrapped.getDepth());
+ }
+}
diff --git a/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/vehicle/CarAddTestService.java b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/vehicle/CarAddTestService.java
new file mode 100644
index 0000000..de7a26a
--- /dev/null
+++ b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/vehicle/CarAddTestService.java
@@ -0,0 +1,283 @@
+package at.ac.tuwien.sepm.assignment.groupphase.vehicle;
+
+import static junit.framework.TestCase.fail;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dao.VehicleDAO;
+import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dao.VehicleDatabaseDao;
+import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Vehicle;
+import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.service.VehicleService;
+import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.service.VehicleServiceImpl;
+import at.ac.tuwien.sepm.assignment.groupphase.exception.InvalidVehicleException;
+import at.ac.tuwien.sepm.assignment.groupphase.exception.PersistenceException;
+import at.ac.tuwien.sepm.assignment.groupphase.exception.ServiceException;
+import org.junit.Test;
+
+public class CarAddTestService {
+ private final VehicleDAO vehicleP = mock(VehicleDatabaseDao.class);
+ private final VehicleService vehicleService = new VehicleServiceImpl(vehicleP);
+
+ public CarAddTestService() throws PersistenceException {
+ when(vehicleP.add(any())).thenReturn(1L);
+ }
+
+ @Test
+ public void testValidVehicleH() {
+ Vehicle vehicle =
+ Vehicle.builder()
+ .constructionType(Vehicle.ConstructionType.HOCHDACH)
+ .type(Vehicle.VehicleType.RTW)
+ .hasNef(true)
+ .status(Vehicle.Status.ABGEMELDET)
+ .name("")
+ .build();
+ try {
+ vehicleService.add(vehicle);
+ } catch (InvalidVehicleException | ServiceException e) {
+ fail();
+ }
+ vehicle =
+ Vehicle.builder()
+ .constructionType(Vehicle.ConstructionType.HOCHDACH)
+ .type(Vehicle.VehicleType.KTW)
+ .hasNef(true)
+ .status(Vehicle.Status.ABGEMELDET)
+ .name("")
+ .build();
+ try {
+ vehicleService.add(vehicle);
+ } catch (InvalidVehicleException | ServiceException e) {
+ fail();
+ }
+ vehicle =
+ Vehicle.builder()
+ .constructionType(Vehicle.ConstructionType.HOCHDACH)
+ .type(Vehicle.VehicleType.KTW_B)
+ .hasNef(true)
+ .status(Vehicle.Status.ABGEMELDET)
+ .name("")
+ .build();
+ try {
+ vehicleService.add(vehicle);
+ } catch (InvalidVehicleException | ServiceException e) {
+ fail();
+ }
+ vehicle =
+ Vehicle.builder()
+ .constructionType(Vehicle.ConstructionType.HOCHDACH)
+ .type(Vehicle.VehicleType.BKTW)
+ .hasNef(true)
+ .status(Vehicle.Status.ABGEMELDET)
+ .name("")
+ .build();
+ try {
+ vehicleService.add(vehicle);
+ } catch (InvalidVehicleException | ServiceException e) {
+ fail();
+ }
+ }
+
+ @Test
+ public void testValidVehicleM() {
+ Vehicle vehicle =
+ Vehicle.builder()
+ .constructionType(Vehicle.ConstructionType.MITTELHOCHDACH)
+ .type(Vehicle.VehicleType.KTW)
+ .hasNef(true)
+ .status(Vehicle.Status.ABGEMELDET)
+ .name("")
+ .build();
+ try {
+ vehicleService.add(vehicle);
+ } catch (InvalidVehicleException | ServiceException e) {
+ fail();
+ }
+ vehicle =
+ Vehicle.builder()
+ .constructionType(Vehicle.ConstructionType.MITTELHOCHDACH)
+ .type(Vehicle.VehicleType.KTW_B)
+ .hasNef(true)
+ .status(Vehicle.Status.ABGEMELDET)
+ .name("")
+ .build();
+ try {
+ vehicleService.add(vehicle);
+ } catch (InvalidVehicleException | ServiceException e) {
+ fail();
+ }
+ vehicle =
+ Vehicle.builder()
+ .constructionType(Vehicle.ConstructionType.MITTELHOCHDACH)
+ .type(Vehicle.VehicleType.BKTW)
+ .hasNef(true)
+ .status(Vehicle.Status.ABGEMELDET)
+ .name("")
+ .build();
+ try {
+ vehicleService.add(vehicle);
+ } catch (InvalidVehicleException | ServiceException e) {
+ fail();
+ }
+ }
+
+ @Test
+ public void testValidVehicleN() {
+ Vehicle vehicle =
+ Vehicle.builder()
+ .constructionType(Vehicle.ConstructionType.NORMAL)
+ .type(Vehicle.VehicleType.BKTW)
+ .hasNef(true)
+ .status(Vehicle.Status.ABGEMELDET)
+ .name("")
+ .build();
+ try {
+ vehicleService.add(vehicle);
+ } catch (InvalidVehicleException | ServiceException e) {
+ fail();
+ }
+ vehicle =
+ Vehicle.builder()
+ .constructionType(Vehicle.ConstructionType.NORMAL)
+ .type(Vehicle.VehicleType.NEF)
+ .hasNef(true)
+ .status(Vehicle.Status.ABGEMELDET)
+ .name("")
+ .build();
+ try {
+ vehicleService.add(vehicle);
+ } catch (InvalidVehicleException | ServiceException e) {
+ fail();
+ }
+ vehicle =
+ Vehicle.builder()
+ .constructionType(Vehicle.ConstructionType.NORMAL)
+ .type(Vehicle.VehicleType.NAH)
+ .hasNef(true)
+ .status(Vehicle.Status.ABGEMELDET)
+ .name("")
+ .build();
+ try {
+ vehicleService.add(vehicle);
+ } catch (InvalidVehicleException | ServiceException e) {
+ fail();
+ }
+ }
+
+ @Test(expected = InvalidVehicleException.class)
+ public void testInvalidVehicleH() throws InvalidVehicleException {
+ Vehicle vehicle =
+ Vehicle.builder()
+ .constructionType(Vehicle.ConstructionType.HOCHDACH)
+ .type(Vehicle.VehicleType.NEF)
+ .hasNef(true)
+ .status(Vehicle.Status.ABGEMELDET)
+ .name("")
+ .build();
+ try {
+ vehicleService.add(vehicle);
+ } catch (ServiceException e) {
+ fail();
+ }
+ vehicle =
+ Vehicle.builder()
+ .constructionType(Vehicle.ConstructionType.HOCHDACH)
+ .type(Vehicle.VehicleType.NAH)
+ .hasNef(true)
+ .status(Vehicle.Status.ABGEMELDET)
+ .name("")
+ .build();
+ try {
+ vehicleService.add(vehicle);
+ } catch (ServiceException e) {
+ fail();
+ }
+ }
+
+ @Test(expected = InvalidVehicleException.class)
+ public void testInvalidVehicleM() throws InvalidVehicleException {
+ Vehicle vehicle =
+ Vehicle.builder()
+ .constructionType(Vehicle.ConstructionType.MITTELHOCHDACH)
+ .type(Vehicle.VehicleType.NEF)
+ .hasNef(true)
+ .status(Vehicle.Status.ABGEMELDET)
+ .name("")
+ .build();
+ try {
+ vehicleService.add(vehicle);
+ } catch (ServiceException e) {
+ fail();
+ }
+ vehicle =
+ Vehicle.builder()
+ .constructionType(Vehicle.ConstructionType.MITTELHOCHDACH)
+ .type(Vehicle.VehicleType.NAH)
+ .hasNef(true)
+ .status(Vehicle.Status.ABGEMELDET)
+ .name("")
+ .build();
+ try {
+ vehicleService.add(vehicle);
+ } catch (ServiceException e) {
+ fail();
+ }
+ vehicle =
+ Vehicle.builder()
+ .constructionType(Vehicle.ConstructionType.MITTELHOCHDACH)
+ .type(Vehicle.VehicleType.RTW)
+ .hasNef(true)
+ .status(Vehicle.Status.ABGEMELDET)
+ .name("")
+ .build();
+ try {
+ vehicleService.add(vehicle);
+ } catch (ServiceException e) {
+ fail();
+ }
+ }
+
+ @Test(expected = InvalidVehicleException.class)
+ public void testInvalidVehicleN() throws InvalidVehicleException {
+ Vehicle vehicle =
+ Vehicle.builder()
+ .constructionType(Vehicle.ConstructionType.NORMAL)
+ .type(Vehicle.VehicleType.RTW)
+ .hasNef(true)
+ .status(Vehicle.Status.ABGEMELDET)
+ .name("")
+ .build();
+ try {
+ vehicleService.add(vehicle);
+ } catch (ServiceException e) {
+ fail();
+ }
+ vehicle =
+ Vehicle.builder()
+ .constructionType(Vehicle.ConstructionType.NORMAL)
+ .type(Vehicle.VehicleType.KTW_B)
+ .hasNef(true)
+ .status(Vehicle.Status.ABGEMELDET)
+ .name("")
+ .build();
+ try {
+ vehicleService.add(vehicle);
+ } catch (ServiceException e) {
+ fail();
+ }
+ vehicle =
+ Vehicle.builder()
+ .constructionType(Vehicle.ConstructionType.NORMAL)
+ .type(Vehicle.VehicleType.KTW)
+ .hasNef(true)
+ .status(Vehicle.Status.ABGEMELDET)
+ .name("")
+ .build();
+ try {
+ vehicleService.add(vehicle);
+ } catch (ServiceException e) {
+ fail();
+ }
+ }
+}
diff --git a/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/vehicle/CreateNewVehicleApplication.java b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/vehicle/CreateNewVehicleApplication.java
new file mode 100644
index 0000000..dcd88ec
--- /dev/null
+++ b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/vehicle/CreateNewVehicleApplication.java
@@ -0,0 +1,51 @@
+package at.ac.tuwien.sepm.assignment.groupphase.vehicle;
+
+import at.ac.tuwien.sepm.assignment.groupphase.util.SpringFXMLLoader;
+import java.lang.invoke.MethodHandles;
+import javafx.application.Application;
+import javafx.scene.Parent;
+import javafx.scene.Scene;
+import javafx.stage.Stage;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.context.annotation.AnnotationConfigApplicationContext;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.stereotype.Component;
+
+@Component
+@ComponentScan("at.ac.tuwien.sepm.assignment.groupphase")
+public class CreateNewVehicleApplication extends Application {
+
+ private static final Logger LOG = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
+
+ public static AnnotationConfigApplicationContext context;
+
+ @Override
+ public void start(Stage primaryStage) throws Exception {
+ // setup application
+ primaryStage.setTitle("Fahrzeug anlegen");
+ primaryStage.setWidth(1366);
+ primaryStage.setHeight(768);
+ primaryStage.centerOnScreen();
+ primaryStage.setOnCloseRequest(event -> LOG.debug("Application shutdown initiated"));
+
+ context = new AnnotationConfigApplicationContext(CreateNewVehicleApplication.class);
+ final var fxmlLoader = context.getBean(SpringFXMLLoader.class);
+ primaryStage.setScene(
+ new Scene(
+ (Parent)
+ fxmlLoader.load(
+ getClass().getResourceAsStream("/fxml/createCar.fxml"))));
+
+ // show application
+ primaryStage.show();
+ primaryStage.toFront();
+ LOG.debug("Application startup complete");
+ }
+
+ @Override
+ public void stop() {
+ LOG.debug("Stopping application");
+ context.close();
+ }
+}
diff --git a/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/vehicle/CreateNewVehicleControllerTest.java b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/vehicle/CreateNewVehicleControllerTest.java
new file mode 100644
index 0000000..866ed74
--- /dev/null
+++ b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/vehicle/CreateNewVehicleControllerTest.java
@@ -0,0 +1,79 @@
+package at.ac.tuwien.sepm.assignment.groupphase.vehicle;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.when;
+
+import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.service.VehicleService;
+import at.ac.tuwien.sepm.assignment.groupphase.exception.InvalidVehicleException;
+import at.ac.tuwien.sepm.assignment.groupphase.exception.ServiceException;
+import at.ac.tuwien.sepm.assignment.groupphase.util.Helper;
+import at.ac.tuwien.sepm.assignment.groupphase.util.HighDpiAwareApplicationTest;
+import javafx.scene.control.DialogPane;
+import javafx.scene.input.MouseButton;
+import javafx.stage.Stage;
+import org.junit.After;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+import org.testfx.api.FxToolkit;
+import org.testfx.robot.Motion;
+
+public class CreateNewVehicleControllerTest extends HighDpiAwareApplicationTest {
+
+ private VehicleService vehicleService;
+
+ @Before
+ public void setup() throws Exception {
+ // TODO: check if testfx can be run in headless mode on Jenkins
+ FxToolkit.registerPrimaryStage();
+ FxToolkit.setupApplication(CreateNewVehicleApplication.class);
+ vehicleService = CreateNewVehicleApplication.context.getBean(VehicleService.class);
+ }
+
+ @After
+ public void cleanup() throws Exception {
+ FxToolkit.cleanupStages();
+ }
+
+ @Test
+ public void testClickAddValidVehicle() throws ServiceException, InvalidVehicleException {
+
+ when(vehicleService.add(any())).thenReturn(1L);
+
+ clickOn("#btn_create", Motion.DIRECT, MouseButton.PRIMARY);
+
+ Stage alertDialog = Helper.getTopModalStage(robotContext());
+ Assert.assertNotNull(alertDialog);
+
+ DialogPane dialogPane = (DialogPane) alertDialog.getScene().getRoot();
+ Assert.assertEquals("Speichern Erfolgreich", dialogPane.getHeaderText());
+ }
+
+ @Test
+ public void testClickInvalidVehicleEx() throws ServiceException, InvalidVehicleException {
+
+ when(vehicleService.add(any())).thenThrow(InvalidVehicleException.class);
+
+ clickOn("#btn_create", Motion.DIRECT, MouseButton.PRIMARY);
+
+ Stage alertDialog = Helper.getTopModalStage(robotContext());
+ Assert.assertNotNull(alertDialog);
+
+ DialogPane dialogPane = (DialogPane) alertDialog.getScene().getRoot();
+ Assert.assertEquals("Ungültige Eingabe", dialogPane.getHeaderText());
+ }
+
+ @Test
+ public void testClickInvalidServiceEx() throws ServiceException, InvalidVehicleException {
+
+ when(vehicleService.add(any())).thenThrow(ServiceException.class);
+
+ clickOn("#btn_create", Motion.DIRECT, MouseButton.PRIMARY);
+
+ Stage alertDialog = Helper.getTopModalStage(robotContext());
+ Assert.assertNotNull(alertDialog);
+
+ DialogPane dialogPane = (DialogPane) alertDialog.getScene().getRoot();
+ Assert.assertEquals("Fehler", dialogPane.getHeaderText());
+ }
+}
diff --git a/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/vehicle/VehicleServiceTestConfiguration.java b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/vehicle/VehicleServiceTestConfiguration.java
new file mode 100644
index 0000000..ccd1e5d
--- /dev/null
+++ b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/vehicle/VehicleServiceTestConfiguration.java
@@ -0,0 +1,19 @@
+package at.ac.tuwien.sepm.assignment.groupphase.vehicle;
+
+import static org.mockito.Mockito.mock;
+
+import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.service.VehicleService;
+import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.service.VehicleServiceImpl;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Primary;
+
+@Configuration
+public class VehicleServiceTestConfiguration {
+
+ @Bean
+ @Primary
+ public VehicleService vehicleService() {
+ return mock(VehicleServiceImpl.class);
+ }
+}