From 21716ce4c9f7c144d793047973b31b1698e0eaf5 Mon Sep 17 00:00:00 2001 From: Dominic Rogetzer 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/sepm/assignment/groupphase') 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 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/sepm/assignment/groupphase') 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 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 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/sepm/assignment/groupphase') 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 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/sepm/assignment/groupphase') 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 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/sepm/assignment/groupphase') 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 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/sepm/assignment/groupphase') 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 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/sepm/assignment/groupphase') 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 list() throws PersistenceException { + public List 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 From a62919d43debaa0c6baf32de9658740dc929cba6 Mon Sep 17 00:00:00 2001 From: Martin Weick Date: Fri, 4 May 2018 13:51:05 +0200 Subject: tests --- .../einsatzverwaltung/service/VehicleAdd.java | 6 +- src/main/resources/controller/CreateCar.fxml | 17 -- src/main/resources/controller/createCar.fxml | 17 ++ .../sepm/assignment/groupphase/AddCarTest.java | 43 ---- .../assignment/groupphase/CarAddTestService.java | 283 +++++++++++++++++++++ 5 files changed, 304 insertions(+), 62 deletions(-) delete mode 100644 src/main/resources/controller/CreateCar.fxml create mode 100644 src/main/resources/controller/createCar.fxml delete mode 100644 src/main/test/java/at/ac/tuwien/sepm/assignment/groupphase/AddCarTest.java create mode 100644 src/test/java/at/ac/tuwien/sepm/assignment/groupphase/CarAddTestService.java (limited to 'src/test/java/at/ac/tuwien/sepm/assignment/groupphase') diff --git a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/service/VehicleAdd.java b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/service/VehicleAdd.java index be52fb6..e78c6b2 100644 --- a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/service/VehicleAdd.java +++ b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/service/VehicleAdd.java @@ -42,17 +42,19 @@ public class VehicleAdd implements VehicleService { case NEF: if (vehicle.constructionType() == ConstructionType.MITTELHOCHDACH) { throw new InvalidVehicleException("NEF darf kein Mittelhochdach haben"); - } else if (vehicle.constructionType().name().contains("Hochdach")) { + } else if (vehicle.constructionType() == ConstructionType.HOCHDACH) { throw new InvalidVehicleException("NEF darf kein Hochdach haben"); } break; case NAH: if (vehicle.constructionType() == ConstructionType.MITTELHOCHDACH) { throw new InvalidVehicleException("NEF darf kein Mittelhochdach haben"); - } else if (vehicle.constructionType().name().contains("Hochdach")) { + } else if (vehicle.constructionType() == ConstructionType.HOCHDACH) { throw new InvalidVehicleException("NEF darf kein Hochdach haben"); } break; + case BKTW: + break; default: throw new ServiceException("not a Valid type"); } diff --git a/src/main/resources/controller/CreateCar.fxml b/src/main/resources/controller/CreateCar.fxml deleted file mode 100644 index 2daac67..0000000 --- a/src/main/resources/controller/CreateCar.fxml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - - - - -