From 21716ce4c9f7c144d793047973b31b1698e0eaf5 Mon Sep 17 00:00:00 2001
From: Dominic Rogetzer <e1627756@student.tuwien.ac.at>
Date: Tue, 1 May 2018 17:07:05 +0200
Subject: add unit tests for employeeService, format code in
 EmployeeServiceImpl

---
 .../groupphase/employee/EmployeeServiceTest.java   | 67 ++++++++++++++++++++++
 1 file changed, 67 insertions(+)
 create mode 100644 src/test/java/at/ac/tuwien/sepm/assignment/groupphase/employee/EmployeeServiceTest.java

(limited to 'src/test/java/at/ac/tuwien')

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..ac73c9a
--- /dev/null
+++ b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/employee/EmployeeServiceTest.java
@@ -0,0 +1,67 @@
+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 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 | PersistenceException 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 (PersistenceException e) {
+            fail();
+        }
+    }
+}
-- 
cgit v1.2.3-70-g09d2


From 371a5e6730414cf9a5e981ea4e5ab59a4bba65c0 Mon Sep 17 00:00:00 2001
From: Dominic Rogetzer <e1627756@student.tuwien.ac.at>
Date: Tue, 1 May 2018 22:58:12 +0200
Subject: add GUI-tests

---
 .../employee/CreateNewEmployeeApplicationTest.java |  59 +++++++++++
 .../employee/CreateNewEmployeeControllerTest.java  | 117 +++++++++++++++++++++
 .../employee/EmployeeServiceTestConfiguration.java |  19 ++++
 3 files changed, 195 insertions(+)
 create mode 100644 src/test/java/at/ac/tuwien/sepm/assignment/groupphase/employee/CreateNewEmployeeApplicationTest.java
 create mode 100644 src/test/java/at/ac/tuwien/sepm/assignment/groupphase/employee/CreateNewEmployeeControllerTest.java
 create mode 100644 src/test/java/at/ac/tuwien/sepm/assignment/groupphase/employee/EmployeeServiceTestConfiguration.java

(limited to 'src/test/java/at/ac/tuwien')

diff --git a/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/employee/CreateNewEmployeeApplicationTest.java b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/employee/CreateNewEmployeeApplicationTest.java
new file mode 100644
index 0000000..b7129e2
--- /dev/null
+++ b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/employee/CreateNewEmployeeApplicationTest.java
@@ -0,0 +1,59 @@
+package at.ac.tuwien.sepm.assignment.groupphase.employee;
+
+import at.ac.tuwien.sepm.assignment.groupphase.application.MainApplication;
+import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.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 CreateNewEmployeeApplicationTest 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(CreateNewEmployeeApplicationTest.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");
+    }
+
+    public static void main(String[] args) {
+        LOG.debug("Application starting with arguments={}", (Object) args);
+        Application.launch(MainApplication.class, args);
+    }
+
+    @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..58f1394
--- /dev/null
+++ b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/employee/CreateNewEmployeeControllerTest.java
@@ -0,0 +1,117 @@
+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.PersistenceException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import javafx.scene.control.DialogPane;
+import javafx.scene.input.MouseButton;
+import javafx.stage.Modality;
+import javafx.stage.Stage;
+import javafx.stage.Window;
+import org.junit.After;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+import org.testfx.api.FxToolkit;
+import org.testfx.framework.junit.ApplicationTest;
+import org.testfx.robot.Motion;
+
+public class CreateNewEmployeeControllerTest extends ApplicationTest {
+
+    @Before
+    public void setup() throws Exception {
+        /*System.setProperty("testfx.robot", "glass");
+        System.setProperty("testfx.headless", "true");
+        System.setProperty("prism.order", "sw");
+        System.setProperty("prism.text", "t2k");
+        System.setProperty("java.awt.headless", "true");*/
+
+        // ATTENTION: testfx seems to not support high dpi monitors!
+        // TODO: check if testfx can be run in headless mode on Jenkins
+
+        FxToolkit.registerPrimaryStage();
+        FxToolkit.setupApplication(CreateNewEmployeeApplicationTest.class);
+    }
+
+    @After
+    public void cleanup() throws Exception {
+        FxToolkit.cleanupStages();
+    }
+
+    @Test
+    public void testClickAddValidEmployee() throws PersistenceException, InvalidEmployeeException {
+
+        EmployeeService employeeService =
+                CreateNewEmployeeApplicationTest.context.getBean(EmployeeService.class);
+        when(employeeService.add(any())).thenReturn(1L);
+
+        clickOn("#inputName", Motion.DIRECT, MouseButton.PRIMARY);
+        write("Name");
+        clickOn("#btnCreate", Motion.DIRECT, MouseButton.PRIMARY);
+
+        Stage alertDialog = getTopModalStage();
+        Assert.assertNotNull(alertDialog);
+
+        DialogPane dialogPane = (DialogPane) alertDialog.getScene().getRoot();
+        Assert.assertEquals("Erfolgreich angelegt", dialogPane.getHeaderText());
+    }
+
+    @Test
+    public void testClickAddInvalidEmployee()
+            throws PersistenceException, InvalidEmployeeException {
+
+        EmployeeService employeeService =
+                CreateNewEmployeeApplicationTest.context.getBean(EmployeeService.class);
+        when(employeeService.add(any())).thenThrow(InvalidEmployeeException.class);
+
+        moveTo("#inputName");
+        clickOn("#btnCreate", Motion.DIRECT, MouseButton.PRIMARY);
+
+        Stage alertDialog = getTopModalStage();
+        Assert.assertNotNull(alertDialog);
+
+        DialogPane dialogPane = (DialogPane) alertDialog.getScene().getRoot();
+        Assert.assertEquals("Ungültige Eingabe", dialogPane.getHeaderText());
+    }
+
+    @Test
+    public void testClickAddEmployeeWithPersistenceException()
+            throws PersistenceException, InvalidEmployeeException {
+
+        EmployeeService employeeService =
+                CreateNewEmployeeApplicationTest.context.getBean(EmployeeService.class);
+        when(employeeService.add(any())).thenThrow(PersistenceException.class);
+
+        clickOn("#inputName", Motion.DIRECT, MouseButton.PRIMARY);
+        write("Test");
+        clickOn("#btnCreate", Motion.DIRECT, MouseButton.PRIMARY);
+
+        Stage alertDialog = getTopModalStage();
+        Assert.assertNotNull(alertDialog);
+
+        DialogPane dialogPane = (DialogPane) alertDialog.getScene().getRoot();
+        Assert.assertEquals("Speicherfehler", dialogPane.getHeaderText());
+    }
+
+    private Stage getTopModalStage() {
+
+        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/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);
+    }
+}
-- 
cgit v1.2.3-70-g09d2


From 047d7c9ec72db55f059f24e71df18bbc340b85a0 Mon Sep 17 00:00:00 2001
From: Dominic Rogetzer <e1627756@student.tuwien.ac.at>
Date: Wed, 2 May 2018 17:34:31 +0200
Subject: Add support for high-DPI aware GUI-tests
 (HighDpiAwareApplicationTest)

---
 .../employee/CreateNewEmployeeControllerTest.java  |  4 +--
 .../util/HighDpiAwareApplicationTest.java          | 23 +++++++++++++++
 .../assignment/groupphase/util/ScaledBounds.java   | 33 ++++++++++++++++++++++
 3 files changed, 58 insertions(+), 2 deletions(-)
 create mode 100644 src/test/java/at/ac/tuwien/sepm/assignment/groupphase/util/HighDpiAwareApplicationTest.java
 create mode 100644 src/test/java/at/ac/tuwien/sepm/assignment/groupphase/util/ScaledBounds.java

(limited to 'src/test/java/at/ac/tuwien')

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
index 58f1394..53dc215 100644
--- 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
@@ -3,6 +3,7 @@ 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.util.HighDpiAwareApplicationTest;
 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.PersistenceException;
@@ -19,10 +20,9 @@ import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
 import org.testfx.api.FxToolkit;
-import org.testfx.framework.junit.ApplicationTest;
 import org.testfx.robot.Motion;
 
