aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/VehicleDBDAO.java16
-rw-r--r--src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/uicontroller/CreateCarController.java3
-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
6 files changed, 208 insertions, 6 deletions
diff --git a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/VehicleDBDAO.java b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/VehicleDBDAO.java
index 66045a5..65933bd 100644
--- a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/VehicleDBDAO.java
+++ b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/VehicleDBDAO.java
@@ -6,6 +6,7 @@ import at.ac.tuwien.sepm.assignment.groupphase.exception.ElementNotFoundExceptio
import at.ac.tuwien.sepm.assignment.groupphase.exception.PersistenceException;
import at.ac.tuwien.sepm.assignment.groupphase.util.JDBCConnectionManager;
import java.sql.PreparedStatement;
+
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
@@ -30,7 +31,7 @@ public class VehicleDBDAO implements VehicleDAO {
String name = "";
int id = -1;
try {
- p1 = jdbcConnectionManager.getConnection().prepareStatement(query1);
+ p1 = jdbcConnectionManager.getConnection().prepareStatement(query1,PreparedStatement.RETURN_GENERATED_KEYS);
p1.setString(1, name);
p1.setString(2, vehicle.constructionType().name());
if (vehicle.type() == VehicleType.KTW_B) {
@@ -39,12 +40,14 @@ public class VehicleDBDAO implements VehicleDAO {
p1.setString(3, vehicle.type().name());
}
p1.executeUpdate();
- query1 = "UPDATE VehicleVersion SET name=? WHERE id=?";
- try (ResultSet keyResultSet = p1.getGeneratedKeys()) {
- if (keyResultSet.next()) {
- id = keyResultSet.getInt(1);
- }
+
+
+ ResultSet keyResultSet = p1.getGeneratedKeys();
+
+ if (keyResultSet.next()) {
+ id = keyResultSet.getInt(1);
}
+
name = vehicle.type().name() + "-" + id;
} catch (SQLException e) {
@@ -58,6 +61,7 @@ public class VehicleDBDAO implements VehicleDAO {
}
}
try {
+ query1 = "UPDATE VehicleVersion SET name=? WHERE id=?";
p3 = jdbcConnectionManager.getConnection().prepareStatement(query1);
p3.setString(1, name);
p3.setInt(2, id);
diff --git a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/uicontroller/CreateCarController.java b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/uicontroller/CreateCarController.java
index 721cf6d..f826837 100644
--- a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/uicontroller/CreateCarController.java
+++ b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/uicontroller/CreateCarController.java
@@ -2,6 +2,7 @@ package at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.uicontroller;
import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Vehicle;
import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Vehicle.ConstructionType;
+import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Vehicle.Status;
import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Vehicle.VehicleType;
import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.service.VehicleService;
import at.ac.tuwien.sepm.assignment.groupphase.exception.InvalidVehicleException;
@@ -74,6 +75,8 @@ public class CreateCarController {
Vehicle.builder()
.constructionType(parseConstructionType())
.type(parseType())
+ .name("")
+ .status(Status.ABGEMELDET)
.hasNef(cbx_NEF.isSelected())
.build();
try {
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());
+ }
+}