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') 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') 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') 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') 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') 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') 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') 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 From a62919d43debaa0c6baf32de9658740dc929cba6 Mon Sep 17 00:00:00 2001 From: Martin Weick <e1627760@student.tuwien.ac.at> 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') 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 @@ -<?xml version="1.0" encoding="UTF-8"?> - -<?import javafx.scene.control.Button?> -<?import javafx.scene.control.CheckBox?> -<?import javafx.scene.control.ChoiceBox?> -<?import javafx.scene.layout.AnchorPane?> - - -<AnchorPane prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/9.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.uicontroller.CreateCarController"> - <children> - <ChoiceBox fx:id="cmb_Ctyp" layoutX="14.0" layoutY="14.0" prefWidth="150.0" /> - <ChoiceBox fx:id="cmb_typ" layoutX="191.0" layoutY="14.0" prefWidth="150.0" /> - <Button fx:id="btn_cancel" layoutX="500.0" layoutY="14.0" mnemonicParsing="false" text="abbrechen" /> - <Button fx:id="btn_create" layoutX="500.0" layoutY="53.0" mnemonicParsing="false" onAction="#createCar" text="Erstellen" /> - <CheckBox fx:id="cbx_NEF" layoutX="14.0" layoutY="57.0" mnemonicParsing="false" text="NEF - Halterung" /> - </children> -</AnchorPane> diff --git a/src/main/resources/controller/createCar.fxml b/src/main/resources/controller/createCar.fxml new file mode 100644 index 0000000..2daac67 --- /dev/null +++ b/src/main/resources/controller/createCar.fxml @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<?import javafx.scene.control.Button?> +<?import javafx.scene.control.CheckBox?> +<?import javafx.scene.control.ChoiceBox?> +<?import javafx.scene.layout.AnchorPane?> + + +<AnchorPane prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/9.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.uicontroller.CreateCarController"> + <children> + <ChoiceBox fx:id="cmb_Ctyp" layoutX="14.0" layoutY="14.0" prefWidth="150.0" /> + <ChoiceBox fx:id="cmb_typ" layoutX="191.0" layoutY="14.0" prefWidth="150.0" /> + <Button fx:id="btn_cancel" layoutX="500.0" layoutY="14.0" mnemonicParsing="false" text="abbrechen" /> + <Button fx:id="btn_create" layoutX="500.0" layoutY="53.0" mnemonicParsing="false" onAction="#createCar" text="Erstellen" /> + <CheckBox fx:id="cbx_NEF" layoutX="14.0" layoutY="57.0" mnemonicParsing="false" text="NEF - Halterung" /> + </children> +</AnchorPane> diff --git a/src/main/test/java/at/ac/tuwien/sepm/assignment/groupphase/AddCarTest.java b/src/main/test/java/at/ac/tuwien/sepm/assignment/groupphase/AddCarTest.java deleted file mode 100644 index e7c4543..0000000 --- a/src/main/test/java/at/ac/tuwien/sepm/assignment/groupphase/AddCarTest.java +++ /dev/null @@ -1,43 +0,0 @@ -package at.ac.tuwien.sepm.assignment.groupphase; - -import static junit.framework.TestCase.fail; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; - -import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dao.VehicleDAO; -import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dao.VehicleDBDAO; -import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Vehicle; -import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Vehicle.ConstructionType; -import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Vehicle.VehicleType; -import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.service.VehicleAdd; -import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.service.VehicleService; -import at.ac.tuwien.sepm.assignment.groupphase.exception.InvalidVehicleException; -import at.ac.tuwien.sepm.assignment.groupphase.exception.PersistenceException; -import at.ac.tuwien.sepm.assignment.groupphase.exception.ServiceException; -import org.junit.Test; - -public class AddCarTest { - private final VehicleDAO vehicleP = mock(VehicleDBDAO.class); - private final VehicleService vehicleService = new VehicleAdd(vehicleP); - - public AddCarTest() throws PersistenceException { - when(vehicleP.add(any())).thenReturn(1L); - } - - @Test - public void add() { - Vehicle vehicle = - Vehicle.builder() - .constructionType(ConstructionType.HOCHDACH) - .type(VehicleType.RTW) - .hasNef(true) - .build(); - try { - vehicleService.add(vehicle); - } catch (InvalidVehicleException | ServiceException e) { - fail(); - } - } - -} diff --git a/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/CarAddTestService.java b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/CarAddTestService.java new file mode 100644 index 0000000..2524742 --- /dev/null +++ b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/CarAddTestService.java @@ -0,0 +1,283 @@ +package at.ac.tuwien.sepm.assignment.groupphase; + +import static junit.framework.TestCase.fail; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dao.VehicleDAO; +import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dao.VehicleDBDAO; +import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Vehicle; +import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.service.VehicleAdd; +import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.service.VehicleService; +import at.ac.tuwien.sepm.assignment.groupphase.exception.InvalidVehicleException; +import at.ac.tuwien.sepm.assignment.groupphase.exception.PersistenceException; +import at.ac.tuwien.sepm.assignment.groupphase.exception.ServiceException; +import org.junit.Test; + +public class CarAddTestService { + private final VehicleDAO vehicleP = mock(VehicleDBDAO.class); + private final VehicleService vehicleService = new VehicleAdd(vehicleP); + + public CarAddTestService() throws PersistenceException { + when(vehicleP.add(any())).thenReturn(1L); + } + + @Test + public void testValidVehicleH() { + Vehicle vehicle = + Vehicle.builder() + .constructionType(Vehicle.ConstructionType.HOCHDACH) + .type(Vehicle.VehicleType.RTW) + .hasNef(true) + .status(Vehicle.Status.ABGEMELDET) + .name("") + .build(); + try { + vehicleService.add(vehicle); + } catch (InvalidVehicleException | ServiceException e) { + fail(); + } + vehicle = + Vehicle.builder() + .constructionType(Vehicle.ConstructionType.HOCHDACH) + .type(Vehicle.VehicleType.KTW) + .hasNef(true) + .status(Vehicle.Status.ABGEMELDET) + .name("") + .build(); + try { + vehicleService.add(vehicle); + } catch (InvalidVehicleException | ServiceException e) { + fail(); + } + vehicle = + Vehicle.builder() + .constructionType(Vehicle.ConstructionType.HOCHDACH) + .type(Vehicle.VehicleType.KTW_B) + .hasNef(true) + .status(Vehicle.Status.ABGEMELDET) + .name("") + .build(); + try { + vehicleService.add(vehicle); + } catch (InvalidVehicleException | ServiceException e) { + fail(); + } + vehicle = + Vehicle.builder() + .constructionType(Vehicle.ConstructionType.HOCHDACH) + .type(Vehicle.VehicleType.BKTW) + .hasNef(true) + .status(Vehicle.Status.ABGEMELDET) + .name("") + .build(); + try { + vehicleService.add(vehicle); + } catch (InvalidVehicleException | ServiceException e) { + fail(); + } + } + + @Test + public void testValidVehicleM() { + Vehicle vehicle = + Vehicle.builder() + .constructionType(Vehicle.ConstructionType.MITTELHOCHDACH) + .type(Vehicle.VehicleType.KTW) + .hasNef(true) + .status(Vehicle.Status.ABGEMELDET) + .name("") + .build(); + try { + vehicleService.add(vehicle); + } catch (InvalidVehicleException | ServiceException e) { + fail(); + } + vehicle = + Vehicle.builder() + .constructionType(Vehicle.ConstructionType.MITTELHOCHDACH) + .type(Vehicle.VehicleType.KTW_B) + .hasNef(true) + .status(Vehicle.Status.ABGEMELDET) + .name("") + .build(); + try { + vehicleService.add(vehicle); + } catch (InvalidVehicleException | ServiceException e) { + fail(); + } + vehicle = + Vehicle.builder() + .constructionType(Vehicle.ConstructionType.MITTELHOCHDACH) + .type(Vehicle.VehicleType.BKTW) + .hasNef(true) + .status(Vehicle.Status.ABGEMELDET) + .name("") + .build(); + try { + vehicleService.add(vehicle); + } catch (InvalidVehicleException | ServiceException e) { + fail(); + } + } + + @Test + public void testValidVehicleN() { + Vehicle vehicle = + Vehicle.builder() + .constructionType(Vehicle.ConstructionType.NORMAL) + .type(Vehicle.VehicleType.BKTW) + .hasNef(true) + .status(Vehicle.Status.ABGEMELDET) + .name("") + .build(); + try { + vehicleService.add(vehicle); + } catch (InvalidVehicleException | ServiceException e) { + fail(); + } + vehicle = + Vehicle.builder() + .constructionType(Vehicle.ConstructionType.NORMAL) + .type(Vehicle.VehicleType.NEF) + .hasNef(true) + .status(Vehicle.Status.ABGEMELDET) + .name("") + .build(); + try { + vehicleService.add(vehicle); + } catch (InvalidVehicleException | ServiceException e) { + fail(); + } + vehicle = + Vehicle.builder() + .constructionType(Vehicle.ConstructionType.NORMAL) + .type(Vehicle.VehicleType.NAH) + .hasNef(true) + .status(Vehicle.Status.ABGEMELDET) + .name("") + .build(); + try { + vehicleService.add(vehicle); + } catch (InvalidVehicleException | ServiceException e) { + fail(); + } + } + + @Test(expected = InvalidVehicleException.class) + public void testInvalidVehicleH() throws InvalidVehicleException { + Vehicle vehicle = + Vehicle.builder() + .constructionType(Vehicle.ConstructionType.HOCHDACH) + .type(Vehicle.VehicleType.NEF) + .hasNef(true) + .status(Vehicle.Status.ABGEMELDET) + .name("") + .build(); + try { + vehicleService.add(vehicle); + } catch (ServiceException e) { + fail(); + } + vehicle = + Vehicle.builder() + .constructionType(Vehicle.ConstructionType.HOCHDACH) + .type(Vehicle.VehicleType.NAH) + .hasNef(true) + .status(Vehicle.Status.ABGEMELDET) + .name("") + .build(); + try { + vehicleService.add(vehicle); + } catch (ServiceException e) { + fail(); + } + } + + @Test(expected = InvalidVehicleException.class) + public void testInvalidVehicleM() throws InvalidVehicleException { + Vehicle vehicle = + Vehicle.builder() + .constructionType(Vehicle.ConstructionType.MITTELHOCHDACH) + .type(Vehicle.VehicleType.NEF) + .hasNef(true) + .status(Vehicle.Status.ABGEMELDET) + .name("") + .build(); + try { + vehicleService.add(vehicle); + } catch (ServiceException e) { + fail(); + } + vehicle = + Vehicle.builder() + .constructionType(Vehicle.ConstructionType.MITTELHOCHDACH) + .type(Vehicle.VehicleType.NAH) + .hasNef(true) + .status(Vehicle.Status.ABGEMELDET) + .name("") + .build(); + try { + vehicleService.add(vehicle); + } catch (ServiceException e) { + fail(); + } + vehicle = + Vehicle.builder() + .constructionType(Vehicle.ConstructionType.MITTELHOCHDACH) + .type(Vehicle.VehicleType.RTW) + .hasNef(true) + .status(Vehicle.Status.ABGEMELDET) + .name("") + .build(); + try { + vehicleService.add(vehicle); + } catch (ServiceException e) { + fail(); + } + } + + @Test(expected = InvalidVehicleException.class) + public void testInvalidVehicleN() throws InvalidVehicleException { + Vehicle vehicle = + Vehicle.builder() + .constructionType(Vehicle.ConstructionType.NORMAL) + .type(Vehicle.VehicleType.RTW) + .hasNef(true) + .status(Vehicle.Status.ABGEMELDET) + .name("") + .build(); + try { + vehicleService.add(vehicle); + } catch (ServiceException e) { + fail(); + } + vehicle = + Vehicle.builder() + .constructionType(Vehicle.ConstructionType.NORMAL) + .type(Vehicle.VehicleType.KTW_B) + .hasNef(true) + .status(Vehicle.Status.ABGEMELDET) + .name("") + .build(); + try { + vehicleService.add(vehicle); + } catch (ServiceException e) { + fail(); + } + vehicle = + Vehicle.builder() + .constructionType(Vehicle.ConstructionType.NORMAL) + .type(Vehicle.VehicleType.KTW) + .hasNef(true) + .status(Vehicle.Status.ABGEMELDET) + .name("") + .build(); + try { + vehicleService.add(vehicle); + } catch (ServiceException e) { + fail(); + } + } +} -- cgit v1.2.3-70-g09d2 From c92959c3fe2d82be997d54581139c8c9ee7e946b Mon Sep 17 00:00:00 2001 From: Martin <martin.weick@outlook.com> Date: Fri, 4 May 2018 15:30:58 +0200 Subject: UI Tests --- .../einsatzverwaltung/dao/VehicleDBDAO.java | 16 ++-- .../uicontroller/CreateCarController.java | 3 + .../sepm/assignment/groupphase/CarAddApp.java | 49 ++++++++++++ .../sepm/assignment/groupphase/CarAddContTest.java | 92 ++++++++++++++++++++++ .../groupphase/HighDpiAwareApplicationTest.java | 24 ++++++ .../sepm/assignment/groupphase/ScaledBounds.java | 30 +++++++ 6 files changed, 208 insertions(+), 6 deletions(-) create mode 100644 src/test/java/at/ac/tuwien/sepm/assignment/groupphase/CarAddApp.java create mode 100644 src/test/java/at/ac/tuwien/sepm/assignment/groupphase/CarAddContTest.java create mode 100644 src/test/java/at/ac/tuwien/sepm/assignment/groupphase/HighDpiAwareApplicationTest.java create mode 100644 src/test/java/at/ac/tuwien/sepm/assignment/groupphase/ScaledBounds.java (limited to 'src/test/java/at') 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()); + } +} -- cgit v1.2.3-70-g09d2 From c9fa478b80680ac5634a47d7de9f9d5cde9cda4c Mon Sep 17 00:00:00 2001 From: Martin <martin.weick@outlook.com> Date: Fri, 4 May 2018 20:22:09 +0200 Subject: commit for merge --- .../einsatzverwaltung/dao/VehicleDBDAO.java | 7 +- .../sepm/assignment/groupphase/CarAddApp.java | 49 ------------ .../sepm/assignment/groupphase/CarAddContTest.java | 92 ---------------------- .../groupphase/HighDpiAwareApplicationTest.java | 24 ------ .../sepm/assignment/groupphase/ScaledBounds.java | 30 ------- 5 files changed, 4 insertions(+), 198 deletions(-) delete mode 100644 src/test/java/at/ac/tuwien/sepm/assignment/groupphase/CarAddApp.java delete mode 100644 src/test/java/at/ac/tuwien/sepm/assignment/groupphase/CarAddContTest.java delete mode 100644 src/test/java/at/ac/tuwien/sepm/assignment/groupphase/HighDpiAwareApplicationTest.java delete mode 100644 src/test/java/at/ac/tuwien/sepm/assignment/groupphase/ScaledBounds.java (limited to 'src/test/java/at') 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 65933bd..8a596b3 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,7 +6,6 @@ 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; @@ -31,7 +30,10 @@ public class VehicleDBDAO implements VehicleDAO { String name = ""; int id = -1; try { - p1 = jdbcConnectionManager.getConnection().prepareStatement(query1,PreparedStatement.RETURN_GENERATED_KEYS); + 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) { @@ -41,7 +43,6 @@ public class VehicleDBDAO implements VehicleDAO { } p1.executeUpdate(); - ResultSet keyResultSet = p1.getGeneratedKeys(); if (keyResultSet.next()) { 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 deleted file mode 100644 index eac5e07..0000000 --- a/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/CarAddApp.java +++ /dev/null @@ -1,49 +0,0 @@ -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 deleted file mode 100644 index a4c7d07..0000000 --- a/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/CarAddContTest.java +++ /dev/null @@ -1,92 +0,0 @@ -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 deleted file mode 100644 index b9b0605..0000000 --- a/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/HighDpiAwareApplicationTest.java +++ /dev/null @@ -1,24 +0,0 @@ -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 deleted file mode 100644 index adf029e..0000000 --- a/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/ScaledBounds.java +++ /dev/null @@ -1,30 +0,0 @@ -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()); - } -} -- cgit v1.2.3-70-g09d2 From e5b471c46f616e035d87a310265df1a5d2031292 Mon Sep 17 00:00:00 2001 From: Martin Weick <e1627760@student.tuwien.ac.at> Date: Fri, 4 May 2018 21:04:22 +0200 Subject: Refactor getTopModalStage to Helper --- .../employee/CreateNewEmployeeControllerTest.java | 28 ++++------------------ .../sepm/assignment/groupphase/util/Helper.java | 28 ++++++++++++++++++++++ 2 files changed, 32 insertions(+), 24 deletions(-) create mode 100644 src/test/java/at/ac/tuwien/sepm/assignment/groupphase/util/Helper.java (limited to 'src/test/java/at') 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 da8a6ac..eb1a728 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 @@ -6,15 +6,11 @@ import static org.mockito.Mockito.when; import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.service.EmployeeService; import at.ac.tuwien.sepm.assignment.groupphase.exception.InvalidEmployeeException; import at.ac.tuwien.sepm.assignment.groupphase.exception.ServiceException; +import at.ac.tuwien.sepm.assignment.groupphase.util.Helper; import at.ac.tuwien.sepm.assignment.groupphase.util.HighDpiAwareApplicationTest; -import 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; @@ -48,7 +44,7 @@ public class CreateNewEmployeeControllerTest extends HighDpiAwareApplicationTest write("Name"); clickOn("#btnCreate", Motion.DIRECT, MouseButton.PRIMARY); - Stage alertDialog = getTopModalStage(); + Stage alertDialog = Helper.getTopModalStage(robotContext()); Assert.assertNotNull(alertDialog); DialogPane dialogPane = (DialogPane) alertDialog.getScene().getRoot(); @@ -63,7 +59,7 @@ public class CreateNewEmployeeControllerTest extends HighDpiAwareApplicationTest moveTo("#inputName"); clickOn("#btnCreate", Motion.DIRECT, MouseButton.PRIMARY); - Stage alertDialog = getTopModalStage(); + Stage alertDialog = Helper.getTopModalStage(robotContext()); Assert.assertNotNull(alertDialog); DialogPane dialogPane = (DialogPane) alertDialog.getScene().getRoot(); @@ -80,26 +76,10 @@ public class CreateNewEmployeeControllerTest extends HighDpiAwareApplicationTest write("Test"); clickOn("#btnCreate", Motion.DIRECT, MouseButton.PRIMARY); - Stage alertDialog = getTopModalStage(); + Stage alertDialog = Helper.getTopModalStage(robotContext()); 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/util/Helper.java b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/util/Helper.java new file mode 100644 index 0000000..b808206 --- /dev/null +++ b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/util/Helper.java @@ -0,0 +1,28 @@ +package at.ac.tuwien.sepm.assignment.groupphase.util; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import javafx.stage.Modality; +import javafx.stage.Stage; +import javafx.stage.Window; +import org.testfx.api.FxRobotContext; + +public class Helper { + + public static Stage getTopModalStage(FxRobotContext robotContext) { + + List<Window> allWindows = new ArrayList<>(robotContext.getWindowFinder().listWindows()); + Collections.reverse(allWindows); + return (Stage) + allWindows + .stream() + .filter(window -> window instanceof Stage) + .filter( + window -> + ((Stage) window).getModality() + == Modality.APPLICATION_MODAL) + .findFirst() + .orElse(null); + } +} -- cgit v1.2.3-70-g09d2 From fdd324577135e02bb9dac3c11b04e36bb4076d73 Mon Sep 17 00:00:00 2001 From: Martin Weick <e1627760@student.tuwien.ac.at> Date: Fri, 4 May 2018 21:05:35 +0200 Subject: Move CarAddTestService to package vehicle --- .../assignment/groupphase/CarAddTestService.java | 283 --------------------- .../groupphase/vehicle/CarAddTestService.java | 283 +++++++++++++++++++++ 2 files changed, 283 insertions(+), 283 deletions(-) delete mode 100644 src/test/java/at/ac/tuwien/sepm/assignment/groupphase/CarAddTestService.java create mode 100644 src/test/java/at/ac/tuwien/sepm/assignment/groupphase/vehicle/CarAddTestService.java (limited to 'src/test/java/at') diff --git a/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/CarAddTestService.java b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/CarAddTestService.java deleted file mode 100644 index 2524742..0000000 --- a/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/CarAddTestService.java +++ /dev/null @@ -1,283 +0,0 @@ -package at.ac.tuwien.sepm.assignment.groupphase; - -import static junit.framework.TestCase.fail; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; - -import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dao.VehicleDAO; -import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dao.VehicleDBDAO; -import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Vehicle; -import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.service.VehicleAdd; -import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.service.VehicleService; -import at.ac.tuwien.sepm.assignment.groupphase.exception.InvalidVehicleException; -import at.ac.tuwien.sepm.assignment.groupphase.exception.PersistenceException; -import at.ac.tuwien.sepm.assignment.groupphase.exception.ServiceException; -import org.junit.Test; - -public class CarAddTestService { - private final VehicleDAO vehicleP = mock(VehicleDBDAO.class); - private final VehicleService vehicleService = new VehicleAdd(vehicleP); - - public CarAddTestService() throws PersistenceException { - when(vehicleP.add(any())).thenReturn(1L); - } - - @Test - public void testValidVehicleH() { - Vehicle vehicle = - Vehicle.builder() - .constructionType(Vehicle.ConstructionType.HOCHDACH) - .type(Vehicle.VehicleType.RTW) - .hasNef(true) - .status(Vehicle.Status.ABGEMELDET) - .name("") - .build(); - try { - vehicleService.add(vehicle); - } catch (InvalidVehicleException | ServiceException e) { - fail(); - } - vehicle = - Vehicle.builder() - .constructionType(Vehicle.ConstructionType.HOCHDACH) - .type(Vehicle.VehicleType.KTW) - .hasNef(true) - .status(Vehicle.Status.ABGEMELDET) - .name("") - .build(); - try { - vehicleService.add(vehicle); - } catch (InvalidVehicleException | ServiceException e) { - fail(); - } - vehicle = - Vehicle.builder() - .constructionType(Vehicle.ConstructionType.HOCHDACH) - .type(Vehicle.VehicleType.KTW_B) - .hasNef(true) - .status(Vehicle.Status.ABGEMELDET) - .name("") - .build(); - try { - vehicleService.add(vehicle); - } catch (InvalidVehicleException | ServiceException e) { - fail(); - } - vehicle = - Vehicle.builder() - .constructionType(Vehicle.ConstructionType.HOCHDACH) - .type(Vehicle.VehicleType.BKTW) - .hasNef(true) - .status(Vehicle.Status.ABGEMELDET) - .name("") - .build(); - try { - vehicleService.add(vehicle); - } catch (InvalidVehicleException | ServiceException e) { - fail(); - } - } - - @Test - public void testValidVehicleM() { - Vehicle vehicle = - Vehicle.builder() - .constructionType(Vehicle.ConstructionType.MITTELHOCHDACH) - .type(Vehicle.VehicleType.KTW) - .hasNef(true) - .status(Vehicle.Status.ABGEMELDET) - .name("") - .build(); - try { - vehicleService.add(vehicle); - } catch (InvalidVehicleException | ServiceException e) { - fail(); - } - vehicle = - Vehicle.builder() - .constructionType(Vehicle.ConstructionType.MITTELHOCHDACH) - .type(Vehicle.VehicleType.KTW_B) - .hasNef(true) - .status(Vehicle.Status.ABGEMELDET) - .name("") - .build(); - try { - vehicleService.add(vehicle); - } catch (InvalidVehicleException | ServiceException e) { - fail(); - } - vehicle = - Vehicle.builder() - .constructionType(Vehicle.ConstructionType.MITTELHOCHDACH) - .type(Vehicle.VehicleType.BKTW) - .hasNef(true) - .status(Vehicle.Status.ABGEMELDET) - .name("") - .build(); - try { - vehicleService.add(vehicle); - } catch (InvalidVehicleException | ServiceException e) { - fail(); - } - } - - @Test - public void testValidVehicleN() { - Vehicle vehicle = - Vehicle.builder() - .constructionType(Vehicle.ConstructionType.NORMAL) - .type(Vehicle.VehicleType.BKTW) - .hasNef(true) - .status(Vehicle.Status.ABGEMELDET) - .name("") - .build(); - try { - vehicleService.add(vehicle); - } catch (InvalidVehicleException | ServiceException e) { - fail(); - } - vehicle = - Vehicle.builder() - .constructionType(Vehicle.ConstructionType.NORMAL) - .type(Vehicle.VehicleType.NEF) - .hasNef(true) - .status(Vehicle.Status.ABGEMELDET) - .name("") - .build(); - try { - vehicleService.add(vehicle); - } catch (InvalidVehicleException | ServiceException e) { - fail(); - } - vehicle = - Vehicle.builder() - .constructionType(Vehicle.ConstructionType.NORMAL) - .type(Vehicle.VehicleType.NAH) - .hasNef(true) - .status(Vehicle.Status.ABGEMELDET) - .name("") - .build(); - try { - vehicleService.add(vehicle); - } catch (InvalidVehicleException | ServiceException e) { - fail(); - } - } - - @Test(expected = InvalidVehicleException.class) - public void testInvalidVehicleH() throws InvalidVehicleException { - Vehicle vehicle = - Vehicle.builder() - .constructionType(Vehicle.ConstructionType.HOCHDACH) - .type(Vehicle.VehicleType.NEF) - .hasNef(true) - .status(Vehicle.Status.ABGEMELDET) - .name("") - .build(); - try { - vehicleService.add(vehicle); - } catch (ServiceException e) { - fail(); - } - vehicle = - Vehicle.builder() - .constructionType(Vehicle.ConstructionType.HOCHDACH) - .type(Vehicle.VehicleType.NAH) - .hasNef(true) - .status(Vehicle.Status.ABGEMELDET) - .name("") - .build(); - try { - vehicleService.add(vehicle); - } catch (ServiceException e) { - fail(); - } - } - - @Test(expected = InvalidVehicleException.class) - public void testInvalidVehicleM() throws InvalidVehicleException { - Vehicle vehicle = - Vehicle.builder() - .constructionType(Vehicle.ConstructionType.MITTELHOCHDACH) - .type(Vehicle.VehicleType.NEF) - .hasNef(true) - .status(Vehicle.Status.ABGEMELDET) - .name("") - .build(); - try { - vehicleService.add(vehicle); - } catch (ServiceException e) { - fail(); - } - vehicle = - Vehicle.builder() - .constructionType(Vehicle.ConstructionType.MITTELHOCHDACH) - .type(Vehicle.VehicleType.NAH) - .hasNef(true) - .status(Vehicle.Status.ABGEMELDET) - .name("") - .build(); - try { - vehicleService.add(vehicle); - } catch (ServiceException e) { - fail(); - } - vehicle = - Vehicle.builder() - .constructionType(Vehicle.ConstructionType.MITTELHOCHDACH) - .type(Vehicle.VehicleType.RTW) - .hasNef(true) - .status(Vehicle.Status.ABGEMELDET) - .name("") - .build(); - try { - vehicleService.add(vehicle); - } catch (ServiceException e) { - fail(); - } - } - - @Test(expected = InvalidVehicleException.class) - public void testInvalidVehicleN() throws InvalidVehicleException { - Vehicle vehicle = - Vehicle.builder() - .constructionType(Vehicle.ConstructionType.NORMAL) - .type(Vehicle.VehicleType.RTW) - .hasNef(true) - .status(Vehicle.Status.ABGEMELDET) - .name("") - .build(); - try { - vehicleService.add(vehicle); - } catch (ServiceException e) { - fail(); - } - vehicle = - Vehicle.builder() - .constructionType(Vehicle.ConstructionType.NORMAL) - .type(Vehicle.VehicleType.KTW_B) - .hasNef(true) - .status(Vehicle.Status.ABGEMELDET) - .name("") - .build(); - try { - vehicleService.add(vehicle); - } catch (ServiceException e) { - fail(); - } - vehicle = - Vehicle.builder() - .constructionType(Vehicle.ConstructionType.NORMAL) - .type(Vehicle.VehicleType.KTW) - .hasNef(true) - .status(Vehicle.Status.ABGEMELDET) - .name("") - .build(); - try { - vehicleService.add(vehicle); - } catch (ServiceException e) { - fail(); - } - } -} diff --git a/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/vehicle/CarAddTestService.java b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/vehicle/CarAddTestService.java new file mode 100644 index 0000000..3ae2fe6 --- /dev/null +++ b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/vehicle/CarAddTestService.java @@ -0,0 +1,283 @@ +package at.ac.tuwien.sepm.assignment.groupphase.vehicle; + +import static junit.framework.TestCase.fail; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dao.VehicleDAO; +import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dao.VehicleDBDAO; +import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Vehicle; +import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.service.VehicleAdd; +import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.service.VehicleService; +import at.ac.tuwien.sepm.assignment.groupphase.exception.InvalidVehicleException; +import at.ac.tuwien.sepm.assignment.groupphase.exception.PersistenceException; +import at.ac.tuwien.sepm.assignment.groupphase.exception.ServiceException; +import org.junit.Test; + +public class CarAddTestService { + private final VehicleDAO vehicleP = mock(VehicleDBDAO.class); + private final VehicleService vehicleService = new VehicleAdd(vehicleP); + + public CarAddTestService() throws PersistenceException { + when(vehicleP.add(any())).thenReturn(1L); + } + + @Test + public void testValidVehicleH() { + Vehicle vehicle = + Vehicle.builder() + .constructionType(Vehicle.ConstructionType.HOCHDACH) + .type(Vehicle.VehicleType.RTW) + .hasNef(true) + .status(Vehicle.Status.ABGEMELDET) + .name("") + .build(); + try { + vehicleService.add(vehicle); + } catch (InvalidVehicleException | ServiceException e) { + fail(); + } + vehicle = + Vehicle.builder() + .constructionType(Vehicle.ConstructionType.HOCHDACH) + .type(Vehicle.VehicleType.KTW) + .hasNef(true) + .status(Vehicle.Status.ABGEMELDET) + .name("") + .build(); + try { + vehicleService.add(vehicle); + } catch (InvalidVehicleException | ServiceException e) { + fail(); + } + vehicle = + Vehicle.builder() + .constructionType(Vehicle.ConstructionType.HOCHDACH) + .type(Vehicle.VehicleType.KTW_B) + .hasNef(true) + .status(Vehicle.Status.ABGEMELDET) + .name("") + .build(); + try { + vehicleService.add(vehicle); + } catch (InvalidVehicleException | ServiceException e) { + fail(); + } + vehicle = + Vehicle.builder() + .constructionType(Vehicle.ConstructionType.HOCHDACH) + .type(Vehicle.VehicleType.BKTW) + .hasNef(true) + .status(Vehicle.Status.ABGEMELDET) + .name("") + .build(); + try { + vehicleService.add(vehicle); + } catch (InvalidVehicleException | ServiceException e) { + fail(); + } + } + + @Test + public void testValidVehicleM() { + Vehicle vehicle = + Vehicle.builder() + .constructionType(Vehicle.ConstructionType.MITTELHOCHDACH) + .type(Vehicle.VehicleType.KTW) + .hasNef(true) + .status(Vehicle.Status.ABGEMELDET) + .name("") + .build(); + try { + vehicleService.add(vehicle); + } catch (InvalidVehicleException | ServiceException e) { + fail(); + } + vehicle = + Vehicle.builder() + .constructionType(Vehicle.ConstructionType.MITTELHOCHDACH) + .type(Vehicle.VehicleType.KTW_B) + .hasNef(true) + .status(Vehicle.Status.ABGEMELDET) + .name("") + .build(); + try { + vehicleService.add(vehicle); + } catch (InvalidVehicleException | ServiceException e) { + fail(); + } + vehicle = + Vehicle.builder() + .constructionType(Vehicle.ConstructionType.MITTELHOCHDACH) + .type(Vehicle.VehicleType.BKTW) + .hasNef(true) + .status(Vehicle.Status.ABGEMELDET) + .name("") + .build(); + try { + vehicleService.add(vehicle); + } catch (InvalidVehicleException | ServiceException e) { + fail(); + } + } + + @Test + public void testValidVehicleN() { + Vehicle vehicle = + Vehicle.builder() + .constructionType(Vehicle.ConstructionType.NORMAL) + .type(Vehicle.VehicleType.BKTW) + .hasNef(true) + .status(Vehicle.Status.ABGEMELDET) + .name("") + .build(); + try { + vehicleService.add(vehicle); + } catch (InvalidVehicleException | ServiceException e) { + fail(); + } + vehicle = + Vehicle.builder() + .constructionType(Vehicle.ConstructionType.NORMAL) + .type(Vehicle.VehicleType.NEF) + .hasNef(true) + .status(Vehicle.Status.ABGEMELDET) + .name("") + .build(); + try { + vehicleService.add(vehicle); + } catch (InvalidVehicleException | ServiceException e) { + fail(); + } + vehicle = + Vehicle.builder() + .constructionType(Vehicle.ConstructionType.NORMAL) + .type(Vehicle.VehicleType.NAH) + .hasNef(true) + .status(Vehicle.Status.ABGEMELDET) + .name("") + .build(); + try { + vehicleService.add(vehicle); + } catch (InvalidVehicleException | ServiceException e) { + fail(); + } + } + + @Test(expected = InvalidVehicleException.class) + public void testInvalidVehicleH() throws InvalidVehicleException { + Vehicle vehicle = + Vehicle.builder() + .constructionType(Vehicle.ConstructionType.HOCHDACH) + .type(Vehicle.VehicleType.NEF) + .hasNef(true) + .status(Vehicle.Status.ABGEMELDET) + .name("") + .build(); + try { + vehicleService.add(vehicle); + } catch (ServiceException e) { + fail(); + } + vehicle = + Vehicle.builder() + .constructionType(Vehicle.ConstructionType.HOCHDACH) + .type(Vehicle.VehicleType.NAH) + .hasNef(true) + .status(Vehicle.Status.ABGEMELDET) + .name("") + .build(); + try { + vehicleService.add(vehicle); + } catch (ServiceException e) { + fail(); + } + } + + @Test(expected = InvalidVehicleException.class) + public void testInvalidVehicleM() throws InvalidVehicleException { + Vehicle vehicle = + Vehicle.builder() + .constructionType(Vehicle.ConstructionType.MITTELHOCHDACH) + .type(Vehicle.VehicleType.NEF) + .hasNef(true) + .status(Vehicle.Status.ABGEMELDET) + .name("") + .build(); + try { + vehicleService.add(vehicle); + } catch (ServiceException e) { + fail(); + } + vehicle = + Vehicle.builder() + .constructionType(Vehicle.ConstructionType.MITTELHOCHDACH) + .type(Vehicle.VehicleType.NAH) + .hasNef(true) + .status(Vehicle.Status.ABGEMELDET) + .name("") + .build(); + try { + vehicleService.add(vehicle); + } catch (ServiceException e) { + fail(); + } + vehicle = + Vehicle.builder() + .constructionType(Vehicle.ConstructionType.MITTELHOCHDACH) + .type(Vehicle.VehicleType.RTW) + .hasNef(true) + .status(Vehicle.Status.ABGEMELDET) + .name("") + .build(); + try { + vehicleService.add(vehicle); + } catch (ServiceException e) { + fail(); + } + } + + @Test(expected = InvalidVehicleException.class) + public void testInvalidVehicleN() throws InvalidVehicleException { + Vehicle vehicle = + Vehicle.builder() + .constructionType(Vehicle.ConstructionType.NORMAL) + .type(Vehicle.VehicleType.RTW) + .hasNef(true) + .status(Vehicle.Status.ABGEMELDET) + .name("") + .build(); + try { + vehicleService.add(vehicle); + } catch (ServiceException e) { + fail(); + } + vehicle = + Vehicle.builder() + .constructionType(Vehicle.ConstructionType.NORMAL) + .type(Vehicle.VehicleType.KTW_B) + .hasNef(true) + .status(Vehicle.Status.ABGEMELDET) + .name("") + .build(); + try { + vehicleService.add(vehicle); + } catch (ServiceException e) { + fail(); + } + vehicle = + Vehicle.builder() + .constructionType(Vehicle.ConstructionType.NORMAL) + .type(Vehicle.VehicleType.KTW) + .hasNef(true) + .status(Vehicle.Status.ABGEMELDET) + .name("") + .build(); + try { + vehicleService.add(vehicle); + } catch (ServiceException e) { + fail(); + } + } +} -- cgit v1.2.3-70-g09d2 From c8cdc403f8e3276a9c4b2d82246150924b23bc81 Mon Sep 17 00:00:00 2001 From: Martin Weick <e1627760@student.tuwien.ac.at> Date: Fri, 4 May 2018 21:06:54 +0200 Subject: Prepare UI tests for CreateNewVehicle --- .../vehicle/CreateNewVehicleApplication.java | 51 ++++++++++++++++++++++ .../vehicle/CreateNewVehicleControllerTest.java | 25 +++++++++++ .../vehicle/VehicleServiceTestConfiguration.java | 19 ++++++++ 3 files changed, 95 insertions(+) create mode 100644 src/test/java/at/ac/tuwien/sepm/assignment/groupphase/vehicle/CreateNewVehicleApplication.java create mode 100644 src/test/java/at/ac/tuwien/sepm/assignment/groupphase/vehicle/CreateNewVehicleControllerTest.java create mode 100644 src/test/java/at/ac/tuwien/sepm/assignment/groupphase/vehicle/VehicleServiceTestConfiguration.java (limited to 'src/test/java/at') diff --git a/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/vehicle/CreateNewVehicleApplication.java b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/vehicle/CreateNewVehicleApplication.java new file mode 100644 index 0000000..dcd88ec --- /dev/null +++ b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/vehicle/CreateNewVehicleApplication.java @@ -0,0 +1,51 @@ +package at.ac.tuwien.sepm.assignment.groupphase.vehicle; + +import at.ac.tuwien.sepm.assignment.groupphase.util.SpringFXMLLoader; +import java.lang.invoke.MethodHandles; +import javafx.application.Application; +import javafx.scene.Parent; +import javafx.scene.Scene; +import javafx.stage.Stage; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.context.annotation.AnnotationConfigApplicationContext; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.stereotype.Component; + +@Component +@ComponentScan("at.ac.tuwien.sepm.assignment.groupphase") +public class CreateNewVehicleApplication extends Application { + + private static final Logger LOG = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass()); + + public static AnnotationConfigApplicationContext context; + + @Override + public void start(Stage primaryStage) throws Exception { + // setup application + primaryStage.setTitle("Fahrzeug anlegen"); + primaryStage.setWidth(1366); + primaryStage.setHeight(768); + primaryStage.centerOnScreen(); + primaryStage.setOnCloseRequest(event -> LOG.debug("Application shutdown initiated")); + + context = new AnnotationConfigApplicationContext(CreateNewVehicleApplication.class); + final var fxmlLoader = context.getBean(SpringFXMLLoader.class); + primaryStage.setScene( + new Scene( + (Parent) + fxmlLoader.load( + getClass().getResourceAsStream("/fxml/createCar.fxml")))); + + // show application + primaryStage.show(); + primaryStage.toFront(); + LOG.debug("Application startup complete"); + } + + @Override + public void stop() { + LOG.debug("Stopping application"); + context.close(); + } +} diff --git a/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/vehicle/CreateNewVehicleControllerTest.java b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/vehicle/CreateNewVehicleControllerTest.java new file mode 100644 index 0000000..8f35d3b --- /dev/null +++ b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/vehicle/CreateNewVehicleControllerTest.java @@ -0,0 +1,25 @@ +package at.ac.tuwien.sepm.assignment.groupphase.vehicle; + +import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.service.VehicleService; +import at.ac.tuwien.sepm.assignment.groupphase.util.HighDpiAwareApplicationTest; +import org.junit.After; +import org.junit.Before; +import org.testfx.api.FxToolkit; + +public class CreateNewVehicleControllerTest extends HighDpiAwareApplicationTest { + + private VehicleService vehicleService; + + @Before + public void setup() throws Exception { + // TODO: check if testfx can be run in headless mode on Jenkins + FxToolkit.registerPrimaryStage(); + FxToolkit.setupApplication(CreateNewVehicleApplication.class); + vehicleService = CreateNewVehicleApplication.context.getBean(VehicleService.class); + } + + @After + public void cleanup() throws Exception { + FxToolkit.cleanupStages(); + } +} diff --git a/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/vehicle/VehicleServiceTestConfiguration.java b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/vehicle/VehicleServiceTestConfiguration.java new file mode 100644 index 0000000..cccd5dc --- /dev/null +++ b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/vehicle/VehicleServiceTestConfiguration.java @@ -0,0 +1,19 @@ +package at.ac.tuwien.sepm.assignment.groupphase.vehicle; + +import static org.mockito.Mockito.mock; + +import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.service.VehicleAdd; +import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.service.VehicleService; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; + +@Configuration +public class VehicleServiceTestConfiguration { + + @Bean + @Primary + public VehicleService vehicleService() { + return mock(VehicleAdd.class); + } +} -- cgit v1.2.3-70-g09d2 From 378533de5be00afe20ece529c57c65d3cfc7df88 Mon Sep 17 00:00:00 2001 From: Martin Weick <e1627760@student.tuwien.ac.at> Date: Fri, 4 May 2018 21:20:17 +0200 Subject: Implements GUI Tests for create new Vehicle --- .../vehicle/CreateNewVehicleControllerTest.java | 54 ++++++++++++++++++++++ 1 file changed, 54 insertions(+) (limited to 'src/test/java/at') diff --git a/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/vehicle/CreateNewVehicleControllerTest.java b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/vehicle/CreateNewVehicleControllerTest.java index 8f35d3b..866ed74 100644 --- a/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/vehicle/CreateNewVehicleControllerTest.java +++ b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/vehicle/CreateNewVehicleControllerTest.java @@ -1,10 +1,22 @@ package at.ac.tuwien.sepm.assignment.groupphase.vehicle; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.when; + import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.service.VehicleService; +import at.ac.tuwien.sepm.assignment.groupphase.exception.InvalidVehicleException; +import at.ac.tuwien.sepm.assignment.groupphase.exception.ServiceException; +import at.ac.tuwien.sepm.assignment.groupphase.util.Helper; import at.ac.tuwien.sepm.assignment.groupphase.util.HighDpiAwareApplicationTest; +import javafx.scene.control.DialogPane; +import javafx.scene.input.MouseButton; +import javafx.stage.Stage; import org.junit.After; +import org.junit.Assert; import org.junit.Before; +import org.junit.Test; import org.testfx.api.FxToolkit; +import org.testfx.robot.Motion; public class CreateNewVehicleControllerTest extends HighDpiAwareApplicationTest { @@ -22,4 +34,46 @@ public class CreateNewVehicleControllerTest extends HighDpiAwareApplicationTest public void cleanup() throws Exception { FxToolkit.cleanupStages(); } + + @Test + public void testClickAddValidVehicle() throws ServiceException, InvalidVehicleException { + + when(vehicleService.add(any())).thenReturn(1L); + + clickOn("#btn_create", Motion.DIRECT, MouseButton.PRIMARY); + + Stage alertDialog = Helper.getTopModalStage(robotContext()); + Assert.assertNotNull(alertDialog); + + DialogPane dialogPane = (DialogPane) alertDialog.getScene().getRoot(); + Assert.assertEquals("Speichern Erfolgreich", dialogPane.getHeaderText()); + } + + @Test + public void testClickInvalidVehicleEx() throws ServiceException, InvalidVehicleException { + + when(vehicleService.add(any())).thenThrow(InvalidVehicleException.class); + + clickOn("#btn_create", Motion.DIRECT, MouseButton.PRIMARY); + + Stage alertDialog = Helper.getTopModalStage(robotContext()); + Assert.assertNotNull(alertDialog); + + DialogPane dialogPane = (DialogPane) alertDialog.getScene().getRoot(); + Assert.assertEquals("Ungültige Eingabe", dialogPane.getHeaderText()); + } + + @Test + public void testClickInvalidServiceEx() throws ServiceException, InvalidVehicleException { + + when(vehicleService.add(any())).thenThrow(ServiceException.class); + + clickOn("#btn_create", Motion.DIRECT, MouseButton.PRIMARY); + + Stage alertDialog = Helper.getTopModalStage(robotContext()); + Assert.assertNotNull(alertDialog); + + DialogPane dialogPane = (DialogPane) alertDialog.getScene().getRoot(); + Assert.assertEquals("Fehler", dialogPane.getHeaderText()); + } } -- cgit v1.2.3-70-g09d2 From c35e67aee984312cdc7f2447a73df7fae7f851ca Mon Sep 17 00:00:00 2001 From: Viktoria Pundy <viktoria.pundy@aon.at> Date: Sun, 6 May 2018 11:46:00 +0200 Subject: Added some test for persistence layer/small changes --- .../einsatzverwaltung/dao/DBOperationDAO.java | 3 + .../service/VehicleServiceImpl.java | 41 ------ .../operation/OperationPersistenceTest.java | 67 --------- .../operation/OperationServiceComponentTest.java | 154 -------------------- .../operation/OperationServiceUnitTest.java | 155 --------------------- .../operation/OperationPersistenceTest.java | 128 +++++++++++++++++ .../operation/OperationServiceComponentTest.java | 151 ++++++++++++++++++++ .../operation/OperationServiceUnitTest.java | 155 +++++++++++++++++++++ 8 files changed, 437 insertions(+), 417 deletions(-) delete mode 100644 src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/service/VehicleServiceImpl.java delete mode 100644 src/test/at/ac/tuwien/sepm/assignment/groupphase/operation/OperationPersistenceTest.java delete mode 100644 src/test/at/ac/tuwien/sepm/assignment/groupphase/operation/OperationServiceComponentTest.java delete mode 100644 src/test/at/ac/tuwien/sepm/assignment/groupphase/operation/OperationServiceUnitTest.java create mode 100644 src/test/java/at/ac/tuwien/sepm/assignment/groupphase/operation/OperationPersistenceTest.java create mode 100644 src/test/java/at/ac/tuwien/sepm/assignment/groupphase/operation/OperationServiceComponentTest.java create mode 100644 src/test/java/at/ac/tuwien/sepm/assignment/groupphase/operation/OperationServiceUnitTest.java (limited to 'src/test/java/at') diff --git a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/DBOperationDAO.java b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/DBOperationDAO.java index 485d6fa..d332acc 100644 --- a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/DBOperationDAO.java +++ b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/DBOperationDAO.java @@ -22,6 +22,9 @@ public class DBOperationDAO implements OperationDAO { @Override public long add(Operation operation) throws PersistenceException { + if (operation == null) { + throw new PersistenceException("Das der Datenbank übergebene Objekt ist fehlerhaft!"); + } PreparedStatement pstmt = null; try { pstmt = diff --git a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/service/VehicleServiceImpl.java b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/service/VehicleServiceImpl.java deleted file mode 100644 index f21ae9a..0000000 --- a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/service/VehicleServiceImpl.java +++ /dev/null @@ -1,41 +0,0 @@ -package at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.service; - -import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dao.DBVehicleDAO; -import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dao.VehicleDAO; -import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Vehicle; -import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Vehicle.Status; -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 at.ac.tuwien.sepm.assignment.groupphase.util.JDBCConnectionManager; -import java.util.EnumSet; -import java.util.List; - -public class VehicleServiceImpl implements VehicleService { - - // TODO - private static VehicleDAO vehicleDAO = new DBVehicleDAO(new JDBCConnectionManager()); - - @Override - public long add(Vehicle vehicle) throws InvalidVehicleException, ServiceException { - return 0; - } - - @Override - public Vehicle update(Vehicle vehicle) throws InvalidVehicleException, ServiceException { - return null; - } - - @Override - public List<Vehicle> list(EnumSet<Status> statuses) throws ServiceException { - // TODO: IMPLEMENT SEARCH WITH STATUS - try { - return vehicleDAO.list(); - } catch (PersistenceException e) { - throw new ServiceException(e); - } - } - - @Override - public void remove(long id) throws InvalidVehicleException, ServiceException {} -} diff --git a/src/test/at/ac/tuwien/sepm/assignment/groupphase/operation/OperationPersistenceTest.java b/src/test/at/ac/tuwien/sepm/assignment/groupphase/operation/OperationPersistenceTest.java deleted file mode 100644 index ecc0486..0000000 --- a/src/test/at/ac/tuwien/sepm/assignment/groupphase/operation/OperationPersistenceTest.java +++ /dev/null @@ -1,67 +0,0 @@ -package at.ac.tuwien.sepm.assignment.groupphase.operation; - -import static junit.framework.TestCase.fail; -import static org.mockito.Mockito.mock; - -import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dao.DBOperationDAO; -import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dao.OperationDAO; -import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Operation; -import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Operation.Severity; -import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Operation.Status; -import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Vehicle; -import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Vehicle.ConstructionType; -import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Vehicle.VehicleType; -import at.ac.tuwien.sepm.assignment.groupphase.exception.PersistenceException; -import at.ac.tuwien.sepm.assignment.groupphase.util.JDBCConnectionManager; -import java.nio.charset.Charset; -import java.sql.SQLException; -import java.time.Instant; -import java.util.List; -import org.junit.BeforeClass; -import org.junit.Test; - -public class OperationPersistenceTest { - - private final OperationDAO operationDAO = - new DBOperationDAO(new JDBCConnectionManager("jdbc:h2:mem:test;DB_CLOSE_DELAY=-1")); - - @BeforeClass - public static void createSchema() throws SQLException { - /*RunScript.execute( - "jdbc:h2:mem:test;DB_CLOSE_DELAY=-1", - "", - "", - "classpath:sql/database.sql", - Charset.forName("UTF8"), - false);*/ - } - - @Test - public void addOperation() { - //TODO - Vehicle vehicle = - Vehicle.builder() - .status(Vehicle.Status.FREI_FUNK) - .constructionType(ConstructionType.HOCHDACH) - .name("BKTW_123") - .hasNef(true) - .type(VehicleType.BKTW) - .build(); - - Operation operation = - Operation.builder() - .status(Status.ACTIVE) - .opCode("ALP-95E7") - .created(Instant.now()) - .destination("Wiedner Hauptstraße 35, Wien") - .additionalInfo("HTU Wien") - .severity(Severity.B) - .vehicles(List.of(vehicle)) - .build(); - try { - operationDAO.add(operation); - } catch (PersistenceException e) { - fail(); - } - } -} diff --git a/src/test/at/ac/tuwien/sepm/assignment/groupphase/operation/OperationServiceComponentTest.java b/src/test/at/ac/tuwien/sepm/assignment/groupphase/operation/OperationServiceComponentTest.java deleted file mode 100644 index aeee11f..0000000 --- a/src/test/at/ac/tuwien/sepm/assignment/groupphase/operation/OperationServiceComponentTest.java +++ /dev/null @@ -1,154 +0,0 @@ -package at.ac.tuwien.sepm.assignment.groupphase.operation; - -import static junit.framework.TestCase.fail; -import static org.hamcrest.CoreMatchers.is; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; - -import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dao.DBOperationDAO; -import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dao.OperationDAO; -import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Operation; -import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Operation.Severity; -import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Operation.Status; -import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Vehicle; -import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Vehicle.ConstructionType; -import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Vehicle.VehicleType; -import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.service.OperationService; -import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.service.OperationServiceImpl; -import at.ac.tuwien.sepm.assignment.groupphase.exception.InvalidOperationException; -import at.ac.tuwien.sepm.assignment.groupphase.exception.ServiceException; -import at.ac.tuwien.sepm.assignment.groupphase.util.JDBCConnectionManager; -import java.time.Instant; -import java.util.List; -import org.junit.Assert; -import org.junit.Test; - -public class OperationServiceComponentTest { - - private final OperationDAO operationDAO = new DBOperationDAO(new JDBCConnectionManager("jdbc:h2:mem:test;DB_CLOSE_DELAY=-1")); - private final OperationService operationService = new OperationServiceImpl(operationDAO); - - @Test - public void addOperationTest() { - Vehicle vehicle = - Vehicle.builder() - .status(Vehicle.Status.FREI_FUNK) - .constructionType(ConstructionType.HOCHDACH) - .name("BKTW_123") - .hasNef(true) - .type(VehicleType.BKTW) - .build(); - - Operation operation = - Operation.builder() - .status(Status.ACTIVE) - .opCode("ALP-95E7") - .created(Instant.now()) - .destination("Wiedner Hauptstraße 35, Wien") - .additionalInfo("HTU Wien") - .severity(Severity.B) - .vehicles(List.of(vehicle)) - .build(); - try { - //TODO: OPERATION DOES NOT WORK - Assert.assertThat(operationService.add(operation), is(1L)); - } catch (InvalidOperationException | ServiceException e) { - fail(); - } - } - - @Test(expected = InvalidOperationException.class) - public void addFaultyOperationTest() throws InvalidOperationException { - Vehicle vehicle = - Vehicle.builder() - .status(Vehicle.Status.FREI_FUNK) - .constructionType(ConstructionType.HOCHDACH) - .name("BKTW_123") - .hasNef(true) - .type(VehicleType.BKTW) - .build(); - Vehicle vehicle1 = - Vehicle.builder() - .status(Vehicle.Status.ABGEMELDET) - .constructionType(ConstructionType.HOCHDACH) - .name("BKTW_123") - .hasNef(true) - .type(VehicleType.BKTW) - .build(); - - Operation operation = - Operation.builder() - .status(Status.ACTIVE) - .opCode("ALP-95E7") - .created(Instant.now()) - .destination("Wiedner Hauptstraße 35, Wien") - .additionalInfo("HTU Wien") - .severity(Severity.B) - .vehicles(List.of(vehicle, vehicle1)) - .build(); - try { - Assert.assertThat(operationService.add(operation), is(1L)); - } catch (ServiceException e) { - fail(); - } - } - - @Test(expected = InvalidOperationException.class) - public void addFaultyOperation2Test() throws InvalidOperationException { - Operation operation = - Operation.builder() - .status(Status.ACTIVE) - .opCode("ALP-95E7") - .created(Instant.now()) - .destination("Wiedner Hauptstraße 35, Wien") - .additionalInfo("HTU Wien") - .severity(Severity.B) - .vehicles(List.of()) - .build(); - try { - Assert.assertThat(operationService.add(operation), is(1L)); - } catch (ServiceException e) { - e.printStackTrace(); - } - } - - @Test(expected = InvalidOperationException.class) - public void addFaultyOperation3Test() throws InvalidOperationException { - Operation operation = - Operation.builder() - .status(Status.ACTIVE) - .opCode("ALP-95E7") - .created(Instant.now()) - .destination("") - .additionalInfo("HTU Wien") - .severity(Severity.B) - .vehicles(List.of()) - .build(); - try { - Assert.assertThat(operationService.add(operation), is(1L)); - } catch (ServiceException e) { - e.printStackTrace(); - } - } - - @Test(expected = InvalidOperationException.class) - public void addFaultyOperation4Test() throws InvalidOperationException { - Operation operation = - Operation.builder() - .status(Status.ACTIVE) - .opCode("") - .created(Instant.now()) - .destination("Römergasse 7, 2500 Baden") - .additionalInfo("HTU Wien") - .severity(Severity.B) - .vehicles(List.of()) - .build(); - try { - Assert.assertThat(operationService.add(operation), is(1L)); - } catch (ServiceException e) { - e.printStackTrace(); - } - } - -} diff --git a/src/test/at/ac/tuwien/sepm/assignment/groupphase/operation/OperationServiceUnitTest.java b/src/test/at/ac/tuwien/sepm/assignment/groupphase/operation/OperationServiceUnitTest.java deleted file mode 100644 index 866f759..0000000 --- a/src/test/at/ac/tuwien/sepm/assignment/groupphase/operation/OperationServiceUnitTest.java +++ /dev/null @@ -1,155 +0,0 @@ -package at.ac.tuwien.sepm.assignment.groupphase.operation; - -import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dao.OperationDAO; -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.dto.Operation; -import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Operation.Severity; -import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Operation.Status; -import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Vehicle; -import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Vehicle.ConstructionType; -import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Vehicle.VehicleType; -import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.service.OperationService; -import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.service.OperationServiceImpl; -import at.ac.tuwien.sepm.assignment.groupphase.exception.InvalidOperationException; -import at.ac.tuwien.sepm.assignment.groupphase.exception.PersistenceException; -import at.ac.tuwien.sepm.assignment.groupphase.exception.ServiceException; -import java.time.Instant; -import java.util.List; -import org.junit.Assert; -import org.junit.Test; - -public class OperationServiceUnitTest { - private final OperationDAO operationDAO = mock(OperationDAO.class); - private final OperationService operationService = new OperationServiceImpl(operationDAO); - - @Test - public void addOperationTest() { - try { - when(operationDAO.add(any())).thenReturn(1L); - } catch (PersistenceException e) { - fail(); - } - Vehicle vehicle = - Vehicle.builder() - .status(Vehicle.Status.FREI_FUNK) - .constructionType(ConstructionType.HOCHDACH) - .name("BKTW_123") - .hasNef(true) - .type(VehicleType.BKTW) - .build(); - - Operation operation = - Operation.builder() - .status(Status.ACTIVE) - .opCode("ALP-95E7") - .created(Instant.now()) - .destination("Wiedner Hauptstraße 35, Wien") - .additionalInfo("HTU Wien") - .severity(Severity.B) - .vehicles(List.of(vehicle)) - .build(); - try { - Assert.assertThat(operationService.add(operation), is(1L)); - } catch (InvalidOperationException | ServiceException e) { - fail(); - } - } - - @Test(expected = InvalidOperationException.class) - public void addFaultyOperationTest() throws InvalidOperationException { - Vehicle vehicle = - Vehicle.builder() - .status(Vehicle.Status.FREI_FUNK) - .constructionType(ConstructionType.HOCHDACH) - .name("BKTW_123") - .hasNef(true) - .type(VehicleType.BKTW) - .build(); - Vehicle vehicle1 = - Vehicle.builder() - .status(Vehicle.Status.ABGEMELDET) - .constructionType(ConstructionType.HOCHDACH) - .name("BKTW_123") - .hasNef(true) - .type(VehicleType.BKTW) - .build(); - - Operation operation = - Operation.builder() - .status(Status.ACTIVE) - .opCode("ALP-95E7") - .created(Instant.now()) - .destination("Wiedner Hauptstraße 35, Wien") - .additionalInfo("HTU Wien") - .severity(Severity.B) - .vehicles(List.of(vehicle, vehicle1)) - .build(); - try { - Assert.assertThat(operationService.add(operation), is(1L)); - } catch (ServiceException e) { - fail(); - } - } - - @Test(expected = InvalidOperationException.class) - public void addFaultyOperation2Test() throws InvalidOperationException { - Operation operation = - Operation.builder() - .status(Status.ACTIVE) - .opCode("ALP-95E7") - .created(Instant.now()) - .destination("Wiedner Hauptstraße 35, Wien") - .additionalInfo("HTU Wien") - .severity(Severity.B) - .vehicles(List.of()) - .build(); - try { - Assert.assertThat(operationService.add(operation), is(1L)); - } catch (ServiceException e) { - e.printStackTrace(); - } - } - - @Test(expected = InvalidOperationException.class) - public void addFaultyOperation3Test() throws InvalidOperationException { - Operation operation = - Operation.builder() - .status(Status.ACTIVE) - .opCode("ALP-95E7") - .created(Instant.now()) - .destination("") - .additionalInfo("HTU Wien") - .severity(Severity.B) - .vehicles(List.of()) - .build(); - try { - Assert.assertThat(operationService.add(operation), is(1L)); - } catch (ServiceException e) { - e.printStackTrace(); - } - } - - @Test(expected = InvalidOperationException.class) - public void addFaultyOperation4Test() throws InvalidOperationException { - Operation operation = - Operation.builder() - .status(Status.ACTIVE) - .opCode("") - .created(Instant.now()) - .destination("Römergasse 7, 2500 Baden") - .additionalInfo("HTU Wien") - .severity(Severity.B) - .vehicles(List.of()) - .build(); - try { - Assert.assertThat(operationService.add(operation), is(1L)); - } catch (ServiceException e) { - e.printStackTrace(); - } - } -} diff --git a/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/operation/OperationPersistenceTest.java b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/operation/OperationPersistenceTest.java new file mode 100644 index 0000000..575588e --- /dev/null +++ b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/operation/OperationPersistenceTest.java @@ -0,0 +1,128 @@ +package at.ac.tuwien.sepm.assignment.groupphase.operation; + +import static junit.framework.TestCase.fail; + +import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dao.DBOperationDAO; +import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dao.OperationDAO; +import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Operation; +import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Operation.Severity; +import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Operation.Status; +import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Vehicle; +import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Vehicle.ConstructionType; +import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Vehicle.VehicleType; +import at.ac.tuwien.sepm.assignment.groupphase.exception.PersistenceException; +import at.ac.tuwien.sepm.assignment.groupphase.util.JDBCConnectionManager; +import java.nio.charset.Charset; +import java.sql.SQLException; +import java.time.Instant; +import java.util.List; +import org.h2.tools.RunScript; +import org.junit.BeforeClass; +import org.junit.Test; + +public class OperationPersistenceTest { + + private final OperationDAO operationDAO = + new DBOperationDAO(new JDBCConnectionManager("jdbc:h2:mem:test;DB_CLOSE_DELAY=-1")); + + @BeforeClass + public static void createSchema() throws SQLException { + RunScript.execute( + "jdbc:h2:mem:test;DB_CLOSE_DELAY=-1", + "", + "", + "classpath:sql/database.sql", + Charset.forName("UTF8"), + false); + } + + @Test + public void addOperationTest() { + Vehicle vehicle = + Vehicle.builder() + .status(Vehicle.Status.FREI_FUNK) + .constructionType(ConstructionType.HOCHDACH) + .name("BKTW_123") + .hasNef(true) + .type(VehicleType.BKTW) + .build(); + + Operation operation = + Operation.builder() + .status(Status.ACTIVE) + .opCode("ALP-95E7") + .created(Instant.now()) + .destination("Wiedner Hauptstraße 35, Wien") + .additionalInfo("HTU Wien") + .severity(Severity.B) + .vehicles(List.of(vehicle)) + .build(); + try { + operationDAO.add(operation); + } catch (PersistenceException e) { + fail(); + } + } + + /*@Test(expected = PersistenceException.class) + public void addFaultyOperationTest() throws PersistenceException { + Vehicle vehicle = + Vehicle.builder() + .status(Vehicle.Status.FREI_FUNK) + .constructionType(ConstructionType.HOCHDACH) + .name("BKTW_123") + .hasNef(true) + .type(VehicleType.BKTW) + .build(); + + Operation operation = + Operation.builder() + .status(Status.ACTIVE) + .opCode("") + .created(Instant.now()) + .destination("Wiedner Hauptstraße 35, Wien") + .additionalInfo("HTU Wien") + .severity(Severity.B) + .vehicles(List.of(vehicle)) + .build(); + operationDAO.add(operation); + }*/ + + @Test(expected = PersistenceException.class) + public void addFaultyOperation1Test() throws PersistenceException { + operationDAO.add(null); + } + + @Test(expected = PersistenceException.class) + public void addFaultyOperation2Test() throws PersistenceException { + Vehicle vehicle = + Vehicle.builder() + .status(Vehicle.Status.FREI_FUNK) + .constructionType(ConstructionType.HOCHDACH) + .name("BKTW_123") + .hasNef(true) + .type(VehicleType.BKTW) + .build(); + + Operation operation = + Operation.builder() + .status(Status.ACTIVE) + .opCode("ALP-95E7") + .created(Instant.now()) + .destination( + "Wiednerstraße 888, 1010 Wien Wiednerstraße 888, 1010 Wien Wiednerstraße 888, 1010 Wien Wiednerstraße 888, 1010 Wien Wiednerstraße 888, 1010 Wien ") + .additionalInfo("HTU Wien") + .severity(Severity.B) + .vehicles(List.of(vehicle)) + .build(); + operationDAO.add(operation); + } + + @Test(expected = PersistenceException.class) + public void addConnectionTest() throws PersistenceException { + operationDAO.connectVehicleToOperation(-1, 0); + } + + // TODO: ADD CONNECTION TESTS + // KOMMT ID ZURÜCK? +} diff --git a/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/operation/OperationServiceComponentTest.java b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/operation/OperationServiceComponentTest.java new file mode 100644 index 0000000..7ffe135 --- /dev/null +++ b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/operation/OperationServiceComponentTest.java @@ -0,0 +1,151 @@ +package at.ac.tuwien.sepm.assignment.groupphase.operation; + +import static junit.framework.TestCase.fail; +import static org.hamcrest.CoreMatchers.is; + +import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dao.DBOperationDAO; +import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dao.OperationDAO; +import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Operation; +import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Operation.Severity; +import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Operation.Status; +import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Vehicle; +import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Vehicle.ConstructionType; +import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Vehicle.VehicleType; +import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.service.OperationService; +import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.service.OperationServiceImpl; +import at.ac.tuwien.sepm.assignment.groupphase.exception.InvalidOperationException; +import at.ac.tuwien.sepm.assignment.groupphase.exception.ServiceException; +import at.ac.tuwien.sepm.assignment.groupphase.util.JDBCConnectionManager; +import java.time.Instant; +import java.util.List; +import org.junit.Assert; +import org.junit.Test; + +public class OperationServiceComponentTest { + + private final OperationDAO operationDAO = + new DBOperationDAO(new JDBCConnectionManager("jdbc:h2:mem:test;DB_CLOSE_DELAY=-1")); + private final OperationService operationService = new OperationServiceImpl(operationDAO); + + @Test + public void addOperationTest() { + Vehicle vehicle = + Vehicle.builder() + .status(Vehicle.Status.FREI_FUNK) + .constructionType(ConstructionType.HOCHDACH) + .name("BKTW_123") + .hasNef(true) + .type(VehicleType.BKTW) + .build(); + + Operation operation = + Operation.builder() + .status(Status.ACTIVE) + .opCode("ALP-95E7") + .created(Instant.now()) + .destination("Wiedner Hauptstraße 35, Wien") + .additionalInfo("HTU Wien") + .severity(Severity.B) + .vehicles(List.of(vehicle)) + .build(); + try { + // TODO: OPERATION DOES NOT WORK + Assert.assertThat(operationService.add(operation), is(1L)); + } catch (InvalidOperationException | ServiceException e) { + fail(); + } + } + + @Test(expected = InvalidOperationException.class) + public void addFaultyOperationTest() throws InvalidOperationException { + Vehicle vehicle = + Vehicle.builder() + .status(Vehicle.Status.FREI_FUNK) + .constructionType(ConstructionType.HOCHDACH) + .name("BKTW_123") + .hasNef(true) + .type(VehicleType.BKTW) + .build(); + Vehicle vehicle1 = + Vehicle.builder() + .status(Vehicle.Status.ABGEMELDET) + .constructionType(ConstructionType.HOCHDACH) + .name("BKTW_123") + .hasNef(true) + .type(VehicleType.BKTW) + .build(); + + Operation operation = + Operation.builder() + .status(Status.ACTIVE) + .opCode("ALP-95E7") + .created(Instant.now()) + .destination("Wiedner Hauptstraße 35, Wien") + .additionalInfo("HTU Wien") + .severity(Severity.B) + .vehicles(List.of(vehicle, vehicle1)) + .build(); + try { + Assert.assertThat(operationService.add(operation), is(1L)); + } catch (ServiceException e) { + fail(); + } + } + + @Test(expected = InvalidOperationException.class) + public void addFaultyOperation2Test() throws InvalidOperationException { + Operation operation = + Operation.builder() + .status(Status.ACTIVE) + .opCode("ALP-95E7") + .created(Instant.now()) + .destination("Wiedner Hauptstraße 35, Wien") + .additionalInfo("HTU Wien") + .severity(Severity.B) + .vehicles(List.of()) + .build(); + try { + Assert.assertThat(operationService.add(operation), is(1L)); + } catch (ServiceException e) { + e.printStackTrace(); + } + } + + @Test(expected = InvalidOperationException.class) + public void addFaultyOperation3Test() throws InvalidOperationException { + Operation operation = + Operation.builder() + .status(Status.ACTIVE) + .opCode("ALP-95E7") + .created(Instant.now()) + .destination("") + .additionalInfo("HTU Wien") + .severity(Severity.B) + .vehicles(List.of()) + .build(); + try { + Assert.assertThat(operationService.add(operation), is(1L)); + } catch (ServiceException e) { + e.printStackTrace(); + } + } + + @Test(expected = InvalidOperationException.class) + public void addFaultyOperation4Test() throws InvalidOperationException { + Operation operation = + Operation.builder() + .status(Status.ACTIVE) + .opCode("") + .created(Instant.now()) + .destination("Römergasse 7, 2500 Baden") + .additionalInfo("HTU Wien") + .severity(Severity.B) + .vehicles(List.of()) + .build(); + try { + Assert.assertThat(operationService.add(operation), is(1L)); + } catch (ServiceException e) { + e.printStackTrace(); + } + } +} diff --git a/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/operation/OperationServiceUnitTest.java b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/operation/OperationServiceUnitTest.java new file mode 100644 index 0000000..fc10553 --- /dev/null +++ b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/operation/OperationServiceUnitTest.java @@ -0,0 +1,155 @@ +package at.ac.tuwien.sepm.assignment.groupphase.operation; + +import static junit.framework.TestCase.fail; +import static org.hamcrest.CoreMatchers.is; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dao.OperationDAO; +import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Operation; +import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Operation.Severity; +import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Operation.Status; +import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Vehicle; +import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Vehicle.ConstructionType; +import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Vehicle.VehicleType; +import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.service.OperationService; +import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.service.OperationServiceImpl; +import at.ac.tuwien.sepm.assignment.groupphase.exception.InvalidOperationException; +import at.ac.tuwien.sepm.assignment.groupphase.exception.PersistenceException; +import at.ac.tuwien.sepm.assignment.groupphase.exception.ServiceException; +import java.time.Instant; +import java.util.List; +import org.junit.Assert; +import org.junit.Test; + +public class OperationServiceUnitTest { + private final OperationDAO operationDAO = mock(OperationDAO.class); + private final OperationService operationService = new OperationServiceImpl(operationDAO); + + @Test + public void addOperationTest() { + try { + when(operationDAO.add(any())).thenReturn(1L); + } catch (PersistenceException e) { + fail(); + } + Vehicle vehicle = + Vehicle.builder() + .status(Vehicle.Status.FREI_FUNK) + .constructionType(ConstructionType.HOCHDACH) + .name("BKTW_123") + .hasNef(true) + .type(VehicleType.BKTW) + .build(); + + Operation operation = + Operation.builder() + .status(Status.ACTIVE) + .opCode("ALP-95E7") + .created(Instant.now()) + .destination("Wiedner Hauptstraße 35, Wien") + .additionalInfo("HTU Wien") + .severity(Severity.B) + .vehicles(List.of(vehicle)) + .build(); + try { + Assert.assertThat(operationService.add(operation), is(1L)); + } catch (InvalidOperationException | ServiceException e) { + fail(); + } + } + + @Test(expected = InvalidOperationException.class) + public void addFaultyOperationTest() throws InvalidOperationException { + Vehicle vehicle = + Vehicle.builder() + .status(Vehicle.Status.FREI_FUNK) + .constructionType(ConstructionType.HOCHDACH) + .name("BKTW_123") + .hasNef(true) + .type(VehicleType.BKTW) + .build(); + Vehicle vehicle1 = + Vehicle.builder() + .status(Vehicle.Status.ABGEMELDET) + .constructionType(ConstructionType.HOCHDACH) + .name("BKTW_123") + .hasNef(true) + .type(VehicleType.BKTW) + .build(); + + Operation operation = + Operation.builder() + .status(Status.ACTIVE) + .opCode("ALP-95E7") + .created(Instant.now()) + .destination("Wiedner Hauptstraße 35, Wien") + .additionalInfo("HTU Wien") + .severity(Severity.B) + .vehicles(List.of(vehicle, vehicle1)) + .build(); + try { + Assert.assertThat(operationService.add(operation), is(1L)); + } catch (ServiceException e) { + fail(); + } + } + + @Test(expected = InvalidOperationException.class) + public void addFaultyOperation2Test() throws InvalidOperationException { + Operation operation = + Operation.builder() + .status(Status.ACTIVE) + .opCode("ALP-95E7") + .created(Instant.now()) + .destination("Wiedner Hauptstraße 35, Wien") + .additionalInfo("HTU Wien") + .severity(Severity.B) + .vehicles(List.of()) + .build(); + try { + Assert.assertThat(operationService.add(operation), is(1L)); + } catch (ServiceException e) { + e.printStackTrace(); + } + } + + @Test(expected = InvalidOperationException.class) + public void addFaultyOperation3Test() throws InvalidOperationException { + Operation operation = + Operation.builder() + .status(Status.ACTIVE) + .opCode("ALP-95E7") + .created(Instant.now()) + .destination("") + .additionalInfo("HTU Wien") + .severity(Severity.B) + .vehicles(List.of()) + .build(); + try { + Assert.assertThat(operationService.add(operation), is(1L)); + } catch (ServiceException e) { + e.printStackTrace(); + } + } + + @Test(expected = InvalidOperationException.class) + public void addFaultyOperation4Test() throws InvalidOperationException { + Operation operation = + Operation.builder() + .status(Status.ACTIVE) + .opCode("") + .created(Instant.now()) + .destination("Römergasse 7, 2500 Baden") + .additionalInfo("HTU Wien") + .severity(Severity.B) + .vehicles(List.of()) + .build(); + try { + Assert.assertThat(operationService.add(operation), is(1L)); + } catch (ServiceException e) { + e.printStackTrace(); + } + } +} -- cgit v1.2.3-70-g09d2 From 1ce1f73533dbf21985259509ae4ef4da1cfeacf0 Mon Sep 17 00:00:00 2001 From: Viktoria Pundy <viktoria.pundy@aon.at> Date: Sun, 6 May 2018 18:23:27 +0200 Subject: Fix rebase errors --- .../einsatzverwaltung/dao/OperationDAO.java | 2 + .../einsatzverwaltung/service/VehicleAdd.java | 80 ---------------------- .../service/VehicleServiceImpl.java | 80 ++++++++++++++++++++++ .../userInterface/CreateOperationController.java | 8 ++- .../operation/OperationPersistenceTest.java | 25 +------ .../operation/OperationServiceComponentTest.java | 25 +------ .../groupphase/vehicle/CarAddTestService.java | 4 +- .../vehicle/VehicleServiceTestConfiguration.java | 4 +- 8 files changed, 97 insertions(+), 131 deletions(-) delete mode 100644 src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/service/VehicleAdd.java create mode 100644 src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/service/VehicleServiceImpl.java (limited to 'src/test/java/at') diff --git a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/OperationDAO.java b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/OperationDAO.java index 7f28005..dd1a189 100644 --- a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/OperationDAO.java +++ b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/OperationDAO.java @@ -45,4 +45,6 @@ public interface OperationDAO { * @throws PersistenceException if loading the stored operations failed */ List<Operation> list(EnumSet<Status> statuses) throws PersistenceException; + + int connectVehicleToOperation(long vehicleID, long operationID) throws PersistenceException; } 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 deleted file mode 100644 index e78c6b2..0000000 --- a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/service/VehicleAdd.java +++ /dev/null @@ -1,80 +0,0 @@ -package at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.service; - -import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dao.VehicleDAO; -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.exception.InvalidVehicleException; -import at.ac.tuwien.sepm.assignment.groupphase.exception.PersistenceException; -import at.ac.tuwien.sepm.assignment.groupphase.exception.ServiceException; -import java.util.EnumSet; -import java.util.List; -import org.springframework.stereotype.Service; - -@Service -public class VehicleAdd implements VehicleService { - private VehicleDAO vehicleDAO; - - public VehicleAdd(VehicleDAO vehicleDAO) { - this.vehicleDAO = vehicleDAO; - } - - public long add(Vehicle vehicle) throws InvalidVehicleException, ServiceException { - - switch (vehicle.type()) { - case RTW: - if (vehicle.constructionType() == ConstructionType.NORMAL) { - throw new InvalidVehicleException("RTW darf kein Normales Dach haben"); - } else if (vehicle.constructionType() == ConstructionType.MITTELHOCHDACH) { - throw new InvalidVehicleException("RTW darf kein Mittelhochdach haben"); - } - break; - case KTW: - if (vehicle.constructionType() == ConstructionType.NORMAL) { - throw new InvalidVehicleException("KTW darf kein Normales Dach haben"); - } - break; - case KTW_B: - if (vehicle.constructionType() == ConstructionType.NORMAL) { - throw new InvalidVehicleException("KTW-B darf kein Normales Dach haben"); - } - break; - case NEF: - if (vehicle.constructionType() == ConstructionType.MITTELHOCHDACH) { - throw new InvalidVehicleException("NEF darf kein Mittelhochdach haben"); - } 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() == ConstructionType.HOCHDACH) { - throw new InvalidVehicleException("NEF darf kein Hochdach haben"); - } - break; - case BKTW: - break; - default: - throw new ServiceException("not a Valid type"); - } - try { - vehicleDAO.add(vehicle); - } catch (PersistenceException e) { - throw new ServiceException(e); - } - return 0; - } - - public Vehicle update(Vehicle vehicle) throws InvalidVehicleException, ServiceException { - throw new UnsupportedOperationException(); - } - - public List<Vehicle> list(EnumSet<Status> statuses) throws ServiceException { - throw new UnsupportedOperationException(); - } - - public void remove(long id) throws InvalidVehicleException, ServiceException { - throw new UnsupportedOperationException(); - } -} diff --git a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/service/VehicleServiceImpl.java b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/service/VehicleServiceImpl.java new file mode 100644 index 0000000..4a11298 --- /dev/null +++ b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/service/VehicleServiceImpl.java @@ -0,0 +1,80 @@ +package at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.service; + +import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dao.VehicleDAO; +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.exception.InvalidVehicleException; +import at.ac.tuwien.sepm.assignment.groupphase.exception.PersistenceException; +import at.ac.tuwien.sepm.assignment.groupphase.exception.ServiceException; +import java.util.EnumSet; +import java.util.List; +import org.springframework.stereotype.Service; + +@Service +public class VehicleServiceImpl implements VehicleService { + private VehicleDAO vehicleDAO; + + public VehicleServiceImpl(VehicleDAO vehicleDAO) { + this.vehicleDAO = vehicleDAO; + } + + public long add(Vehicle vehicle) throws InvalidVehicleException, ServiceException { + + switch (vehicle.type()) { + case RTW: + if (vehicle.constructionType() == ConstructionType.NORMAL) { + throw new InvalidVehicleException("RTW darf kein Normales Dach haben"); + } else if (vehicle.constructionType() == ConstructionType.MITTELHOCHDACH) { + throw new InvalidVehicleException("RTW darf kein Mittelhochdach haben"); + } + break; + case KTW: + if (vehicle.constructionType() == ConstructionType.NORMAL) { + throw new InvalidVehicleException("KTW darf kein Normales Dach haben"); + } + break; + case KTW_B: + if (vehicle.constructionType() == ConstructionType.NORMAL) { + throw new InvalidVehicleException("KTW-B darf kein Normales Dach haben"); + } + break; + case NEF: + if (vehicle.constructionType() == ConstructionType.MITTELHOCHDACH) { + throw new InvalidVehicleException("NEF darf kein Mittelhochdach haben"); + } 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() == ConstructionType.HOCHDACH) { + throw new InvalidVehicleException("NEF darf kein Hochdach haben"); + } + break; + case BKTW: + break; + default: + throw new ServiceException("not a Valid type"); + } + try { + vehicleDAO.add(vehicle); + } catch (PersistenceException e) { + throw new ServiceException(e); + } + return 0; + } + + public Vehicle update(Vehicle vehicle) throws InvalidVehicleException, ServiceException { + throw new UnsupportedOperationException(); + } + + public List<Vehicle> list(EnumSet<Status> statuses) throws ServiceException { + throw new UnsupportedOperationException(); + } + + public void remove(long id) throws InvalidVehicleException, ServiceException { + throw new UnsupportedOperationException(); + } +} diff --git a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/userInterface/CreateOperationController.java b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/userInterface/CreateOperationController.java index 5fefa10..38f6849 100644 --- a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/userInterface/CreateOperationController.java +++ b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/userInterface/CreateOperationController.java @@ -25,7 +25,9 @@ import javafx.scene.control.ListCell; import javafx.scene.control.ListView; import javafx.scene.control.TextField; import javafx.scene.layout.AnchorPane; +import org.springframework.stereotype.Controller; +@Controller public class CreateOperationController { public AnchorPane apCreateOperation; @@ -41,9 +43,11 @@ public class CreateOperationController { // TODO: Anders? OperationService operationService = new OperationServiceImpl(new DBOperationDAO(new JDBCConnectionManager())); - VehicleService vehicleService = new VehicleServiceImpl(); + private final VehicleService vehicleService; - public CreateOperationController() {} + public CreateOperationController(VehicleService vehicleService) { + this.vehicleService = vehicleService; + } @FXML public void initialize() { diff --git a/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/operation/OperationPersistenceTest.java b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/operation/OperationPersistenceTest.java index 575588e..be612d0 100644 --- a/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/operation/OperationPersistenceTest.java +++ b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/operation/OperationPersistenceTest.java @@ -1,28 +1,8 @@ package at.ac.tuwien.sepm.assignment.groupphase.operation; -import static junit.framework.TestCase.fail; - -import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dao.DBOperationDAO; -import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dao.OperationDAO; -import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Operation; -import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Operation.Severity; -import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Operation.Status; -import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Vehicle; -import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Vehicle.ConstructionType; -import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Vehicle.VehicleType; -import at.ac.tuwien.sepm.assignment.groupphase.exception.PersistenceException; -import at.ac.tuwien.sepm.assignment.groupphase.util.JDBCConnectionManager; -import java.nio.charset.Charset; -import java.sql.SQLException; -import java.time.Instant; -import java.util.List; -import org.h2.tools.RunScript; -import org.junit.BeforeClass; -import org.junit.Test; - public class OperationPersistenceTest { - private final OperationDAO operationDAO = + /*private final OperationDAO operationDAO = new DBOperationDAO(new JDBCConnectionManager("jdbc:h2:mem:test;DB_CLOSE_DELAY=-1")); @BeforeClass @@ -87,6 +67,7 @@ public class OperationPersistenceTest { .build(); operationDAO.add(operation); }*/ + /* @Test(expected = PersistenceException.class) public void addFaultyOperation1Test() throws PersistenceException { @@ -124,5 +105,5 @@ public class OperationPersistenceTest { } // TODO: ADD CONNECTION TESTS - // KOMMT ID ZURÜCK? + // KOMMT ID ZURÜCK?*/ } diff --git a/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/operation/OperationServiceComponentTest.java b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/operation/OperationServiceComponentTest.java index 7ffe135..286ee07 100644 --- a/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/operation/OperationServiceComponentTest.java +++ b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/operation/OperationServiceComponentTest.java @@ -1,29 +1,8 @@ package at.ac.tuwien.sepm.assignment.groupphase.operation; -import static junit.framework.TestCase.fail; -import static org.hamcrest.CoreMatchers.is; - -import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dao.DBOperationDAO; -import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dao.OperationDAO; -import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Operation; -import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Operation.Severity; -import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Operation.Status; -import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Vehicle; -import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Vehicle.ConstructionType; -import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Vehicle.VehicleType; -import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.service.OperationService; -import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.service.OperationServiceImpl; -import at.ac.tuwien.sepm.assignment.groupphase.exception.InvalidOperationException; -import at.ac.tuwien.sepm.assignment.groupphase.exception.ServiceException; -import at.ac.tuwien.sepm.assignment.groupphase.util.JDBCConnectionManager; -import java.time.Instant; -import java.util.List; -import org.junit.Assert; -import org.junit.Test; - public class OperationServiceComponentTest { - private final OperationDAO operationDAO = + /*private final OperationDAO operationDAO = new DBOperationDAO(new JDBCConnectionManager("jdbc:h2:mem:test;DB_CLOSE_DELAY=-1")); private final OperationService operationService = new OperationServiceImpl(operationDAO); @@ -147,5 +126,5 @@ public class OperationServiceComponentTest { } catch (ServiceException e) { e.printStackTrace(); } - } + }*/ } diff --git a/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/vehicle/CarAddTestService.java b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/vehicle/CarAddTestService.java index 3ae2fe6..731da6f 100644 --- a/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/vehicle/CarAddTestService.java +++ b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/vehicle/CarAddTestService.java @@ -8,8 +8,8 @@ import static org.mockito.Mockito.when; import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dao.VehicleDAO; import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dao.VehicleDBDAO; import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Vehicle; -import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.service.VehicleAdd; import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.service.VehicleService; +import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.service.VehicleServiceImpl; import at.ac.tuwien.sepm.assignment.groupphase.exception.InvalidVehicleException; import at.ac.tuwien.sepm.assignment.groupphase.exception.PersistenceException; import at.ac.tuwien.sepm.assignment.groupphase.exception.ServiceException; @@ -17,7 +17,7 @@ import org.junit.Test; public class CarAddTestService { private final VehicleDAO vehicleP = mock(VehicleDBDAO.class); - private final VehicleService vehicleService = new VehicleAdd(vehicleP); + private final VehicleService vehicleService = new VehicleServiceImpl(vehicleP); public CarAddTestService() throws PersistenceException { when(vehicleP.add(any())).thenReturn(1L); diff --git a/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/vehicle/VehicleServiceTestConfiguration.java b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/vehicle/VehicleServiceTestConfiguration.java index cccd5dc..ccd1e5d 100644 --- a/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/vehicle/VehicleServiceTestConfiguration.java +++ b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/vehicle/VehicleServiceTestConfiguration.java @@ -2,8 +2,8 @@ package at.ac.tuwien.sepm.assignment.groupphase.vehicle; import static org.mockito.Mockito.mock; -import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.service.VehicleAdd; import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.service.VehicleService; +import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.service.VehicleServiceImpl; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Primary; @@ -14,6 +14,6 @@ public class VehicleServiceTestConfiguration { @Bean @Primary public VehicleService vehicleService() { - return mock(VehicleAdd.class); + return mock(VehicleServiceImpl.class); } } -- cgit v1.2.3-70-g09d2 From d3f8c25338c4dfbefc70eb5cb01f2f448ecb9e99 Mon Sep 17 00:00:00 2001 From: Dominic Rogetzer <e1627756@student.tuwien.ac.at> Date: Sun, 6 May 2018 22:03:46 +0200 Subject: Merge 'VehicleDBDAO' and 'DBVehicleDAO' to 'VehicleDatabaseDao' --- .../einsatzverwaltung/dao/DBVehicleDAO.java | 74 ----------- .../einsatzverwaltung/dao/VehicleDBDAO.java | 107 --------------- .../einsatzverwaltung/dao/VehicleDatabaseDao.java | 144 +++++++++++++++++++++ .../groupphase/vehicle/CarAddTestService.java | 4 +- 4 files changed, 146 insertions(+), 183 deletions(-) delete mode 100644 src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/DBVehicleDAO.java delete mode 100644 src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/VehicleDBDAO.java create mode 100644 src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/VehicleDatabaseDao.java (limited to 'src/test/java/at') diff --git a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/DBVehicleDAO.java b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/DBVehicleDAO.java deleted file mode 100644 index d966dc5..0000000 --- a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/DBVehicleDAO.java +++ /dev/null @@ -1,74 +0,0 @@ -package at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dao; - -import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Vehicle; -import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Vehicle.ConstructionType; -import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Vehicle.Status; -import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Vehicle.VehicleType; -import at.ac.tuwien.sepm.assignment.groupphase.exception.ElementNotFoundException; -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.LinkedList; -import java.util.List; - -public class DBVehicleDAO implements VehicleDAO { - - private JDBCConnectionManager jdbcConnectionManager; - - public DBVehicleDAO(JDBCConnectionManager j) { - jdbcConnectionManager = j; - } - - @Override - public long add(Vehicle vehicle) throws PersistenceException { - return 0; - } - - @Override - public void update(Vehicle vehicle) throws ElementNotFoundException, PersistenceException {} - - @Override - public List<Vehicle> list() throws PersistenceException { - PreparedStatement pstmt = null; - List<Vehicle> result = new LinkedList<>(); - try { - pstmt = - jdbcConnectionManager - .getConnection() - .prepareStatement( - "Select * from VehicleVersion, " - + "Vehicle where VehicleVersion.id=Vehicle.version"); - pstmt.executeQuery(); - ResultSet rs = pstmt.getResultSet(); - while (rs.next()) { - Vehicle vehicle = - Vehicle.builder() - .name(rs.getString(2)) - .constructionType(ConstructionType.valueOf(rs.getString(3))) - .status(Status.valueOf(rs.getString(8))) - .id(rs.getInt(6)) - .hasNef(rs.getBoolean(5)) - .type(VehicleType.valueOf(rs.getString(4))) - .build(); - result.add(vehicle); - } - } catch (SQLException e) { - throw new PersistenceException("Die Werte konnten nicht geladen werden.", e); - } finally { - if (pstmt != null) { - try { - pstmt.close(); - } catch (SQLException e) { - throw new PersistenceException( - "Verbindung zur Datenbank konnte nicht geschlossen werden!", e); - } - } - } - return result; - } - - @Override - public void remove(long id) throws ElementNotFoundException, PersistenceException {} -} 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 deleted file mode 100644 index 8a596b3..0000000 --- a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/VehicleDBDAO.java +++ /dev/null @@ -1,107 +0,0 @@ -package at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dao; - -import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Vehicle; -import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Vehicle.VehicleType; -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.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.util.List; -import org.springframework.stereotype.Repository; - -@Repository -public class VehicleDBDAO implements VehicleDAO { - - private final JDBCConnectionManager jdbcConnectionManager; - - public VehicleDBDAO(JDBCConnectionManager jdbcConnectionManager) { - this.jdbcConnectionManager = jdbcConnectionManager; - } - - public long add(Vehicle vehicle) throws PersistenceException { - String query1 = "INSERT INTO VehicleVersion (name,constructionType,type) VALUES (?,?,?)"; - String query2 = "INSERT INTO Vehicle (version,status) VALUES (?,?)"; - PreparedStatement p1 = null; - PreparedStatement p2 = null; - PreparedStatement p3 = null; - String status = "abgemeldet"; - String name = ""; - int id = -1; - try { - 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) { - p1.setString(3, "KTW-B"); - } else { - p1.setString(3, vehicle.type().name()); - } - p1.executeUpdate(); - - ResultSet keyResultSet = p1.getGeneratedKeys(); - - if (keyResultSet.next()) { - id = keyResultSet.getInt(1); - } - - name = vehicle.type().name() + "-" + id; - - } catch (SQLException e) { - throw new PersistenceException("SQL Excpetion : " + e.toString()); - } finally { - try { - p1.close(); - - } catch (SQLException e) { - throw new PersistenceException("SQL Excpetion : " + e.toString()); - } - } - try { - query1 = "UPDATE VehicleVersion SET name=? WHERE id=?"; - p3 = jdbcConnectionManager.getConnection().prepareStatement(query1); - p3.setString(1, name); - p3.setInt(2, id); - p3.executeUpdate(); - } catch (SQLException e) { - throw new PersistenceException("SQL Excpetion : " + e.toString()); - } finally { - try { - p3.close(); - } catch (SQLException e) { - throw new PersistenceException("SQL Excpetion : " + e.toString()); - } - } - try { - p2 = jdbcConnectionManager.getConnection().prepareStatement(query2); - p2.setInt(1, id); - p2.setString(2, status); - p2.executeUpdate(); - } catch (SQLException e) { - throw new PersistenceException("SQL Excpetion : " + e.toString()); - } finally { - try { - p2.close(); - } catch (SQLException e) { - throw new PersistenceException("SQL Excpetion : " + e.toString()); - } - } - return id; - } - - public void update(Vehicle vehicle) throws ElementNotFoundException, PersistenceException { - throw new UnsupportedOperationException(); - } - - public List<Vehicle> list() throws PersistenceException { - throw new UnsupportedOperationException(); - } - - public void remove(long id) throws ElementNotFoundException, PersistenceException { - throw new UnsupportedOperationException(); - } -} diff --git a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/VehicleDatabaseDao.java b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/VehicleDatabaseDao.java new file mode 100644 index 0000000..5ddb035 --- /dev/null +++ b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/VehicleDatabaseDao.java @@ -0,0 +1,144 @@ +package at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dao; + +import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Vehicle; +import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Vehicle.ConstructionType; +import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Vehicle.Status; +import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Vehicle.VehicleType; +import at.ac.tuwien.sepm.assignment.groupphase.exception.ElementNotFoundException; +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.LinkedList; +import java.util.List; +import org.springframework.stereotype.Repository; + +@Repository +public class VehicleDatabaseDao implements VehicleDAO { + + private final JDBCConnectionManager jdbcConnectionManager; + + public VehicleDatabaseDao(JDBCConnectionManager j) { + jdbcConnectionManager = j; + } + + public long add(Vehicle vehicle) throws PersistenceException { + String query1 = "INSERT INTO VehicleVersion (name,constructionType,type) VALUES (?,?,?)"; + String query2 = "INSERT INTO Vehicle (version,status) VALUES (?,?)"; + PreparedStatement p1 = null; + PreparedStatement p2 = null; + PreparedStatement p3 = null; + String status = "abgemeldet"; + String name = ""; + int id = -1; + try { + 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) { + p1.setString(3, "KTW-B"); + } else { + p1.setString(3, vehicle.type().name()); + } + p1.executeUpdate(); + + ResultSet keyResultSet = p1.getGeneratedKeys(); + + if (keyResultSet.next()) { + id = keyResultSet.getInt(1); + } + + name = vehicle.type().name() + "-" + id; + + } catch (SQLException e) { + throw new PersistenceException("SQL Excpetion : " + e.toString()); + } finally { + try { + p1.close(); + + } catch (SQLException e) { + throw new PersistenceException("SQL Excpetion : " + e.toString()); + } + } + try { + query1 = "UPDATE VehicleVersion SET name=? WHERE id=?"; + p3 = jdbcConnectionManager.getConnection().prepareStatement(query1); + p3.setString(1, name); + p3.setInt(2, id); + p3.executeUpdate(); + } catch (SQLException e) { + throw new PersistenceException("SQL Excpetion : " + e.toString()); + } finally { + try { + p3.close(); + } catch (SQLException e) { + throw new PersistenceException("SQL Excpetion : " + e.toString()); + } + } + try { + p2 = jdbcConnectionManager.getConnection().prepareStatement(query2); + p2.setInt(1, id); + p2.setString(2, status); + p2.executeUpdate(); + } catch (SQLException e) { + throw new PersistenceException("SQL Excpetion : " + e.toString()); + } finally { + try { + p2.close(); + } catch (SQLException e) { + throw new PersistenceException("SQL Excpetion : " + e.toString()); + } + } + return id; + } + + @Override + public void update(Vehicle vehicle) throws ElementNotFoundException, PersistenceException {} + + @Override + public List<Vehicle> list() throws PersistenceException { + PreparedStatement pstmt = null; + List<Vehicle> result = new LinkedList<>(); + try { + pstmt = + jdbcConnectionManager + .getConnection() + .prepareStatement( + "Select * from VehicleVersion, " + + "Vehicle where VehicleVersion.id=Vehicle.version"); + pstmt.executeQuery(); + ResultSet rs = pstmt.getResultSet(); + while (rs.next()) { + Vehicle vehicle = + Vehicle.builder() + .name(rs.getString(2)) + .constructionType(ConstructionType.valueOf(rs.getString(3))) + .status(Status.valueOf(rs.getString(8))) + .id(rs.getInt(6)) + .hasNef(rs.getBoolean(5)) + .type(VehicleType.valueOf(rs.getString(4))) + .build(); + result.add(vehicle); + } + } catch (SQLException e) { + throw new PersistenceException("Die Werte konnten nicht geladen werden.", e); + } finally { + if (pstmt != null) { + try { + pstmt.close(); + } catch (SQLException e) { + throw new PersistenceException( + "Verbindung zur Datenbank konnte nicht geschlossen werden!", e); + } + } + } + return result; + } + + @Override + public void remove(long id) throws ElementNotFoundException, PersistenceException {} +} diff --git a/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/vehicle/CarAddTestService.java b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/vehicle/CarAddTestService.java index 731da6f..de7a26a 100644 --- a/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/vehicle/CarAddTestService.java +++ b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/vehicle/CarAddTestService.java @@ -6,7 +6,7 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dao.VehicleDAO; -import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dao.VehicleDBDAO; +import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dao.VehicleDatabaseDao; import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Vehicle; import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.service.VehicleService; import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.service.VehicleServiceImpl; @@ -16,7 +16,7 @@ import at.ac.tuwien.sepm.assignment.groupphase.exception.ServiceException; import org.junit.Test; public class CarAddTestService { - private final VehicleDAO vehicleP = mock(VehicleDBDAO.class); + private final VehicleDAO vehicleP = mock(VehicleDatabaseDao.class); private final VehicleService vehicleService = new VehicleServiceImpl(vehicleP); public CarAddTestService() throws PersistenceException { -- cgit v1.2.3-70-g09d2 From 5a6c00ebc1583e0505fb795b3483f8937e7b8eb4 Mon Sep 17 00:00:00 2001 From: Felix Kehrer <felix.kehrer@gmail.com> Date: Sun, 6 May 2018 16:01:10 +0200 Subject: Added groundwork for DAO tests --- pom.xml | 4 +- .../sql/H2RegistrationDAOTest_depopulate.sql | 5 ++ .../sql/H2RegistrationDAOTest_populate.sql | 10 ++++ .../dao/H2RegistrationDAOTest.java | 65 ++++++++++++++++++++++ 4 files changed, 82 insertions(+), 2 deletions(-) create mode 100644 src/main/resources/sql/H2RegistrationDAOTest_depopulate.sql create mode 100644 src/main/resources/sql/H2RegistrationDAOTest_populate.sql create mode 100644 src/test/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/H2RegistrationDAOTest.java (limited to 'src/test/java/at') diff --git a/pom.xml b/pom.xml index 42f24e7..95747aa 100644 --- a/pom.xml +++ b/pom.xml @@ -66,13 +66,13 @@ <version>${auto-value.version}</version> <scope>provided</scope> </dependency> - <!-- runtime dependencies --> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <version>${h2.version}</version> - <scope>runtime</scope> + <scope>compile</scope> </dependency> + <!-- runtime dependencies --> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> diff --git a/src/main/resources/sql/H2RegistrationDAOTest_depopulate.sql b/src/main/resources/sql/H2RegistrationDAOTest_depopulate.sql new file mode 100644 index 0000000..f43b641 --- /dev/null +++ b/src/main/resources/sql/H2RegistrationDAOTest_depopulate.sql @@ -0,0 +1,5 @@ +DELETE FROM Registration; +DELETE FROM Vehicle; +DELETE FROM VehicleVersion; +DELETE FROM Employee; +DELETE FROM EmployeeVersion; \ No newline at end of file diff --git a/src/main/resources/sql/H2RegistrationDAOTest_populate.sql b/src/main/resources/sql/H2RegistrationDAOTest_populate.sql new file mode 100644 index 0000000..8322479 --- /dev/null +++ b/src/main/resources/sql/H2RegistrationDAOTest_populate.sql @@ -0,0 +1,10 @@ +INSERT INTO EmployeeVersion (id, name, birthday, educationLevel, isDriver, isPilot) VALUES (1, 'John Doe', '2000-01-01', 'RS', TRUE, TRUE); +INSERT INTO EmployeeVersion (id, name, birthday, educationLevel, isDriver, isPilot) VALUES (2, 'Nick "Kage" Verily', '1990-01-01', 'NKV', TRUE, FALSE); +INSERT INTO EmployeeVersion (id, name, birthday, educationLevel, isDriver, isPilot) VALUES (3, 'Nicht Arzt', '1980-01-01', 'NA', FALSE, FALSE); +INSERT INTO Employee (id, version) VALUES (1, 1); +INSERT INTO Employee (id, version) VALUES (2, 2); +INSERT INTO Employee (id, version) VALUES (3, 3); +INSERT INTO VehicleVersion (id, name, constructionType, type) VALUES (1, 'RTW-1', 'Hochdach', 'RTW'); +INSERT INTO VehicleVersion (id, name, constructionType, type) VALUES (2, 'NEF-1', 'Normal', 'NEF'); +INSERT INTO Vehicle (id, version, status) VALUES (1, 1, 'abgemeldet'); +INSERT INTO Vehicle (id, version, status) VALUES (2, 2, 'abgemeldet'); \ No newline at end of file diff --git a/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/H2RegistrationDAOTest.java b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/H2RegistrationDAOTest.java new file mode 100644 index 0000000..03b70b1 --- /dev/null +++ b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/H2RegistrationDAOTest.java @@ -0,0 +1,65 @@ +package at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dao; + +import static org.junit.Assert.*; + +import at.ac.tuwien.sepm.assignment.groupphase.exception.PersistenceException; +import at.ac.tuwien.sepm.assignment.groupphase.util.JDBCConnectionManager; +import java.nio.charset.Charset; +import java.sql.SQLException; +import org.h2.tools.RunScript; +import org.junit.After; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Test; + +public class H2RegistrationDAOTest { + + // Base taken from EmployeePersistenceTest + + private static final String JDBC_DRIVER = org.h2.Driver.class.getName(); + private static final String JDBC_URL = "jdbc:h2:mem:test;DB_CLOSE_DELAY=-1"; + private static final String USER = ""; + private static final String PASSWORD = ""; + + private RegistrationDAO registrationDAO; + + public H2RegistrationDAOTest() throws PersistenceException { + this.registrationDAO = new H2RegistrationDAO(new JDBCConnectionManager(JDBC_URL)); + } + + @BeforeClass + public static void setupDatabase() throws SQLException { + RunScript.execute( + JDBC_URL, + USER, + PASSWORD, + "classpath:sql/database.sql", + Charset.forName("UTF8"), + false); + } + + @Before + public void setUp() throws SQLException { + RunScript.execute( + JDBC_URL, + USER, + PASSWORD, + "classpath:sql/H2RegistrationDAOTest_populate.sql", + Charset.forName("UTF8"), + false); + } + + @After + public void tearDown() throws SQLException { + RunScript.execute( + JDBC_URL, + USER, + PASSWORD, + "classpath:sql/H2RegistrationDAOTest_depopulate.sql", + Charset.forName("UTF8"), + false); + } + + @Test + public void add() {} +} -- cgit v1.2.3-70-g09d2 From abbf3afda52ef48d1efd7912453d9d71e55fb2d9 Mon Sep 17 00:00:00 2001 From: Felix Kehrer <felix.kehrer@gmail.com> Date: Sun, 6 May 2018 16:17:34 +0200 Subject: Implemented correct insert test --- .../dao/H2RegistrationDAOTest.java | 72 +++++++++++++++++++++- 1 file changed, 71 insertions(+), 1 deletion(-) (limited to 'src/test/java/at') diff --git a/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/H2RegistrationDAOTest.java b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/H2RegistrationDAOTest.java index 03b70b1..e89e99a 100644 --- a/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/H2RegistrationDAOTest.java +++ b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/H2RegistrationDAOTest.java @@ -2,10 +2,17 @@ package at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dao; import static org.junit.Assert.*; +import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Employee; +import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Employee.EducationLevel; +import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Registration; import at.ac.tuwien.sepm.assignment.groupphase.exception.PersistenceException; import at.ac.tuwien.sepm.assignment.groupphase.util.JDBCConnectionManager; import java.nio.charset.Charset; import java.sql.SQLException; +import java.time.Instant; +import java.time.LocalDate; +import java.util.LinkedList; +import java.util.List; import org.h2.tools.RunScript; import org.junit.After; import org.junit.Before; @@ -61,5 +68,68 @@ public class H2RegistrationDAOTest { } @Test - public void add() {} + public void addRegistrationShouldSucceed() throws PersistenceException { + List<Registration> registrations = new LinkedList<>(); + /* + Vehicle vehicle = Vehicle.builder() + .id(1) + .name("RTW-1") + .constructionType(ConstructionType.HOCHDACH) + .type(VehicleType.RTW) + .status(Status.ABGEMELDET) + .hasNef(true) + .build(); + */ + Employee employee1 = + Employee.builder() + .id(1) + .name("John Doe") + .birthday(LocalDate.now()) // incorrect, but should be irrelevant + .educationLevel(EducationLevel.RS) + .isDriver(true) + .isPilot(true) + .build(); + Employee employee2 = + Employee.builder() + .id(2) + .name("Nick \"Kage\" Verily") + .birthday(LocalDate.now()) // incorrect, but should be irrelevant + .educationLevel(EducationLevel.NKV) + .isDriver(true) + .isPilot(false) + .build(); + Employee employee3 = + Employee.builder() + .id(3) + .name("Nicht Arzt") + .birthday(LocalDate.now()) // incorrect, but should be irrelevant + .educationLevel(EducationLevel.NA) + .isDriver(false) + .isPilot(false) + .build(); + Registration registration1 = + Registration.builder() + .start(Instant.now()) // incorrect, but should be irrelevant to outcome + .end(Instant.now()) // same + .employee(employee1) + .build(); + Registration registration2 = + Registration.builder() + .start(Instant.now()) // incorrect, but should be irrelevant to outcome + .end(Instant.now()) // same + .employee(employee2) + .build(); + Registration registration3 = + Registration.builder() + .start(Instant.now()) // incorrect, but should be irrelevant to outcome + .end(Instant.now()) // same + .employee(employee3) + .build(); + registrations.add(registration1); + registrations.add(registration2); + registrations.add(registration3); + + List<Long> returnvalues = registrationDAO.add(1, registrations); + assertFalse(returnvalues.isEmpty()); // can be improved... + } } -- cgit v1.2.3-70-g09d2 From 8c73a66236c9a3c416fdb7d337725ec9d4ab6583 Mon Sep 17 00:00:00 2001 From: Felix Kehrer <felix.kehrer@gmail.com> Date: Sun, 6 May 2018 17:04:51 +0200 Subject: Implemented incorrect insert test (specified vehicle does not exist in test database) --- .../dao/H2RegistrationDAOTest.java | 29 +++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) (limited to 'src/test/java/at') diff --git a/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/H2RegistrationDAOTest.java b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/H2RegistrationDAOTest.java index e89e99a..1180bfa 100644 --- a/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/H2RegistrationDAOTest.java +++ b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/H2RegistrationDAOTest.java @@ -17,7 +17,9 @@ import org.h2.tools.RunScript; import org.junit.After; import org.junit.Before; import org.junit.BeforeClass; +import org.junit.Rule; import org.junit.Test; +import org.junit.rules.ExpectedException; public class H2RegistrationDAOTest { @@ -67,8 +69,10 @@ public class H2RegistrationDAOTest { false); } + @Rule public ExpectedException thrown = ExpectedException.none(); + @Test - public void addRegistrationShouldSucceed() throws PersistenceException { + public void addRegistrationsShouldSucceed() throws PersistenceException { List<Registration> registrations = new LinkedList<>(); /* Vehicle vehicle = Vehicle.builder() @@ -132,4 +136,27 @@ public class H2RegistrationDAOTest { List<Long> returnvalues = registrationDAO.add(1, registrations); assertFalse(returnvalues.isEmpty()); // can be improved... } + + @Test + public void addRegistrationToInexistentVehicleShouldFail() throws PersistenceException { + thrown.expect(PersistenceException.class); + List<Registration> registrations = new LinkedList<>(); + Employee employee = + Employee.builder() + .id(1) + .name("John Doe") + .birthday(LocalDate.now()) // incorrect, but should be irrelevant + .educationLevel(EducationLevel.RS) + .isDriver(true) + .isPilot(true) + .build(); + Registration registration = + Registration.builder() + .start(Instant.MIN) + .end(Instant.MAX) + .employee(employee) + .build(); + registrations.add(registration); + registrationDAO.add(200, registrations); + } } -- cgit v1.2.3-70-g09d2 From 88ac3a3f65cc854c3f7d0f6ccb27d13de5e9f554 Mon Sep 17 00:00:00 2001 From: Felix Kehrer <felix.kehrer@gmail.com> Date: Mon, 7 May 2018 11:26:05 +0200 Subject: Add Application for manual tests --- .../controller/RegistrationWindowApplication.java | 53 ++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 src/test/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/controller/RegistrationWindowApplication.java (limited to 'src/test/java/at') diff --git a/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/controller/RegistrationWindowApplication.java b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/controller/RegistrationWindowApplication.java new file mode 100644 index 0000000..3293ae9 --- /dev/null +++ b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/controller/RegistrationWindowApplication.java @@ -0,0 +1,53 @@ +package at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.controller; + +import at.ac.tuwien.sepm.assignment.groupphase.util.SpringFXMLLoader; +import java.lang.invoke.MethodHandles; +import javafx.application.Application; +import javafx.scene.Parent; +import javafx.scene.Scene; +import javafx.stage.Stage; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.context.annotation.AnnotationConfigApplicationContext; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.stereotype.Component; + +@Component +@ComponentScan("at.ac.tuwien.sepm.assignment.groupphase") +public class RegistrationWindowApplication extends Application { + + private static final Logger LOG = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass()); + + public static AnnotationConfigApplicationContext context; + + @Override + public void start(Stage primaryStage) throws Exception { + // setup application + primaryStage.setTitle("Person anlegen"); + // primaryStage.setWidth(1366); + // primaryStage.setHeight(768); + primaryStage.centerOnScreen(); + primaryStage.setOnCloseRequest(event -> LOG.debug("Application shutdown initiated")); + + context = new AnnotationConfigApplicationContext(RegistrationWindowApplication.class); + final var fxmlLoader = context.getBean(SpringFXMLLoader.class); + primaryStage.setScene( + new Scene( + (Parent) + fxmlLoader.load( + getClass() + .getResourceAsStream( + "/fxml/RegistrationWindow.fxml")))); + + // show application + primaryStage.show(); + primaryStage.toFront(); + LOG.debug("Application startup complete"); + } + + @Override + public void stop() { + LOG.debug("Stopping application"); + context.close(); + } +} -- cgit v1.2.3-70-g09d2 From a1f5ee2623bb2e90b6df80a473eb674f4c200d10 Mon Sep 17 00:00:00 2001 From: Felix Kehrer <felix.kehrer@gmail.com> Date: Mon, 7 May 2018 13:14:24 +0200 Subject: Added positive and negative tests for RegistrationService --- .../service/SimpleRegistrationServiceTest.java | 124 +++++++++++++++++++++ 1 file changed, 124 insertions(+) create mode 100644 src/test/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/service/SimpleRegistrationServiceTest.java (limited to 'src/test/java/at') diff --git a/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/service/SimpleRegistrationServiceTest.java b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/service/SimpleRegistrationServiceTest.java new file mode 100644 index 0000000..b1ef38f --- /dev/null +++ b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/service/SimpleRegistrationServiceTest.java @@ -0,0 +1,124 @@ +package at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.service; + +import static org.junit.Assert.*; + +import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dao.RegistrationDAO; +import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Employee; +import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Employee.EducationLevel; +import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Registration; +import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Vehicle; +import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Vehicle.ConstructionType; +import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Vehicle.Status; +import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Vehicle.VehicleType; +import at.ac.tuwien.sepm.assignment.groupphase.exception.InvalidRegistrationException; +import at.ac.tuwien.sepm.assignment.groupphase.exception.InvalidVehicleException; +import at.ac.tuwien.sepm.assignment.groupphase.exception.ServiceException; +import java.time.Instant; +import java.time.LocalDate; +import java.time.temporal.ChronoUnit; +import java.util.LinkedList; +import java.util.List; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.ExpectedException; +import org.mockito.Mock; +import org.mockito.junit.MockitoJUnit; +import org.mockito.junit.MockitoRule; + +public class SimpleRegistrationServiceTest { + + @Mock RegistrationDAO daoMock; + + @Rule public MockitoRule mockitoRule = MockitoJUnit.rule(); + + @Rule public ExpectedException thrown = ExpectedException.none(); + + @Test + public void addValidRegistrationsShouldSucceed() + throws InvalidRegistrationException, ServiceException, InvalidVehicleException { + RegistrationService registrationService = new SimpleRegistrationService(daoMock); + List<Registration> registrations = new LinkedList<>(); + Vehicle vehicle = + Vehicle.builder() + .id(1) + .name("RTW-1") + .constructionType(ConstructionType.HOCHDACH) + .type(VehicleType.RTW) + .status(Status.ABGEMELDET) + .hasNef(true) + .build(); + Employee employee1 = + Employee.builder() + .id(1) + .name("John Doe") + .birthday(LocalDate.now()) // incorrect, but should be irrelevant + .educationLevel(EducationLevel.RS) + .isDriver(true) + .isPilot(true) + .build(); + Employee employee2 = + Employee.builder() + .id(2) + .name("Nick \"Kage\" Verily") + .birthday(LocalDate.now()) // incorrect, but should be irrelevant + .educationLevel(EducationLevel.NKV) + .isDriver(true) + .isPilot(false) + .build(); + Employee employee3 = + Employee.builder() + .id(3) + .name("Nicht Arzt") + .birthday(LocalDate.now()) // incorrect, but should be irrelevant + .educationLevel(EducationLevel.NA) + .isDriver(false) + .isPilot(false) + .build(); + Instant start = Instant.now(); + Instant end = start.plus(8, ChronoUnit.HOURS); + Registration registration1 = + Registration.builder().start(start).end(end).employee(employee1).build(); + Registration registration2 = + Registration.builder().start(start).end(end).employee(employee2).build(); + Registration registration3 = + Registration.builder().start(start).end(end).employee(employee3).build(); + registrations.add(registration1); + registrations.add(registration2); + registrations.add(registration3); + registrationService.add(vehicle, registrations); + } + + @Test + public void addOnlyOnePersonToRTWShouldFail() + throws InvalidRegistrationException, ServiceException, InvalidVehicleException { + thrown.expect(InvalidRegistrationException.class); + RegistrationService registrationService = new SimpleRegistrationService(daoMock); + List<Registration> registrations = new LinkedList<>(); + Vehicle vehicle = + Vehicle.builder() + .id(1) + .name("RTW-1") + .constructionType(ConstructionType.HOCHDACH) + .type(VehicleType.RTW) + .status(Status.ABGEMELDET) + .hasNef(true) + .build(); + Employee employee = + Employee.builder() + .id(1) + .name("John Doe") + .birthday(LocalDate.now()) // incorrect, but should be irrelevant + .educationLevel(EducationLevel.RS) + .isDriver(true) + .isPilot(true) + .build(); + Registration registration = + Registration.builder() + .start(Instant.MIN) + .end(Instant.MAX) + .employee(employee) + .build(); + registrations.add(registration); + registrationService.add(vehicle, registrations); + } +} -- cgit v1.2.3-70-g09d2 From 783aad0bd343a0c5a008ed1433d9958ea8e5e7a2 Mon Sep 17 00:00:00 2001 From: Dominic Rogetzer <e1627756@student.tuwien.ac.at> Date: Sat, 5 May 2018 15:49:41 +0200 Subject: Implement EmployeePersistenceTest with DBUnit --- .../employee/EmployeePersistenceTest.java | 155 +++++++++++++++++++++ 1 file changed, 155 insertions(+) create mode 100644 src/test/java/at/ac/tuwien/sepm/assignment/groupphase/employee/EmployeePersistenceTest.java (limited to 'src/test/java/at') diff --git a/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/employee/EmployeePersistenceTest.java b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/employee/EmployeePersistenceTest.java new file mode 100644 index 0000000..f8fe0f3 --- /dev/null +++ b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/employee/EmployeePersistenceTest.java @@ -0,0 +1,155 @@ +package at.ac.tuwien.sepm.assignment.groupphase.employee; + +import static junit.framework.TestCase.fail; + +import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dao.EmployeeDAO; +import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dao.EmployeeDatabaseDao; +import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Employee; +import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Employee.EducationLevel; +import at.ac.tuwien.sepm.assignment.groupphase.exception.PersistenceException; +import at.ac.tuwien.sepm.assignment.groupphase.util.JDBCConnectionManager; +import java.nio.charset.Charset; +import java.sql.SQLException; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import java.util.List; +import org.dbunit.IDatabaseTester; +import org.dbunit.JdbcDatabaseTester; +import org.dbunit.dataset.DataSetException; +import org.dbunit.dataset.IDataSet; +import org.dbunit.dataset.xml.FlatXmlDataSetBuilder; +import org.dbunit.operation.DatabaseOperation; +import org.h2.tools.RunScript; +import org.junit.Assert; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Test; + +public class EmployeePersistenceTest { + + private static final String JDBC_DRIVER = org.h2.Driver.class.getName(); + private static final String JDBC_URL = "jdbc:h2:mem:test;DB_CLOSE_DELAY=-1"; + private static final String USER = ""; + private static final String PASSWORD = ""; + + private EmployeeDAO employeePersistence; + + public EmployeePersistenceTest() throws PersistenceException { + employeePersistence = new EmployeeDatabaseDao(new JDBCConnectionManager(JDBC_URL)); + } + + @BeforeClass + public static void createSchema() throws SQLException { + RunScript.execute( + JDBC_URL, + USER, + PASSWORD, + "classpath:sql/database.sql", + Charset.forName("UTF8"), + false); + } + + @Before + public void importDataSet() throws Exception { + IDataSet dataSet = readDataSet(); + cleanlyInsert(dataSet); + } + + private IDataSet readDataSet() throws DataSetException { + return new FlatXmlDataSetBuilder() + .build( + getClass() + .getClassLoader() + .getResourceAsStream("employeeServiceTestData.xml")); + } + + private void cleanlyInsert(IDataSet dataSet) throws Exception { + IDatabaseTester databaseTester = + new JdbcDatabaseTester(JDBC_DRIVER, JDBC_URL, USER, PASSWORD); + + databaseTester.setSetUpOperation(DatabaseOperation.CLEAN_INSERT); + databaseTester.setDataSet(dataSet); + databaseTester.onSetup(); + } + + @Test + public void testListEmployees() { + + try { + List<Employee> employees = employeePersistence.list(); + + Employee empOne = + Employee.builder() + .id(1) + .name("Adam") + .birthday( + LocalDate.parse( + "10.10.2010", + DateTimeFormatter.ofPattern("dd.MM.yyyy"))) + .educationLevel(EducationLevel.RS) + .isDriver(true) + .isPilot(false) + .build(); + + Employee empTwo = + Employee.builder() + .id(2) + .name("Max") + .birthday( + LocalDate.parse( + "11.11.1990", + DateTimeFormatter.ofPattern("dd.MM.yyyy"))) + .educationLevel(EducationLevel.NFS) + .isDriver(false) + .isPilot(false) + .build(); + + Employee empThree = + Employee.builder() + .id(3) + .name("Lisa") + .birthday( + LocalDate.parse( + "16.10.1999", + DateTimeFormatter.ofPattern("dd.MM.yyyy"))) + .educationLevel(EducationLevel.NKI) + .isDriver(true) + .isPilot(false) + .build(); + + Assert.assertTrue(employees.contains(empOne)); + Assert.assertTrue(employees.contains(empTwo)); + Assert.assertTrue(employees.contains(empThree)); + Assert.assertEquals(3, employees.size()); + + } catch (PersistenceException e) { + fail(); + } + } + + @Test + public void testEmployeeListNoElement() { + + try { + List<Employee> employees = employeePersistence.list(); + + Employee empOne = + Employee.builder() + .id(10) + .name("Adam") + .birthday( + LocalDate.parse( + "10.10.2010", + DateTimeFormatter.ofPattern("dd.MM.yyyy"))) + .educationLevel(EducationLevel.RS) + .isDriver(true) + .isPilot(false) + .build(); + + Assert.assertFalse(employees.contains(empOne)); + + } catch (PersistenceException e) { + fail(); + } + } +} -- cgit v1.2.3-70-g09d2 From 126b9a07facec2916156f74b5f632f161df19f11 Mon Sep 17 00:00:00 2001 From: Felix Kehrer <felix.kehrer@gmail.com> Date: Mon, 7 May 2018 15:55:23 +0200 Subject: Rename Registration Dao & service to conventional style --- .../einsatzverwaltung/dao/H2RegistrationDAO.java | 105 ------------- .../dao/RegistrationDatabaseDAO.java | 106 ++++++++++++++ .../service/RegistrationServiceImpl.java | 45 ++++++ .../service/SimpleRegistrationService.java | 45 ------ .../dao/H2RegistrationDAOTest.java | 162 --------------------- .../dao/RegistrationDatabaseDAOTest.java | 162 +++++++++++++++++++++ .../service/RegistrationServiceImplTest.java | 122 ++++++++++++++++ .../service/SimpleRegistrationServiceTest.java | 124 ---------------- 8 files changed, 435 insertions(+), 436 deletions(-) delete mode 100644 src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/H2RegistrationDAO.java create mode 100644 src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/RegistrationDatabaseDAO.java create mode 100644 src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/service/RegistrationServiceImpl.java delete mode 100644 src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/service/SimpleRegistrationService.java delete mode 100644 src/test/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/H2RegistrationDAOTest.java create mode 100644 src/test/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/RegistrationDatabaseDAOTest.java create mode 100644 src/test/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/service/RegistrationServiceImplTest.java delete mode 100644 src/test/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/service/SimpleRegistrationServiceTest.java (limited to 'src/test/java/at') diff --git a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/H2RegistrationDAO.java b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/H2RegistrationDAO.java deleted file mode 100644 index f76c706..0000000 --- a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/H2RegistrationDAO.java +++ /dev/null @@ -1,105 +0,0 @@ -package at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dao; - -import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Registration; -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.sql.Connection; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.sql.Statement; -import java.sql.Timestamp; -import java.util.LinkedList; -import java.util.List; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Repository; - -@Repository -public class H2RegistrationDAO implements RegistrationDAO { - - private static final Logger LOG = LoggerFactory.getLogger(H2RegistrationDAO.class); - - private static final String ADD_REGISTRATION = - "INSERT INTO Registration (vehicleId, employeeId, start, end, active) VALUES (?,?,?,?,?);"; - private static final String UPDATE_VEHICLE = - "UPDATE Vehicle SET status = 'frei_wache' WHERE id = ?;"; - - private PreparedStatement addRegistration; - private PreparedStatement updateVehicle; - - private Connection connection; - - @Autowired - public H2RegistrationDAO(JDBCConnectionManager connectionManager) throws PersistenceException { - try { - connection = connectionManager.getConnection(); - addRegistration = - connection.prepareStatement(ADD_REGISTRATION, Statement.RETURN_GENERATED_KEYS); - updateVehicle = connection.prepareStatement(UPDATE_VEHICLE); - } catch (SQLException e) { - LOG.error("Could not get connection or preparation of statement failed"); - throw new PersistenceException(e); - } - } - - @Override - public List<Long> add(long vehicleId, List<Registration> registrations) - throws PersistenceException { - List<Long> returnValues = new LinkedList<>(); - try { - connection.setAutoCommit(false); - for (Registration registration : registrations) { - addRegistration.setLong(1, vehicleId); - addRegistration.setLong(2, registration.employee().id()); - addRegistration.setTimestamp(3, Timestamp.from(registration.start())); - addRegistration.setObject(4, registration.end()); - addRegistration.setBoolean( - 5, true); // ASSUMPTION: Registration gets created as active - addRegistration.executeUpdate(); - try (ResultSet rs = addRegistration.getGeneratedKeys()) { - if (rs.next()) { - returnValues.add(rs.getLong(1)); - } else { - LOG.error("No ResultSet was created while adding registration"); - throw new PersistenceException( - "Anmeldung konnte nicht gespeichert werden."); - } - } - } - - updateVehicle.setLong(1, vehicleId); - updateVehicle.executeUpdate(); - - connection.commit(); - return returnValues; - } catch (SQLException e) { - LOG.error( - "An SQLException occurred while trying to save registrations to database. " - + "Attempting a rollback. Error message: {}", - e.getMessage()); - try { - connection.rollback(); - } catch (SQLException e1) { - LOG.error("Rollback failed :("); - } - throw new PersistenceException(e); - } finally { - try { - connection.setAutoCommit(true); - } catch (SQLException e) { - LOG.error( - "Setting back AutoCommit to false failed! Error message: {}", - e.getMessage()); - // SonarLint insists on me not throwing anything here... - } - } - } - - @Override - public void remove(long id) throws ElementNotFoundException, PersistenceException { - throw new UnsupportedOperationException(); - } -} diff --git a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/RegistrationDatabaseDAO.java b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/RegistrationDatabaseDAO.java new file mode 100644 index 0000000..e4bc0ab --- /dev/null +++ b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/RegistrationDatabaseDAO.java @@ -0,0 +1,106 @@ +package at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dao; + +import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Registration; +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.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Statement; +import java.sql.Timestamp; +import java.util.LinkedList; +import java.util.List; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Repository; + +@Repository +public class RegistrationDatabaseDAO implements RegistrationDAO { + + private static final Logger LOG = LoggerFactory.getLogger(RegistrationDatabaseDAO.class); + + private static final String ADD_REGISTRATION = + "INSERT INTO Registration (vehicleId, employeeId, start, end, active) VALUES (?,?,?,?,?);"; + private static final String UPDATE_VEHICLE = + "UPDATE Vehicle SET status = 'frei_wache' WHERE id = ?;"; + + private PreparedStatement addRegistration; + private PreparedStatement updateVehicle; + + private Connection connection; + + @Autowired + public RegistrationDatabaseDAO(JDBCConnectionManager connectionManager) + throws PersistenceException { + try { + connection = connectionManager.getConnection(); + addRegistration = + connection.prepareStatement(ADD_REGISTRATION, Statement.RETURN_GENERATED_KEYS); + updateVehicle = connection.prepareStatement(UPDATE_VEHICLE); + } catch (SQLException e) { + LOG.error("Could not get connection or preparation of statement failed"); + throw new PersistenceException(e); + } + } + + @Override + public List<Long> add(long vehicleId, List<Registration> registrations) + throws PersistenceException { + List<Long> returnValues = new LinkedList<>(); + try { + connection.setAutoCommit(false); + for (Registration registration : registrations) { + addRegistration.setLong(1, vehicleId); + addRegistration.setLong(2, registration.employee().id()); + addRegistration.setTimestamp(3, Timestamp.from(registration.start())); + addRegistration.setObject(4, registration.end()); + addRegistration.setBoolean( + 5, true); // ASSUMPTION: Registration gets created as active + addRegistration.executeUpdate(); + try (ResultSet rs = addRegistration.getGeneratedKeys()) { + if (rs.next()) { + returnValues.add(rs.getLong(1)); + } else { + LOG.error("No ResultSet was created while adding registration"); + throw new PersistenceException( + "Anmeldung konnte nicht gespeichert werden."); + } + } + } + + updateVehicle.setLong(1, vehicleId); + updateVehicle.executeUpdate(); + + connection.commit(); + return returnValues; + } catch (SQLException e) { + LOG.error( + "An SQLException occurred while trying to save registrations to database. " + + "Attempting a rollback. Error message: {}", + e.getMessage()); + try { + connection.rollback(); + } catch (SQLException e1) { + LOG.error("Rollback failed :("); + } + throw new PersistenceException(e); + } finally { + try { + connection.setAutoCommit(true); + } catch (SQLException e) { + LOG.error( + "Setting back AutoCommit to false failed! Error message: {}", + e.getMessage()); + // SonarLint insists on me not throwing anything here... + } + } + } + + @Override + public void remove(long id) throws ElementNotFoundException, PersistenceException { + throw new UnsupportedOperationException(); + } +} diff --git a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/service/RegistrationServiceImpl.java b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/service/RegistrationServiceImpl.java new file mode 100644 index 0000000..b0605f0 --- /dev/null +++ b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/service/RegistrationServiceImpl.java @@ -0,0 +1,45 @@ +package at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.service; + +import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dao.RegistrationDAO; +import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Registration; +import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.RegistrationValidator; +import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Vehicle; +import at.ac.tuwien.sepm.assignment.groupphase.exception.InvalidRegistrationException; +import at.ac.tuwien.sepm.assignment.groupphase.exception.InvalidVehicleException; +import at.ac.tuwien.sepm.assignment.groupphase.exception.PersistenceException; +import at.ac.tuwien.sepm.assignment.groupphase.exception.ServiceException; +import java.util.List; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +@Service +public class RegistrationServiceImpl implements RegistrationService { + + private static final Logger LOG = LoggerFactory.getLogger(RegistrationServiceImpl.class); + + private final RegistrationDAO registrationDAO; + + @Autowired + public RegistrationServiceImpl(RegistrationDAO registrationDAO) { + this.registrationDAO = registrationDAO; + } + + @Override + public List<Long> add(Vehicle vehicle, List<Registration> registrations) + throws InvalidVehicleException, InvalidRegistrationException, ServiceException { + RegistrationValidator.validate(vehicle, registrations); + try { + return registrationDAO.add(vehicle.id(), registrations); + } catch (PersistenceException e) { + LOG.warn("PersistenceException caught, throwing matching ServiceException"); + throw new ServiceException(e); + } + } + + @Override + public void remove(long registrationId) throws InvalidRegistrationException, ServiceException { + throw new UnsupportedOperationException(); + } +} diff --git a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/service/SimpleRegistrationService.java b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/service/SimpleRegistrationService.java deleted file mode 100644 index 5b26e39..0000000 --- a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/service/SimpleRegistrationService.java +++ /dev/null @@ -1,45 +0,0 @@ -package at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.service; - -import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dao.RegistrationDAO; -import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Registration; -import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.RegistrationValidator; -import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Vehicle; -import at.ac.tuwien.sepm.assignment.groupphase.exception.InvalidRegistrationException; -import at.ac.tuwien.sepm.assignment.groupphase.exception.InvalidVehicleException; -import at.ac.tuwien.sepm.assignment.groupphase.exception.PersistenceException; -import at.ac.tuwien.sepm.assignment.groupphase.exception.ServiceException; -import java.util.List; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -@Service -public class SimpleRegistrationService implements RegistrationService { - - private static final Logger LOG = LoggerFactory.getLogger(SimpleRegistrationService.class); - - private final RegistrationDAO registrationDAO; - - @Autowired - public SimpleRegistrationService(RegistrationDAO registrationDAO) { - this.registrationDAO = registrationDAO; - } - - @Override - public List<Long> add(Vehicle vehicle, List<Registration> registrations) - throws InvalidVehicleException, InvalidRegistrationException, ServiceException { - RegistrationValidator.validate(vehicle, registrations); - try { - return registrationDAO.add(vehicle.id(), registrations); - } catch (PersistenceException e) { - LOG.warn("PersistenceException caught, throwing matching ServiceException"); - throw new ServiceException(e); - } - } - - @Override - public void remove(long registrationId) throws InvalidRegistrationException, ServiceException { - throw new UnsupportedOperationException(); - } -} diff --git a/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/H2RegistrationDAOTest.java b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/H2RegistrationDAOTest.java deleted file mode 100644 index 1180bfa..0000000 --- a/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/H2RegistrationDAOTest.java +++ /dev/null @@ -1,162 +0,0 @@ -package at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dao; - -import static org.junit.Assert.*; - -import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Employee; -import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Employee.EducationLevel; -import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Registration; -import at.ac.tuwien.sepm.assignment.groupphase.exception.PersistenceException; -import at.ac.tuwien.sepm.assignment.groupphase.util.JDBCConnectionManager; -import java.nio.charset.Charset; -import java.sql.SQLException; -import java.time.Instant; -import java.time.LocalDate; -import java.util.LinkedList; -import java.util.List; -import org.h2.tools.RunScript; -import org.junit.After; -import org.junit.Before; -import org.junit.BeforeClass; -import org.junit.Rule; -import org.junit.Test; -import org.junit.rules.ExpectedException; - -public class H2RegistrationDAOTest { - - // Base taken from EmployeePersistenceTest - - private static final String JDBC_DRIVER = org.h2.Driver.class.getName(); - private static final String JDBC_URL = "jdbc:h2:mem:test;DB_CLOSE_DELAY=-1"; - private static final String USER = ""; - private static final String PASSWORD = ""; - - private RegistrationDAO registrationDAO; - - public H2RegistrationDAOTest() throws PersistenceException { - this.registrationDAO = new H2RegistrationDAO(new JDBCConnectionManager(JDBC_URL)); - } - - @BeforeClass - public static void setupDatabase() throws SQLException { - RunScript.execute( - JDBC_URL, - USER, - PASSWORD, - "classpath:sql/database.sql", - Charset.forName("UTF8"), - false); - } - - @Before - public void setUp() throws SQLException { - RunScript.execute( - JDBC_URL, - USER, - PASSWORD, - "classpath:sql/H2RegistrationDAOTest_populate.sql", - Charset.forName("UTF8"), - false); - } - - @After - public void tearDown() throws SQLException { - RunScript.execute( - JDBC_URL, - USER, - PASSWORD, - "classpath:sql/H2RegistrationDAOTest_depopulate.sql", - Charset.forName("UTF8"), - false); - } - - @Rule public ExpectedException thrown = ExpectedException.none(); - - @Test - public void addRegistrationsShouldSucceed() throws PersistenceException { - List<Registration> registrations = new LinkedList<>(); - /* - Vehicle vehicle = Vehicle.builder() - .id(1) - .name("RTW-1") - .constructionType(ConstructionType.HOCHDACH) - .type(VehicleType.RTW) - .status(Status.ABGEMELDET) - .hasNef(true) - .build(); - */ - Employee employee1 = - Employee.builder() - .id(1) - .name("John Doe") - .birthday(LocalDate.now()) // incorrect, but should be irrelevant - .educationLevel(EducationLevel.RS) - .isDriver(true) - .isPilot(true) - .build(); - Employee employee2 = - Employee.builder() - .id(2) - .name("Nick \"Kage\" Verily") - .birthday(LocalDate.now()) // incorrect, but should be irrelevant - .educationLevel(EducationLevel.NKV) - .isDriver(true) - .isPilot(false) - .build(); - Employee employee3 = - Employee.builder() - .id(3) - .name("Nicht Arzt") - .birthday(LocalDate.now()) // incorrect, but should be irrelevant - .educationLevel(EducationLevel.NA) - .isDriver(false) - .isPilot(false) - .build(); - Registration registration1 = - Registration.builder() - .start(Instant.now()) // incorrect, but should be irrelevant to outcome - .end(Instant.now()) // same - .employee(employee1) - .build(); - Registration registration2 = - Registration.builder() - .start(Instant.now()) // incorrect, but should be irrelevant to outcome - .end(Instant.now()) // same - .employee(employee2) - .build(); - Registration registration3 = - Registration.builder() - .start(Instant.now()) // incorrect, but should be irrelevant to outcome - .end(Instant.now()) // same - .employee(employee3) - .build(); - registrations.add(registration1); - registrations.add(registration2); - registrations.add(registration3); - - List<Long> returnvalues = registrationDAO.add(1, registrations); - assertFalse(returnvalues.isEmpty()); // can be improved... - } - - @Test - public void addRegistrationToInexistentVehicleShouldFail() throws PersistenceException { - thrown.expect(PersistenceException.class); - List<Registration> registrations = new LinkedList<>(); - Employee employee = - Employee.builder() - .id(1) - .name("John Doe") - .birthday(LocalDate.now()) // incorrect, but should be irrelevant - .educationLevel(EducationLevel.RS) - .isDriver(true) - .isPilot(true) - .build(); - Registration registration = - Registration.builder() - .start(Instant.MIN) - .end(Instant.MAX) - .employee(employee) - .build(); - registrations.add(registration); - registrationDAO.add(200, registrations); - } -} diff --git a/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/RegistrationDatabaseDAOTest.java b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/RegistrationDatabaseDAOTest.java new file mode 100644 index 0000000..980c429 --- /dev/null +++ b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/RegistrationDatabaseDAOTest.java @@ -0,0 +1,162 @@ +package at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dao; + +import static org.junit.Assert.*; + +import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Employee; +import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Employee.EducationLevel; +import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Registration; +import at.ac.tuwien.sepm.assignment.groupphase.exception.PersistenceException; +import at.ac.tuwien.sepm.assignment.groupphase.util.JDBCConnectionManager; +import java.nio.charset.Charset; +import java.sql.SQLException; +import java.time.Instant; +import java.time.LocalDate; +import java.util.LinkedList; +import java.util.List; +import org.h2.tools.RunScript; +import org.junit.After; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.ExpectedException; + +public class RegistrationDatabaseDAOTest { + + // Base taken from EmployeePersistenceTest + + private static final String JDBC_DRIVER = org.h2.Driver.class.getName(); + private static final String JDBC_URL = "jdbc:h2:mem:test;DB_CLOSE_DELAY=-1"; + private static final String USER = ""; + private static final String PASSWORD = ""; + + private RegistrationDAO registrationDAO; + + public RegistrationDatabaseDAOTest() throws PersistenceException { + this.registrationDAO = new RegistrationDatabaseDAO(new JDBCConnectionManager(JDBC_URL)); + } + + @BeforeClass + public static void setupDatabase() throws SQLException { + RunScript.execute( + JDBC_URL, + USER, + PASSWORD, + "classpath:sql/database.sql", + Charset.forName("UTF8"), + false); + } + + @Before + public void setUp() throws SQLException { + RunScript.execute( + JDBC_URL, + USER, + PASSWORD, + "classpath:sql/H2RegistrationDAOTest_populate.sql", + Charset.forName("UTF8"), + false); + } + + @After + public void tearDown() throws SQLException { + RunScript.execute( + JDBC_URL, + USER, + PASSWORD, + "classpath:sql/H2RegistrationDAOTest_depopulate.sql", + Charset.forName("UTF8"), + false); + } + + @Rule public ExpectedException thrown = ExpectedException.none(); + + @Test + public void addRegistrationsShouldSucceed() throws PersistenceException { + List<Registration> registrations = new LinkedList<>(); + /* + Vehicle vehicle = Vehicle.builder() + .id(1) + .name("RTW-1") + .constructionType(ConstructionType.HOCHDACH) + .type(VehicleType.RTW) + .status(Status.ABGEMELDET) + .hasNef(true) + .build(); + */ + Employee employee1 = + Employee.builder() + .id(1) + .name("John Doe") + .birthday(LocalDate.now()) // incorrect, but should be irrelevant + .educationLevel(EducationLevel.RS) + .isDriver(true) + .isPilot(true) + .build(); + Employee employee2 = + Employee.builder() + .id(2) + .name("Nick \"Kage\" Verily") + .birthday(LocalDate.now()) // incorrect, but should be irrelevant + .educationLevel(EducationLevel.NKV) + .isDriver(true) + .isPilot(false) + .build(); + Employee employee3 = + Employee.builder() + .id(3) + .name("Nicht Arzt") + .birthday(LocalDate.now()) // incorrect, but should be irrelevant + .educationLevel(EducationLevel.NA) + .isDriver(false) + .isPilot(false) + .build(); + Registration registration1 = + Registration.builder() + .start(Instant.now()) // incorrect, but should be irrelevant to outcome + .end(Instant.now()) // same + .employee(employee1) + .build(); + Registration registration2 = + Registration.builder() + .start(Instant.now()) // incorrect, but should be irrelevant to outcome + .end(Instant.now()) // same + .employee(employee2) + .build(); + Registration registration3 = + Registration.builder() + .start(Instant.now()) // incorrect, but should be irrelevant to outcome + .end(Instant.now()) // same + .employee(employee3) + .build(); + registrations.add(registration1); + registrations.add(registration2); + registrations.add(registration3); + + List<Long> returnvalues = registrationDAO.add(1, registrations); + assertFalse(returnvalues.isEmpty()); // can be improved... + } + + @Test + public void addRegistrationToInexistentVehicleShouldFail() throws PersistenceException { + thrown.expect(PersistenceException.class); + List<Registration> registrations = new LinkedList<>(); + Employee employee = + Employee.builder() + .id(1) + .name("John Doe") + .birthday(LocalDate.now()) // incorrect, but should be irrelevant + .educationLevel(EducationLevel.RS) + .isDriver(true) + .isPilot(true) + .build(); + Registration registration = + Registration.builder() + .start(Instant.MIN) + .end(Instant.MAX) + .employee(employee) + .build(); + registrations.add(registration); + registrationDAO.add(200, registrations); + } +} diff --git a/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/service/RegistrationServiceImplTest.java b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/service/RegistrationServiceImplTest.java new file mode 100644 index 0000000..7171f83 --- /dev/null +++ b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/service/RegistrationServiceImplTest.java @@ -0,0 +1,122 @@ +package at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.service; + +import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dao.RegistrationDAO; +import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Employee; +import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Employee.EducationLevel; +import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Registration; +import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Vehicle; +import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Vehicle.ConstructionType; +import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Vehicle.Status; +import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Vehicle.VehicleType; +import at.ac.tuwien.sepm.assignment.groupphase.exception.InvalidRegistrationException; +import at.ac.tuwien.sepm.assignment.groupphase.exception.InvalidVehicleException; +import at.ac.tuwien.sepm.assignment.groupphase.exception.ServiceException; +import java.time.Instant; +import java.time.LocalDate; +import java.time.temporal.ChronoUnit; +import java.util.LinkedList; +import java.util.List; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.ExpectedException; +import org.mockito.Mock; +import org.mockito.junit.MockitoJUnit; +import org.mockito.junit.MockitoRule; + +public class RegistrationServiceImplTest { + + @Mock RegistrationDAO daoMock; + + @Rule public MockitoRule mockitoRule = MockitoJUnit.rule(); + + @Rule public ExpectedException thrown = ExpectedException.none(); + + @Test + public void addValidRegistrationsShouldSucceed() + throws InvalidRegistrationException, ServiceException, InvalidVehicleException { + RegistrationService registrationService = new RegistrationServiceImpl(daoMock); + List<Registration> registrations = new LinkedList<>(); + Vehicle vehicle = + Vehicle.builder() + .id(1) + .name("RTW-1") + .constructionType(ConstructionType.HOCHDACH) + .type(VehicleType.RTW) + .status(Status.ABGEMELDET) + .hasNef(true) + .build(); + Employee employee1 = + Employee.builder() + .id(1) + .name("John Doe") + .birthday(LocalDate.now()) // incorrect, but should be irrelevant + .educationLevel(EducationLevel.RS) + .isDriver(true) + .isPilot(true) + .build(); + Employee employee2 = + Employee.builder() + .id(2) + .name("Nick \"Kage\" Verily") + .birthday(LocalDate.now()) // incorrect, but should be irrelevant + .educationLevel(EducationLevel.NKV) + .isDriver(true) + .isPilot(false) + .build(); + Employee employee3 = + Employee.builder() + .id(3) + .name("Nicht Arzt") + .birthday(LocalDate.now()) // incorrect, but should be irrelevant + .educationLevel(EducationLevel.NA) + .isDriver(false) + .isPilot(false) + .build(); + Instant start = Instant.now(); + Instant end = start.plus(8, ChronoUnit.HOURS); + Registration registration1 = + Registration.builder().start(start).end(end).employee(employee1).build(); + Registration registration2 = + Registration.builder().start(start).end(end).employee(employee2).build(); + Registration registration3 = + Registration.builder().start(start).end(end).employee(employee3).build(); + registrations.add(registration1); + registrations.add(registration2); + registrations.add(registration3); + registrationService.add(vehicle, registrations); + } + + @Test + public void addOnlyOnePersonToRTWShouldFail() + throws InvalidRegistrationException, ServiceException, InvalidVehicleException { + thrown.expect(InvalidRegistrationException.class); + RegistrationService registrationService = new RegistrationServiceImpl(daoMock); + List<Registration> registrations = new LinkedList<>(); + Vehicle vehicle = + Vehicle.builder() + .id(1) + .name("RTW-1") + .constructionType(ConstructionType.HOCHDACH) + .type(VehicleType.RTW) + .status(Status.ABGEMELDET) + .hasNef(true) + .build(); + Employee employee = + Employee.builder() + .id(1) + .name("John Doe") + .birthday(LocalDate.now()) // incorrect, but should be irrelevant + .educationLevel(EducationLevel.RS) + .isDriver(true) + .isPilot(true) + .build(); + Registration registration = + Registration.builder() + .start(Instant.MIN) + .end(Instant.MAX) + .employee(employee) + .build(); + registrations.add(registration); + registrationService.add(vehicle, registrations); + } +} diff --git a/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/service/SimpleRegistrationServiceTest.java b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/service/SimpleRegistrationServiceTest.java deleted file mode 100644 index b1ef38f..0000000 --- a/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/service/SimpleRegistrationServiceTest.java +++ /dev/null @@ -1,124 +0,0 @@ -package at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.service; - -import static org.junit.Assert.*; - -import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dao.RegistrationDAO; -import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Employee; -import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Employee.EducationLevel; -import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Registration; -import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Vehicle; -import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Vehicle.ConstructionType; -import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Vehicle.Status; -import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Vehicle.VehicleType; -import at.ac.tuwien.sepm.assignment.groupphase.exception.InvalidRegistrationException; -import at.ac.tuwien.sepm.assignment.groupphase.exception.InvalidVehicleException; -import at.ac.tuwien.sepm.assignment.groupphase.exception.ServiceException; -import java.time.Instant; -import java.time.LocalDate; -import java.time.temporal.ChronoUnit; -import java.util.LinkedList; -import java.util.List; -import org.junit.Rule; -import org.junit.Test; -import org.junit.rules.ExpectedException; -import org.mockito.Mock; -import org.mockito.junit.MockitoJUnit; -import org.mockito.junit.MockitoRule; - -public class SimpleRegistrationServiceTest { - - @Mock RegistrationDAO daoMock; - - @Rule public MockitoRule mockitoRule = MockitoJUnit.rule(); - - @Rule public ExpectedException thrown = ExpectedException.none(); - - @Test - public void addValidRegistrationsShouldSucceed() - throws InvalidRegistrationException, ServiceException, InvalidVehicleException { - RegistrationService registrationService = new SimpleRegistrationService(daoMock); - List<Registration> registrations = new LinkedList<>(); - Vehicle vehicle = - Vehicle.builder() - .id(1) - .name("RTW-1") - .constructionType(ConstructionType.HOCHDACH) - .type(VehicleType.RTW) - .status(Status.ABGEMELDET) - .hasNef(true) - .build(); - Employee employee1 = - Employee.builder() - .id(1) - .name("John Doe") - .birthday(LocalDate.now()) // incorrect, but should be irrelevant - .educationLevel(EducationLevel.RS) - .isDriver(true) - .isPilot(true) - .build(); - Employee employee2 = - Employee.builder() - .id(2) - .name("Nick \"Kage\" Verily") - .birthday(LocalDate.now()) // incorrect, but should be irrelevant - .educationLevel(EducationLevel.NKV) - .isDriver(true) - .isPilot(false) - .build(); - Employee employee3 = - Employee.builder() - .id(3) - .name("Nicht Arzt") - .birthday(LocalDate.now()) // incorrect, but should be irrelevant - .educationLevel(EducationLevel.NA) - .isDriver(false) - .isPilot(false) - .build(); - Instant start = Instant.now(); - Instant end = start.plus(8, ChronoUnit.HOURS); - Registration registration1 = - Registration.builder().start(start).end(end).employee(employee1).build(); - Registration registration2 = - Registration.builder().start(start).end(end).employee(employee2).build(); - Registration registration3 = - Registration.builder().start(start).end(end).employee(employee3).build(); - registrations.add(registration1); - registrations.add(registration2); - registrations.add(registration3); - registrationService.add(vehicle, registrations); - } - - @Test - public void addOnlyOnePersonToRTWShouldFail() - throws InvalidRegistrationException, ServiceException, InvalidVehicleException { - thrown.expect(InvalidRegistrationException.class); - RegistrationService registrationService = new SimpleRegistrationService(daoMock); - List<Registration> registrations = new LinkedList<>(); - Vehicle vehicle = - Vehicle.builder() - .id(1) - .name("RTW-1") - .constructionType(ConstructionType.HOCHDACH) - .type(VehicleType.RTW) - .status(Status.ABGEMELDET) - .hasNef(true) - .build(); - Employee employee = - Employee.builder() - .id(1) - .name("John Doe") - .birthday(LocalDate.now()) // incorrect, but should be irrelevant - .educationLevel(EducationLevel.RS) - .isDriver(true) - .isPilot(true) - .build(); - Registration registration = - Registration.builder() - .start(Instant.MIN) - .end(Instant.MAX) - .employee(employee) - .build(); - registrations.add(registration); - registrationService.add(vehicle, registrations); - } -} -- cgit v1.2.3-70-g09d2 From 834f9b4fff11c778dbb09dc74a88d658fc094a54 Mon Sep 17 00:00:00 2001 From: Felix Kehrer <felix.kehrer@gmail.com> Date: Mon, 7 May 2018 18:06:00 +0200 Subject: Changed test behaviour to leave "clean" database for other tests --- .../sql/H2RegistrationDAOTest_populate.sql | 5 +++++ .../dao/RegistrationDatabaseDAOTest.java | 24 ++++++++++++++-------- 2 files changed, 20 insertions(+), 9 deletions(-) (limited to 'src/test/java/at') diff --git a/src/main/resources/sql/H2RegistrationDAOTest_populate.sql b/src/main/resources/sql/H2RegistrationDAOTest_populate.sql index 3c268a0..7e7b428 100644 --- a/src/main/resources/sql/H2RegistrationDAOTest_populate.sql +++ b/src/main/resources/sql/H2RegistrationDAOTest_populate.sql @@ -1,3 +1,8 @@ +DELETE FROM Registration; +DELETE FROM Vehicle; +DELETE FROM VehicleVersion; +DELETE FROM Employee; +DELETE FROM EmployeeVersion; INSERT INTO EmployeeVersion (id, name, birthday, educationLevel, isDriver, isPilot) VALUES (1, 'John Doe', '2000-01-01', 'RS', TRUE, TRUE); INSERT INTO EmployeeVersion (id, name, birthday, educationLevel, isDriver, isPilot) VALUES (2, 'Nick "Kage" Verily', '1990-01-01', 'NKV', TRUE, FALSE); INSERT INTO EmployeeVersion (id, name, birthday, educationLevel, isDriver, isPilot) VALUES (3, 'Nicht Arzt', '1980-01-01', 'NA', FALSE, FALSE); diff --git a/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/RegistrationDatabaseDAOTest.java b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/RegistrationDatabaseDAOTest.java index 980c429..03059ff 100644 --- a/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/RegistrationDatabaseDAOTest.java +++ b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/dao/RegistrationDatabaseDAOTest.java @@ -14,8 +14,7 @@ import java.time.LocalDate; import java.util.LinkedList; import java.util.List; import org.h2.tools.RunScript; -import org.junit.After; -import org.junit.Before; +import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Rule; import org.junit.Test; @@ -45,10 +44,6 @@ public class RegistrationDatabaseDAOTest { "classpath:sql/database.sql", Charset.forName("UTF8"), false); - } - - @Before - public void setUp() throws SQLException { RunScript.execute( JDBC_URL, USER, @@ -57,9 +52,20 @@ public class RegistrationDatabaseDAOTest { Charset.forName("UTF8"), false); } - - @After - public void tearDown() throws SQLException { + /* + @Before + public void setUp() throws SQLException { + RunScript.execute( + JDBC_URL, + USER, + PASSWORD, + "classpath:sql/H2RegistrationDAOTest_populate.sql", + Charset.forName("UTF8"), + false); + } + */ + @AfterClass + public static void tearDown() throws SQLException { RunScript.execute( JDBC_URL, USER, -- cgit v1.2.3-70-g09d2 From be80ff84430b5f28613ec5b99cbc6b5e5d3ee45b Mon Sep 17 00:00:00 2001 From: Felix Kehrer <felix.kehrer@gmail.com> Date: Mon, 7 May 2018 18:53:28 +0200 Subject: Changed interface back to how it was before --- .../controller/RegistrationWindowController.java | 2 +- .../service/RegistrationService.java | 7 ++--- .../service/RegistrationServiceImpl.java | 21 +++++++++++-- .../service/RegistrationServiceImplTest.java | 34 +++++++++++++++++++--- 4 files changed, 53 insertions(+), 11 deletions(-) (limited to 'src/test/java/at') diff --git a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/controller/RegistrationWindowController.java b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/controller/RegistrationWindowController.java index f375fe9..bf413bb 100644 --- a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/controller/RegistrationWindowController.java +++ b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/controller/RegistrationWindowController.java @@ -167,7 +167,7 @@ public class RegistrationWindowController { .build()); } try { - registrationService.add(chosenVehicle, registrations); + registrationService.add(chosenVehicle.id(), registrations); ((Stage) lVehicles.getScene().getWindow()).close(); } catch (InvalidVehicleException e) { // NOT THROWN ANYWHERE RIGHT NOW diff --git a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/service/RegistrationService.java b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/service/RegistrationService.java index c20ed3c..c345a2b 100644 --- a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/service/RegistrationService.java +++ b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/service/RegistrationService.java @@ -1,7 +1,6 @@ package at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.service; import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Registration; -import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Vehicle; import at.ac.tuwien.sepm.assignment.groupphase.exception.InvalidRegistrationException; import at.ac.tuwien.sepm.assignment.groupphase.exception.InvalidVehicleException; import at.ac.tuwien.sepm.assignment.groupphase.exception.ServiceException; @@ -12,14 +11,14 @@ public interface RegistrationService { /** * Register employee to a vehicle. * - * @param vehicle the target vehicle + * @param vehicleId the id of the target vehicle * @param registrations that should be added to the vehicle - * @return the id that was assigned + * @return the list of ids that were assigned * @throws InvalidVehicleException if the vehicleId is invalid or does not exist * @throws InvalidRegistrationException if the registration is invalid * @throws ServiceException if the registration could not be persisted */ - List<Long> add(Vehicle vehicle, List<Registration> registrations) + List<Long> add(long vehicleId, List<Registration> registrations) throws InvalidVehicleException, InvalidRegistrationException, ServiceException; /** diff --git a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/service/RegistrationServiceImpl.java b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/service/RegistrationServiceImpl.java index b0605f0..a267b6f 100644 --- a/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/service/RegistrationServiceImpl.java +++ b/src/main/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/service/RegistrationServiceImpl.java @@ -4,10 +4,12 @@ import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dao.Registratio import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Registration; import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.RegistrationValidator; import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Vehicle; +import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Vehicle.Status; import at.ac.tuwien.sepm.assignment.groupphase.exception.InvalidRegistrationException; import at.ac.tuwien.sepm.assignment.groupphase.exception.InvalidVehicleException; import at.ac.tuwien.sepm.assignment.groupphase.exception.PersistenceException; import at.ac.tuwien.sepm.assignment.groupphase.exception.ServiceException; +import java.util.EnumSet; import java.util.List; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -20,15 +22,30 @@ public class RegistrationServiceImpl implements RegistrationService { private static final Logger LOG = LoggerFactory.getLogger(RegistrationServiceImpl.class); private final RegistrationDAO registrationDAO; + private final VehicleService vehicleService; @Autowired - public RegistrationServiceImpl(RegistrationDAO registrationDAO) { + public RegistrationServiceImpl(RegistrationDAO registrationDAO, VehicleService vehicleService) { this.registrationDAO = registrationDAO; + this.vehicleService = vehicleService; } @Override - public List<Long> add(Vehicle vehicle, List<Registration> registrations) + public List<Long> add(long vehicleId, List<Registration> registrations) throws InvalidVehicleException, InvalidRegistrationException, ServiceException { + + Vehicle vehicle = + vehicleService + .list(EnumSet.of(Status.ABGEMELDET)) + .stream() + .filter(v -> v.id() == vehicleId) + .findFirst() + .orElse(null); + + if (vehicle == null) { + throw new ServiceException("no vehicle with this id"); + } + RegistrationValidator.validate(vehicle, registrations); try { return registrationDAO.add(vehicle.id(), registrations); diff --git a/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/service/RegistrationServiceImplTest.java b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/service/RegistrationServiceImplTest.java index 7171f83..f3efbef 100644 --- a/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/service/RegistrationServiceImplTest.java +++ b/src/test/java/at/ac/tuwien/sepm/assignment/groupphase/einsatzverwaltung/service/RegistrationServiceImplTest.java @@ -1,5 +1,8 @@ package at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.service; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.when; + import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dao.RegistrationDAO; import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Employee; import at.ac.tuwien.sepm.assignment.groupphase.einsatzverwaltung.dto.Employee.EducationLevel; @@ -14,12 +17,15 @@ import at.ac.tuwien.sepm.assignment.groupphase.exception.ServiceException; import java.time.Instant; import java.time.LocalDate; import java.time.temporal.ChronoUnit; +import java.util.Arrays; import java.util.LinkedList; import java.util.List; +import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; import org.mockito.Mock; +import org.mockito.MockitoAnnotations; import org.mockito.junit.MockitoJUnit; import org.mockito.junit.MockitoRule; @@ -27,14 +33,33 @@ public class RegistrationServiceImplTest { @Mock RegistrationDAO daoMock; + @Mock VehicleService vehicleService; + @Rule public MockitoRule mockitoRule = MockitoJUnit.rule(); @Rule public ExpectedException thrown = ExpectedException.none(); + @Before + public void setUp() throws ServiceException { + MockitoAnnotations.initMocks(this); + when(vehicleService.list(any())) + .thenReturn( + Arrays.asList( + Vehicle.builder() + .id(1) + .name("RTW-1") + .constructionType(ConstructionType.HOCHDACH) + .status(Status.ABGEMELDET) + .type(VehicleType.RTW) + .hasNef(true) + .build())); + } + @Test public void addValidRegistrationsShouldSucceed() throws InvalidRegistrationException, ServiceException, InvalidVehicleException { - RegistrationService registrationService = new RegistrationServiceImpl(daoMock); + RegistrationService registrationService = + new RegistrationServiceImpl(daoMock, vehicleService); List<Registration> registrations = new LinkedList<>(); Vehicle vehicle = Vehicle.builder() @@ -83,14 +108,15 @@ public class RegistrationServiceImplTest { registrations.add(registration1); registrations.add(registration2); registrations.add(registration3); - registrationService.add(vehicle, registrations); + registrationService.add(vehicle.id(), registrations); } @Test public void addOnlyOnePersonToRTWShouldFail() throws InvalidRegistrationException, ServiceException, InvalidVehicleException { thrown.expect(InvalidRegistrationException.class); - RegistrationService registrationService = new RegistrationServiceImpl(daoMock); + RegistrationService registrationService = + new RegistrationServiceImpl(daoMock, vehicleService); List<Registration> registrations = new LinkedList<>(); Vehicle vehicle = Vehicle.builder() @@ -117,6 +143,6 @@ public class RegistrationServiceImplTest { .employee(employee) .build(); registrations.add(registration); - registrationService.add(vehicle, registrations); + registrationService.add(vehicle.id(), registrations); } } -- cgit v1.2.3-70-g09d2