-public class CreateNewEmployeeControllerTest extends ApplicationTest {
+public class CreateNewEmployeeControllerTest extends HighDpiAwareApplicationTest {
 
     @Before
     public void setup() throws Exception {
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..1a765d3
--- /dev/null
+++ b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/util/HighDpiAwareApplicationTest.java
@@ -0,0 +1,23 @@
+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..78578d1
--- /dev/null
+++ b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/util/ScaledBounds.java
@@ -0,0 +1,33 @@
+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());
+    }
+}
-- 
cgit v1.2.3-70-g09d2


From 89447f9858f8af41ba792e19bbdf603d670cf26e Mon Sep 17 00:00:00 2001
From: Dominic Rogetzer <e1627756@student.tuwien.ac.at>
Date: Wed, 2 May 2018 18:04:19 +0200
Subject: Remove 'test'-suffix of CreateNewEmployeeApplicationTest

---
 .../employee/CreateNewEmployeeApplication.java     | 59 ++++++++++++++++++++++
 .../employee/CreateNewEmployeeApplicationTest.java | 59 ----------------------
 2 files changed, 59 insertions(+), 59 deletions(-)
 create mode 100644 src/test/java/at/ac/tuwien/sepm/assignment/groupphase/employee/CreateNewEmployeeApplication.java
 delete mode 100644 src/test/java/at/ac/tuwien/sepm/assignment/groupphase/employee/CreateNewEmployeeApplicationTest.java

(limited to 'src/test/java/at/ac/tuwien')

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..66c7e56
--- /dev/null
+++ b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/employee/CreateNewEmployeeApplication.java
@@ -0,0 +1,59 @@
+package at.ac.tuwien.sepm.assignment.groupphase.employee;
+
+import at.ac.tuwien.sepm.assignment.groupphase.application.MainApplication;
+import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.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");
+    }
+
+    public static void main(String[] args) {
+        LOG.debug("Application starting with arguments={}", (Object) args);
+        Application.launch(MainApplication.class, args);
+    }
+
+    @Override
+    public void stop() {
+        LOG.debug("Stopping application");
+        context.close();
+    }
+}
diff --git a/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/employee/CreateNewEmployeeApplicationTest.java b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/employee/CreateNewEmployeeApplicationTest.java
deleted file mode 100644
index b7129e2..0000000
--- a/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/employee/CreateNewEmployeeApplicationTest.java
+++ /dev/null
@@ -1,59 +0,0 @@
-package at.ac.tuwien.sepm.assignment.groupphase.employee;
-
-import at.ac.tuwien.sepm.assignment.groupphase.application.MainApplication;
-import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.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 CreateNewEmployeeApplicationTest 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(CreateNewEmployeeApplicationTest.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");
-    }
-
-    public static void main(String[] args) {
-        LOG.debug("Application starting with arguments={}", (Object) args);
-        Application.launch(MainApplication.class, args);
-    }
-
-    @Override
-    public void stop() {
-        LOG.debug("Stopping application");
-        context.close();
-    }
-}
-- 
cgit v1.2.3-70-g09d2


From d710d6386351b4da9b5c98bf3c9573e47843d038 Mon Sep 17 00:00:00 2001
From: Dominic Rogetzer <e1627756@student.tuwien.ac.at>
Date: Wed, 2 May 2018 18:05:21 +0200
Subject: Remove duplicate code of initializing employeeService

---
 .../employee/CreateNewEmployeeControllerTest.java   | 21 +++++----------------
 1 file changed, 5 insertions(+), 16 deletions(-)

(limited to 'src/test/java/at/ac/tuwien')

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
index 53dc215..4a7477b 100644
--- 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
@@ -3,10 +3,10 @@ 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.util.HighDpiAwareApplicationTest;
 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.PersistenceException;
+import at.ac.tuwien.sepm.assignment.groupphase.util.HighDpiAwareApplicationTest;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
@@ -24,19 +24,14 @@ import org.testfx.robot.Motion;
 
 public class CreateNewEmployeeControllerTest extends HighDpiAwareApplicationTest {
 
+    private EmployeeService employeeService;
+
     @Before
     public void setup() throws Exception {
-        /*System.setProperty("testfx.robot", "glass");
-        System.setProperty("testfx.headless", "true");
-        System.setProperty("prism.order", "sw");
-        System.setProperty("prism.text", "t2k");
-        System.setProperty("java.awt.headless", "true");*/
-
-        // ATTENTION: testfx seems to not support high dpi monitors!
         // TODO: check if testfx can be run in headless mode on Jenkins
-
         FxToolkit.registerPrimaryStage();
-        FxToolkit.setupApplication(CreateNewEmployeeApplicationTest.class);
+        FxToolkit.setupApplication(CreateNewEmployeeApplication.class);
+        employeeService = CreateNewEmployeeApplication.context.getBean(EmployeeService.class);
     }
 
     @After
@@ -47,8 +42,6 @@ public class CreateNewEmployeeControllerTest extends HighDpiAwareApplicationTest
     @Test
     public void testClickAddValidEmployee() throws PersistenceException, InvalidEmployeeException {
 
-        EmployeeService employeeService =
-                CreateNewEmployeeApplicationTest.context.getBean(EmployeeService.class);
         when(employeeService.add(any())).thenReturn(1L);
 
         clickOn("#inputName", Motion.DIRECT, MouseButton.PRIMARY);
@@ -66,8 +59,6 @@ public class CreateNewEmployeeControllerTest extends HighDpiAwareApplicationTest
     public void testClickAddInvalidEmployee()
             throws PersistenceException, InvalidEmployeeException {
 
-        EmployeeService employeeService =
-                CreateNewEmployeeApplicationTest.context.getBean(EmployeeService.class);
         when(employeeService.add(any())).thenThrow(InvalidEmployeeException.class);
 
         moveTo("#inputName");
@@ -84,8 +75,6 @@ public class CreateNewEmployeeControllerTest extends HighDpiAwareApplicationTest
     public void testClickAddEmployeeWithPersistenceException()
             throws PersistenceException, InvalidEmployeeException {
 
-        EmployeeService employeeService =
-                CreateNewEmployeeApplicationTest.context.getBean(EmployeeService.class);
         when(employeeService.add(any())).thenThrow(PersistenceException.class);
 
         clickOn("#inputName", Motion.DIRECT, MouseButton.PRIMARY);
-- 
cgit v1.2.3-70-g09d2


From 8f741b60910ff19daa21ecce800a4f628c7057ab Mon Sep 17 00:00:00 2001
From: Dominic Rogetzer <e1627756@student.tuwien.ac.at>
Date: Wed, 2 May 2018 21:59:48 +0200
Subject: Run maven fmt:format to reformat code

---
 .../controller/CreateNewEmployeeController.java           |  5 ++---
 .../groupphase/util/HighDpiAwareApplicationTest.java      | 15 ++++++++-------
 .../sepm/assignment/groupphase/util/ScaledBounds.java     | 11 ++++++-----
 3 files changed, 16 insertions(+), 15 deletions(-)

(limited to 'src/test/java/at/ac/tuwien')

diff --git a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/controller/CreateNewEmployeeController.java b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/controller/CreateNewEmployeeController.java
index d7f1a73..5906692 100644
--- a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/controller/CreateNewEmployeeController.java
+++ b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/controller/CreateNewEmployeeController.java
@@ -60,7 +60,7 @@ public class CreateNewEmployeeController {
 
     @FXML
     public void onCancelClicked() {
-        ((Stage)inputQualification.getScene().getWindow()).close();
+        ((Stage) inputQualification.getScene().getWindow()).close();
     }
 
     @FXML
@@ -112,7 +112,6 @@ public class CreateNewEmployeeController {
         if (inputQualification.getSelectionModel().getSelectedItem() == null) {
             return EducationLevel.RS;
         }
-        return EducationLevel.valueOf(
-                inputQualification.getSelectionModel().getSelectedItem());
+        return EducationLevel.valueOf(inputQualification.getSelectionModel().getSelectedItem());
     }
 }
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
index 1a765d3..c9816a1 100644
--- 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
@@ -11,13 +11,14 @@ 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);
-            }
-        });
+        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
index 78578d1..02c15c4 100644
--- 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
@@ -10,11 +10,12 @@ public class ScaledBounds extends BoundingBox {
 
     static {
         scale =
-                1 / GraphicsEnvironment.getLocalGraphicsEnvironment()
-                        .getDefaultScreenDevice()
-                        .getDefaultConfiguration()
-                        .getDefaultTransform()
-                        .getScaleX();
+                1
+                        / GraphicsEnvironment.getLocalGraphicsEnvironment()
+                                .getDefaultScreenDevice()
+                                .getDefaultConfiguration()
+                                .getDefaultTransform()
+                                .getScaleX();
     }
 
     public static ScaledBounds wrap(Bounds bounds) {
-- 
cgit v1.2.3-70-g09d2


From 8c26cc43a277fb2662a7dad0fa728b2f8f4e041d Mon Sep 17 00:00:00 2001
From: Dominic Rogetzer <e1627756@student.tuwien.ac.at>
Date: Thu, 3 May 2018 23:18:07 +0200
Subject: Change occurences of PersistenceException in Service and Controllers
 to ServiceExceptions

---
 .../controller/CreateNewEmployeeController.java          |  4 ++--
 .../einsatzverwaltung/dao/EmployeeDatabaseDao.java       |  2 +-
 .../einsatzverwaltung/service/EmployeeServiceImpl.java   | 16 ++++++++++------
 .../employee/CreateNewEmployeeApplication.java           |  8 +-------
 .../employee/CreateNewEmployeeControllerTest.java        | 13 ++++++-------
 .../groupphase/employee/EmployeeServiceTest.java         |  5 +++--
 6 files changed, 23 insertions(+), 25 deletions(-)

(limited to 'src/test/java/at/ac/tuwien')

diff --git a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/controller/CreateNewEmployeeController.java b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/controller/CreateNewEmployeeController.java
index 5906692..d81f6d7 100644
--- a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/controller/CreateNewEmployeeController.java
+++ b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/controller/CreateNewEmployeeController.java
@@ -4,7 +4,7 @@ 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.exception.InvalidEmployeeException;
-import at.ac.tuwien.sepm.assignment.groupphase.exception.PersistenceException;
+import at.ac.tuwien.sepm.assignment.groupphase.exception.ServiceException;
 import java.lang.invoke.MethodHandles;
 import java.time.LocalDate;
 import java.util.stream.Collectors;
@@ -85,7 +85,7 @@ public class CreateNewEmployeeController {
                     "Ungültige Eingabe",
                     "Mindestens eines der Eingabefelder haben einen ungültigen Wert!");
             return;
-        } catch (PersistenceException e) {
+        } catch (ServiceException e) {
             LOG.error("Employee could not be saved: {}", e);
 
             showModalDialogWithOkButton(
diff --git a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/EmployeeDatabaseDao.java b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/EmployeeDatabaseDao.java
index f16f98e..fc9a549 100644
--- a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/EmployeeDatabaseDao.java
+++ b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/EmployeeDatabaseDao.java
@@ -1,9 +1,9 @@
 package at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dao;
 
 import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Employee;
-import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.util.JDBCConnectionManager;
 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.util.JDBCConnectionManager;
 import java.lang.invoke.MethodHandles;
 import java.sql.PreparedStatement;
 import java.sql.ResultSet;
diff --git a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/service/EmployeeServiceImpl.java b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/service/EmployeeServiceImpl.java
index df8df64..144ccc6 100644
--- a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/service/EmployeeServiceImpl.java
+++ b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/service/EmployeeServiceImpl.java
@@ -5,6 +5,7 @@ import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Employee;
 import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.EmployeeValidator;
 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.util.List;
 import org.springframework.stereotype.Service;
 
@@ -18,23 +19,26 @@ public class EmployeeServiceImpl implements EmployeeService {
     }
 
     @Override
-    public long add(Employee employee) throws InvalidEmployeeException, PersistenceException {
+    public long add(Employee employee) throws InvalidEmployeeException, ServiceException {
 
         EmployeeValidator.validate(employee);
-        return employeePersistence.add(employee);
+        try {
+            return employeePersistence.add(employee);
+        } catch (PersistenceException e) {
+            throw new ServiceException(e);
+        }
     }
 
     @Override
-    public Employee update(Employee employee)
-            throws InvalidEmployeeException, PersistenceException {
+    public Employee update(Employee employee) throws InvalidEmployeeException, ServiceException {
         return null;
     }
 
     @Override
-    public List<Employee> list() throws PersistenceException {
+    public List<Employee> list() throws ServiceException {
         return null;
     }
 
     @Override
-    public void remove(long id) throws InvalidEmployeeException, PersistenceException {}
+    public void remove(long id) throws InvalidEmployeeException, ServiceException {}
 }
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
index 66c7e56..e9f4801 100644
--- 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
@@ -1,7 +1,6 @@
 package at.ac.tuwien.sepm.assignment.groupphase.employee;
 
-import at.ac.tuwien.sepm.assignment.groupphase.application.MainApplication;
-import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.util.SpringFXMLLoader;
+import at.ac.tuwien.sepm.assignment.groupphase.util.SpringFXMLLoader;
 import java.lang.invoke.MethodHandles;
 import javafx.application.Application;
 import javafx.scene.Parent;
@@ -46,11 +45,6 @@ public final class CreateNewEmployeeApplication extends Application {
         LOG.debug("Application startup complete");
     }
 
-    public static void main(String[] args) {
-        LOG.debug("Application starting with arguments={}", (Object) args);
-        Application.launch(MainApplication.class, args);
-    }
-
     @Override
     public void stop() {
         LOG.debug("Stopping application");
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
index 4a7477b..da8a6ac 100644
--- 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
@@ -5,7 +5,7 @@ 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.PersistenceException;
+import at.ac.tuwien.sepm.assignment.groupphase.exception.ServiceException;
 import at.ac.tuwien.sepm.assignment.groupphase.util.HighDpiAwareApplicationTest;
 import java.util.ArrayList;
 import java.util.Collections;
@@ -40,7 +40,7 @@ public class CreateNewEmployeeControllerTest extends HighDpiAwareApplicationTest
     }
 
     @Test
-    public void testClickAddValidEmployee() throws PersistenceException, InvalidEmployeeException {
+    public void testClickAddValidEmployee() throws InvalidEmployeeException, ServiceException {
 
         when(employeeService.add(any())).thenReturn(1L);
 
@@ -56,8 +56,7 @@ public class CreateNewEmployeeControllerTest extends HighDpiAwareApplicationTest
     }
 
     @Test
-    public void testClickAddInvalidEmployee()
-            throws PersistenceException, InvalidEmployeeException {
+    public void testClickAddInvalidEmployee() throws InvalidEmployeeException, ServiceException {
 
         when(employeeService.add(any())).thenThrow(InvalidEmployeeException.class);
 
@@ -72,10 +71,10 @@ public class CreateNewEmployeeControllerTest extends HighDpiAwareApplicationTest
     }
 
     @Test
-    public void testClickAddEmployeeWithPersistenceException()
-            throws PersistenceException, InvalidEmployeeException {
+    public void testClickAddEmployeeWithServiceException()
+            throws InvalidEmployeeException, ServiceException {
 
-        when(employeeService.add(any())).thenThrow(PersistenceException.class);
+        when(employeeService.add(any())).thenThrow(ServiceException.class);
 
         clickOn("#inputName", Motion.DIRECT, MouseButton.PRIMARY);
         write("Test");
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
index ac73c9a..47328b3 100644
--- 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
@@ -14,6 +14,7 @@ import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.service.Employe
 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;
@@ -41,7 +42,7 @@ public class EmployeeServiceTest {
 
         try {
             Assert.assertThat(employeeService.add(employee), is(1L));
-        } catch (InvalidEmployeeException | PersistenceException e) {
+        } catch (InvalidEmployeeException | ServiceException e) {
             fail();
         }
     }
@@ -60,7 +61,7 @@ public class EmployeeServiceTest {
 
         try {
             employeeService.add(employee);
-        } catch (PersistenceException e) {
+        } catch (ServiceException e) {
             fail();
         }
     }
-- 
cgit v1.2.3-70-g09d2