aboutsummaryrefslogtreecommitdiffstats
path: root/src/test/java
diff options
context:
space:
mode:
authorMartin <martin.weick@outlook.com>2018-05-04 15:30:58 +0200
committerTharre <tharre3@gmail.com>2018-05-04 20:37:04 +0200
commitc92959c3fe2d82be997d54581139c8c9ee7e946b (patch)
tree2aea6d5af7961b44f12d8d671efaee5408d545fb /src/test/java
parenta62919d43debaa0c6baf32de9658740dc929cba6 (diff)
downloadsepm-groupproject-c92959c3fe2d82be997d54581139c8c9ee7e946b.tar.gz
sepm-groupproject-c92959c3fe2d82be997d54581139c8c9ee7e946b.tar.xz
sepm-groupproject-c92959c3fe2d82be997d54581139c8c9ee7e946b.zip
UI Tests
Diffstat (limited to 'src/test/java')
-rw-r--r--src/test/java/at/ac/tuwien/sepm/assignment/groupphase/CarAddApp.java49
-rw-r--r--src/test/java/at/ac/tuwien/sepm/assignment/groupphase/CarAddContTest.java92
-rw-r--r--src/test/java/at/ac/tuwien/sepm/assignment/groupphase/HighDpiAwareApplicationTest.java24
-rw-r--r--src/test/java/at/ac/tuwien/sepm/assignment/groupphase/ScaledBounds.java30
4 files changed, 195 insertions, 0 deletions
diff --git a/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/CarAddApp.java b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/CarAddApp.java
new file mode 100644
index 0000000..eac5e07
--- /dev/null
+++ b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/CarAddApp.java
@@ -0,0 +1,49 @@
+package at.ac.tuwien.sepm.assignment.groupphase;
+
+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 CarAddApp 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(CarAddApp.class);
+ final var fxmlLoader = context.getBean(SpringFXMLLoader.class);
+ primaryStage.setScene(
+ new Scene(
+ (Parent)
+ fxmlLoader.load(
+ getClass()
+ .getResourceAsStream(
+ "/controller/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/CarAddContTest.java b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/CarAddContTest.java
new file mode 100644
index 0000000..a4c7d07
--- /dev/null
+++ b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/CarAddContTest.java
@@ -0,0 +1,92 @@
+package at.ac.tuwien.sepm.assignment.groupphase;
+
+
+
+
+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.InvalidEmployeeException;
+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 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.robot.Motion;
+
+public class CarAddContTest 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(CarAddApp.class);
+ vehicleService = CarAddApp.context.getBean(VehicleService.class);
+ }
+ @After
+ public void cleanup() throws Exception {
+ FxToolkit.cleanupStages();
+ }
+ @Test
+ public void testClickAddValidEmployee() throws InvalidVehicleException, ServiceException {
+ when(vehicleService.add(any())).thenReturn(1L);
+ //clickOn("#cmb_Ctype", Motion.DIRECT, MouseButton.PRIMARY);
+
+
+ clickOn("#btn_create", 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 InvalidVehicleException, ServiceException {
+ when(vehicleService.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 InvalidVehicleException, ServiceException{
+ when(vehicleService.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/HighDpiAwareApplicationTest.java b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/HighDpiAwareApplicationTest.java
new file mode 100644
index 0000000..b9b0605
--- /dev/null
+++ b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/HighDpiAwareApplicationTest.java
@@ -0,0 +1,24 @@
+package at.ac.tuwien.sepm.assignment.groupphase;
+
+
+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/ScaledBounds.java b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/ScaledBounds.java
new file mode 100644
index 0000000..adf029e
--- /dev/null
+++ b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/ScaledBounds.java
@@ -0,0 +1,30 @@
+package at.ac.tuwien.sepm.assignment.groupphase;
+
+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());
+ }
+}