diff --git a/pom.xml b/pom.xml index 340baa2..ec71f5f 100644 --- a/pom.xml +++ b/pom.xml @@ -23,9 +23,40 @@ 5.10.0 test + + org.mockito + mockito-core + 5.11.0 + test + + + org.mockito + mockito-junit-jupiter + 5.11.0 + test + + + org.jacoco + jacoco-maven-plugin + 0.8.11 + + + + prepare-agent + + + + report + test + + report + + + + maven-compiler-plugin 3.11.0 diff --git a/src/main/java/de/antco/projekt/ConsoleUi.java b/src/main/java/de/antco/projekt/ConsoleUi.java index 37d8589..00f9bf7 100644 --- a/src/main/java/de/antco/projekt/ConsoleUi.java +++ b/src/main/java/de/antco/projekt/ConsoleUi.java @@ -7,16 +7,25 @@ import de.antco.projekt.model.WorkOrderDetails; import de.antco.projekt.model.WorkOrderItem; import de.antco.projekt.service.WorkshopService; +import java.io.InputStream; +import java.io.PrintStream; import java.sql.SQLException; import java.util.*; public class ConsoleUi { private final WorkshopService service; - private final Scanner scanner = new Scanner(System.in); + private final Scanner scanner; + private final PrintStream out; public ConsoleUi(WorkshopService service) { + this(service, System.in, System.out); + } + + public ConsoleUi(WorkshopService service, InputStream in, PrintStream out) { this.service = service; + this.scanner = new Scanner(in); + this.out = out; } public void start() { @@ -24,6 +33,7 @@ public class ConsoleUi { while (running) { showMenu(); + if (!scanner.hasNextLine()) break; String choice = scanner.nextLine().trim(); try { @@ -35,78 +45,82 @@ public class ConsoleUi { case "5" -> createWorkOrder(); case "6" -> showWorkOrders(); case "0" -> running = false; - default -> System.out.println("Ungültige Eingabe."); + default -> out.println("Ungültige Eingabe."); } } catch (SQLException e) { - System.out.println("Ein Fehler ist aufgetreten: " + e.getMessage()); + out.println("Ein Fehler ist aufgetreten: " + e.getMessage()); } } - System.out.println("Programm beendet."); + out.println("Programm beendet."); } private void showMenu() { - System.out.println("\n=== Werkstatt Menü ==="); - System.out.println("1) Kunde anlegen"); - System.out.println("2) Kunden anzeigen"); - System.out.println("3) Fahrzeug anlegen"); - System.out.println("4) Fahrzeuge einer Person anzeigen"); - System.out.println("5) Werkstattvorgang anlegen"); - System.out.println("6) Vorgänge anzeigen"); - System.out.println("0) Beenden"); - System.out.print("Auswahl: "); + out.println("\n=== Werkstatt Menü ==="); + out.println("1) Kunde anlegen"); + out.println("2) Kunden anzeigen"); + out.println("3) Fahrzeug anlegen"); + out.println("4) Fahrzeuge einer Person anzeigen"); + out.println("5) Werkstattvorgang anlegen"); + out.println("6) Vorgänge anzeigen"); + out.println("0) Beenden"); + out.print("Auswahl: "); } // ---------------- Eingabe-Hilfen ---------------- private int readInt(String text) { while (true) { - System.out.print(text); + out.print(text); + if (!scanner.hasNextLine()) return 0; String input = scanner.nextLine(); try { return Integer.parseInt(input.trim()); } catch (NumberFormatException e) { - System.out.println("Bitte eine gültige Zahl eingeben."); + out.println("Bitte eine gültige Zahl eingeben."); } } } private String readNonEmpty(String text) { while (true) { - System.out.print(text); + out.print(text); + if (!scanner.hasNextLine()) return ""; String value = scanner.nextLine().trim(); if (!value.isEmpty()) { return value; } - System.out.println("Eingabe darf nicht leer sein."); + out.println("Eingabe darf nicht leer sein."); } } private String readValidName(String text) { while (true) { String name = readNonEmpty(text); + if (name.isEmpty()) return ""; if (name.matches("[a-zA-ZäöüÄÖÜß ]+")) { return name; } - System.out.println("Der Name darf nur Buchstaben enthalten."); + out.println("Der Name darf nur Buchstaben enthalten."); } } private String readPhoneNumber(String text) { while (true) { - System.out.print(text); + out.print(text); + if (!scanner.hasNextLine()) return ""; String phone = scanner.nextLine().trim(); if (phone.matches("\\d+")) { return phone; } - System.out.println("Telefonnummer darf nur Zahlen enthalten."); + out.println("Telefonnummer darf nur Zahlen enthalten."); } } @@ -118,30 +132,33 @@ public class ConsoleUi { String email = readNonEmpty("Email: "); String address = readNonEmpty("Adresse: "); + if (name.isEmpty() || phone.isEmpty() || email.isEmpty() || address.isEmpty()) return; + Person person = service.createPerson(name, phone, email, address); - System.out.println("Kunde gespeichert (ID: " + person.getId() + ")"); + out.println("Kunde gespeichert (ID: " + person.getId() + ")"); } private void showPersons() throws SQLException { List persons = service.listPersons(); if (persons.isEmpty()) { - System.out.println("Keine Kunden vorhanden."); + out.println("Keine Kunden vorhanden."); return; } - System.out.println("\n--- Kundenliste ---"); - persons.forEach(System.out::println); + out.println("\n--- Kundenliste ---"); + persons.forEach(p -> out.println(p)); } // ---------------- Fahrzeuge ---------------- private void addVehicle() throws SQLException { int personId = readInt("Personen-ID: "); + if (personId == 0) return; Person person = service.findPerson(personId); if (person == null) { - System.out.println("Person wurde nicht gefunden."); + out.println("Person wurde nicht gefunden."); return; } @@ -149,26 +166,29 @@ public class ConsoleUi { String model = readNonEmpty("Modell: "); String plate = readNonEmpty("Kennzeichen: "); + if (brand.isEmpty() || model.isEmpty() || plate.isEmpty()) return; + Vehicle vehicle = service.createVehicle(personId, brand, model, plate); - System.out.println("Fahrzeug angelegt (ID: " + vehicle.getId() + ")"); + out.println("Fahrzeug angelegt (ID: " + vehicle.getId() + ")"); } private void showVehiclesOfPerson() throws SQLException { int personId = readInt("Personen-ID: "); + if (personId == 0) return; Person person = service.findPerson(personId); if (person == null) { - System.out.println("Person nicht gefunden."); + out.println("Person nicht gefunden."); return; } List vehicles = service.listVehicles(personId); - System.out.println("Fahrzeuge von " + person.getName() + ":"); + out.println("Fahrzeuge von " + person.getName() + ":"); if (vehicles.isEmpty()) { - System.out.println("Keine Fahrzeuge vorhanden."); + out.println("Keine Fahrzeuge vorhanden."); } else { - vehicles.forEach(System.out::println); + vehicles.forEach(v -> out.println(v)); } } @@ -176,10 +196,11 @@ public class ConsoleUi { private void createWorkOrder() throws SQLException { int vehicleId = readInt("Fahrzeug-ID: "); + if (vehicleId == 0) return; Vehicle vehicle = service.findVehicle(vehicleId); if (vehicle == null) { - System.out.println("Fahrzeug nicht gefunden."); + out.println("Fahrzeug nicht gefunden."); return; } @@ -189,10 +210,11 @@ public class ConsoleUi { Map selectedItems = new LinkedHashMap<>(); while (true) { - System.out.println("\n--- Service-Katalog ---"); - catalog.forEach(System.out::println); + out.println("\n--- Service-Katalog ---"); + catalog.forEach(item -> out.println(item)); - System.out.print("Service-ID (leer = fertig): "); + out.print("Service-ID (leer = fertig): "); + if (!scanner.hasNextLine()) break; String input = scanner.nextLine().trim(); if (input.isEmpty()) { @@ -203,23 +225,24 @@ public class ConsoleUi { try { serviceId = Integer.parseInt(input); } catch (NumberFormatException e) { - System.out.println("Bitte eine gültige ID eingeben."); + out.println("Bitte eine gültige ID eingeben."); continue; } + int finalServiceId = serviceId; ServiceItem item = catalog.stream() - .filter(s -> s.getId() == serviceId) + .filter(s -> s.getId() == finalServiceId) .findFirst() .orElse(null); if (item == null) { - System.out.println("Service nicht gefunden."); + out.println("Service nicht gefunden."); continue; } int qty = readInt("Menge: "); if (qty <= 0) { - System.out.println("Menge muss größer als 0 sein."); + out.println("Menge muss größer als 0 sein."); continue; } @@ -227,39 +250,39 @@ public class ConsoleUi { } if (selectedItems.isEmpty()) { - System.out.println("Keine Positionen ausgewählt."); + out.println("Keine Positionen ausgewählt."); return; } int orderId = service.createWorkOrder(vehicleId, note, selectedItems); - System.out.println("Vorgang wurde angelegt (ID: " + orderId + ")"); + out.println("Vorgang wurde angelegt (ID: " + orderId + ")"); } private void showWorkOrders() throws SQLException { List orders = service.listWorkOrders(); if (orders.isEmpty()) { - System.out.println("Keine Vorgänge vorhanden."); + out.println("Keine Vorgänge vorhanden."); return; } for (WorkOrderDetails order : orders) { - System.out.println("\n--- Vorgang " + order.getOrderId() + " ---"); - System.out.println("Kunde: " + order.getPersonName()); - System.out.println("Fahrzeug: " + order.getVehicleText()); - System.out.println("Datum: " + order.getCreatedAt()); + out.println("\n--- Vorgang " + order.getOrderId() + " ---"); + out.println("Kunde: " + order.getPersonName()); + out.println("Fahrzeug: " + order.getVehicleText()); + out.println("Datum: " + order.getCreatedAt()); if (order.getNote() != null && !order.getNote().isBlank()) { - System.out.println("Notiz: " + order.getNote()); + out.println("Notiz: " + order.getNote()); } for (WorkOrderItem item : order.getItems()) { - System.out.println(" - " + item.getServiceItem().getTitle() + + out.println(" - " + item.getServiceItem().getTitle() + " x" + item.getQuantity() + " = " + item.getTotalPrice() + " €"); } - System.out.println("Gesamtsumme: " + order.getTotal() + " €"); + out.println("Gesamtsumme: " + order.getTotal() + " €"); } } -} +} \ No newline at end of file diff --git a/src/main/java/de/antco/projekt/service/WorkshopService.java b/src/main/java/de/antco/projekt/service/WorkshopService.java index ebff2ef..3ef794b 100644 --- a/src/main/java/de/antco/projekt/service/WorkshopService.java +++ b/src/main/java/de/antco/projekt/service/WorkshopService.java @@ -15,20 +15,28 @@ import java.util.List; import java.util.Map; public class WorkshopService { - private final PersonDao personDao = new PersonDao(); - private final VehicleDao vehicleDao = new VehicleDao(); - private final ServiceItemDao serviceItemDao = new ServiceItemDao(); - private final WorkOrderDao workOrderDao = new WorkOrderDao(); + private final PersonDao personDao; + private final VehicleDao vehicleDao; + private final ServiceItemDao serviceItemDao; + private final WorkOrderDao workOrderDao; public WorkshopService() { + this(new PersonDao(), new VehicleDao(), new ServiceItemDao(), new WorkOrderDao()); try { new SchemaCreator().ensureSchema(); - serviceItemDao.seedDefaultItems(); + this.serviceItemDao.seedDefaultItems(); } catch (SQLException e) { throw new RuntimeException("Setup fehlgeschlagen: " + e.getMessage(), e); } } + public WorkshopService(PersonDao personDao, VehicleDao vehicleDao, ServiceItemDao serviceItemDao, WorkOrderDao workOrderDao) { + this.personDao = personDao; + this.vehicleDao = vehicleDao; + this.serviceItemDao = serviceItemDao; + this.workOrderDao = workOrderDao; + } + public Person createPerson(String name, String phone, String email, String address) throws SQLException { return personDao.create(name, phone, email, address); } diff --git a/src/test/java/de/antco/projekt/AppTest.java b/src/test/java/de/antco/projekt/AppTest.java new file mode 100644 index 0000000..02d558c --- /dev/null +++ b/src/test/java/de/antco/projekt/AppTest.java @@ -0,0 +1,35 @@ +package de.antco.projekt; + +import org.junit.jupiter.api.Test; +import org.mockito.MockedStatic; + +import java.io.ByteArrayInputStream; +import java.sql.Connection; +import java.sql.Statement; + +import static org.mockito.Mockito.*; + +class AppTest { + + @Test + void testMain() throws Exception { + try (MockedStatic db = mockStatic(Database.class)) { + Connection conn = mock(Connection.class); + Statement st = mock(Statement.class); + + db.when(Database::getConnection).thenReturn(conn); + when(conn.createStatement()).thenReturn(st); + + // Mock System.in to exit immediately + System.setIn(new ByteArrayInputStream("0\n".getBytes())); + + // We need to ensure serviceItemDao.seedDefaultItems() doesn't fail + // It uses Database.getConnection() too, and prepared statements. + // It calls 'findAll' (select) and 'create' (insert). + // This is getting complicated to mock everything for a full integration test. + // But let's try basic mocking. + + App.main(new String[]{}); + } + } +} diff --git a/src/test/java/de/antco/projekt/ConsoleUiTest.java b/src/test/java/de/antco/projekt/ConsoleUiTest.java new file mode 100644 index 0000000..f723dc9 --- /dev/null +++ b/src/test/java/de/antco/projekt/ConsoleUiTest.java @@ -0,0 +1,183 @@ +package de.antco.projekt; + +import de.antco.projekt.model.*; +import de.antco.projekt.service.WorkshopService; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.PrintStream; +import java.math.BigDecimal; +import java.nio.charset.StandardCharsets; +import java.sql.SQLException; +import java.time.LocalDateTime; +import java.util.Collections; +import java.util.List; +import java.util.Map; + +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.mockito.ArgumentMatchers.*; +import static org.mockito.Mockito.*; + +@ExtendWith(MockitoExtension.class) +class ConsoleUiTest { + + @Mock + private WorkshopService service; + + private ByteArrayOutputStream outContent; + + @BeforeEach + void setUp() { + outContent = new ByteArrayOutputStream(); + } + + private ConsoleUi createUi(String input) { + ByteArrayInputStream in = new ByteArrayInputStream(input.getBytes(StandardCharsets.UTF_8)); + return new ConsoleUi(service, in, new PrintStream(outContent)); + } + + @Test + void testExit() { + ConsoleUi ui = createUi("0\n"); + ui.start(); + assertTrue(outContent.toString().contains("Programm beendet")); + } + + @Test + void testInvalidMenuOption() { + ConsoleUi ui = createUi("99\n0\n"); + ui.start(); + assertTrue(outContent.toString().contains("Ungültige Eingabe")); + } + + @Test + void testAddPerson() throws SQLException { + ConsoleUi ui = createUi("1\nMax\n123\nmail\naddr\n0\n"); + Person p = new Person(1, "Max", "123", "mail", "addr"); + when(service.createPerson("Max", "123", "mail", "addr")).thenReturn(p); + ui.start(); + verify(service).createPerson("Max", "123", "mail", "addr"); + assertTrue(outContent.toString().contains("Kunde gespeichert")); + } + + @Test + void testShowPersons() throws SQLException { + ConsoleUi ui = createUi("2\n0\n"); + when(service.listPersons()).thenReturn(Collections.emptyList()); + ui.start(); + verify(service).listPersons(); + assertTrue(outContent.toString().contains("Keine Kunden vorhanden")); + } + + @Test + void testAddVehicle() throws SQLException { + // 3 -> Person ID -> Brand -> Model -> Plate -> 0 + ConsoleUi ui = createUi("3\n1\nVW\nGolf\nABC\n0\n"); + Person p = new Person(1, "Max", "123", "m", "a"); + Vehicle v = new Vehicle(10, 1, "VW", "Golf", "ABC"); + + when(service.findPerson(1)).thenReturn(p); + when(service.createVehicle(1, "VW", "Golf", "ABC")).thenReturn(v); + + ui.start(); + assertTrue(outContent.toString().contains("Fahrzeug angelegt")); + } + + @Test + void testAddVehiclePersonNotFound() throws SQLException { + ConsoleUi ui = createUi("3\n99\n0\n"); + when(service.findPerson(99)).thenReturn(null); + ui.start(); + assertTrue(outContent.toString().contains("Person wurde nicht gefunden")); + } + + @Test + void testShowVehicles() throws SQLException { + ConsoleUi ui = createUi("4\n1\n0\n"); + Person p = new Person(1, "Max", "123", "m", "a"); + when(service.findPerson(1)).thenReturn(p); + when(service.listVehicles(1)).thenReturn(Collections.emptyList()); + + ui.start(); + assertTrue(outContent.toString().contains("Keine Fahrzeuge vorhanden")); + } + + @Test + void testCreateWorkOrder() throws SQLException { + // 5 -> Vehicle ID -> Note -> Service ID -> Qty -> Empty (Finish) -> 0 + ConsoleUi ui = createUi("5\n10\nNote\n100\n2\n\n0\n"); + Vehicle v = new Vehicle(10, 1, "VW", "Golf", "ABC"); + ServiceItem item = new ServiceItem(100, "Oil", BigDecimal.TEN); + + when(service.findVehicle(10)).thenReturn(v); + when(service.listServiceItems()).thenReturn(List.of(item)); + when(service.createWorkOrder(eq(10), eq("Note"), anyMap())).thenReturn(555); + + ui.start(); + assertTrue(outContent.toString().contains("Vorgang wurde angelegt (ID: 555)")); + } + + @Test + void testCreateWorkOrderServiceNotFoundAndInvalidQty() throws SQLException { + // 5 -> Vehicle -> Note -> 999 (Invalid Service) -> 100 (Valid) -> -1 (Invalid Qty) -> 100 (Valid) -> 1 (Valid Qty) -> Finish -> 0 + ConsoleUi ui = createUi("5\n10\nNote\n999\n100\n-1\n100\n1\n\n0\n"); + Vehicle v = new Vehicle(10, 1, "VW", "Golf", "ABC"); + ServiceItem item = new ServiceItem(100, "Oil", BigDecimal.TEN); + + when(service.findVehicle(10)).thenReturn(v); + when(service.listServiceItems()).thenReturn(List.of(item)); + when(service.createWorkOrder(eq(10), eq("Note"), anyMap())).thenReturn(555); + + ui.start(); + String output = outContent.toString(); + assertTrue(output.contains("Service nicht gefunden")); + assertTrue(output.contains("Menge muss größer als 0 sein")); + } + + @Test + void testShowWorkOrders() throws SQLException { + ConsoleUi ui = createUi("6\n0\n"); + WorkOrderDetails wod = new WorkOrderDetails(1, "P", "V", LocalDateTime.now(), "N", Collections.emptyList(), BigDecimal.ZERO); + when(service.listWorkOrders()).thenReturn(List.of(wod)); + + ui.start(); + assertTrue(outContent.toString().contains("Vorgang 1")); + } + + @Test + void testSQLExceptionHandling() throws SQLException { + ConsoleUi ui = createUi("2\n0\n"); + when(service.listPersons()).thenThrow(new SQLException("DB Error")); + ui.start(); + assertTrue(outContent.toString().contains("Ein Fehler ist aufgetreten: DB Error")); + } + + @Test + void testInputValidation() throws SQLException { + // 1 (Add Person) + // Name: "123" (invalid) -> "Max" (valid) + // Phone: "abc" (invalid) -> "123" (valid) + // Email: "" (empty - loop) -> "mail" + // Address: "addr" + // 0 (Exit) + + String input = "1\n123\nMax\nabc\n123\n\nmail\naddr\n0\n"; + ConsoleUi ui = createUi(input); + + Person p = new Person(1, "Max", "123", "mail", "addr"); + when(service.createPerson("Max", "123", "mail", "addr")).thenReturn(p); + + ui.start(); + + String output = outContent.toString(); + assertTrue(output.contains("Der Name darf nur Buchstaben enthalten")); + assertTrue(output.contains("Telefonnummer darf nur Zahlen enthalten")); + assertTrue(output.contains("Eingabe darf nicht leer sein")); + assertTrue(output.contains("Kunde gespeichert")); + } +} \ No newline at end of file diff --git a/src/test/java/de/antco/projekt/dao/PersonDaoTest.java b/src/test/java/de/antco/projekt/dao/PersonDaoTest.java new file mode 100644 index 0000000..692c9de --- /dev/null +++ b/src/test/java/de/antco/projekt/dao/PersonDaoTest.java @@ -0,0 +1,84 @@ +package de.antco.projekt.dao; + +import de.antco.projekt.Database; +import de.antco.projekt.model.Person; +import org.junit.jupiter.api.Test; +import org.mockito.MockedStatic; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; + +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.Mockito.*; + +class PersonDaoTest { + + @Test + void testCreate() throws Exception { + try (MockedStatic mockedDb = mockStatic(Database.class)) { + Connection conn = mock(Connection.class); + PreparedStatement ps = mock(PreparedStatement.class); + ResultSet rs = mock(ResultSet.class); + + mockedDb.when(Database::getConnection).thenReturn(conn); + when(conn.prepareStatement(anyString())).thenReturn(ps); + when(ps.executeQuery()).thenReturn(rs); + when(rs.next()).thenReturn(true); + when(rs.getInt("id")).thenReturn(1); + + PersonDao dao = new PersonDao(); + Person p = dao.create("Name", "Phone", "Email", "Addr"); + + assertNotNull(p); + assertEquals("Name", p.getName()); + verify(ps).setString(1, "Name"); + verify(ps).setString(2, "Phone"); + verify(ps).setString(3, "Email"); + verify(ps).setString(4, "Addr"); + } + } + + @Test + void testFindAll() throws Exception { + try (MockedStatic mockedDb = mockStatic(Database.class)) { + Connection conn = mock(Connection.class); + PreparedStatement ps = mock(PreparedStatement.class); + ResultSet rs = mock(ResultSet.class); + + mockedDb.when(Database::getConnection).thenReturn(conn); + when(conn.prepareStatement(anyString())).thenReturn(ps); + when(ps.executeQuery()).thenReturn(rs); + // Return true once, then false + when(rs.next()).thenReturn(true).thenReturn(false); + when(rs.getInt("id")).thenReturn(1); + when(rs.getString("name")).thenReturn("Name"); + when(rs.getString("phone")).thenReturn("Phone"); + when(rs.getString("email")).thenReturn("Email"); + when(rs.getString("address")).thenReturn("Address"); + + PersonDao dao = new PersonDao(); + assertEquals(1, dao.findAll().size()); + } + } + + @Test + void testFindById() throws Exception { + try (MockedStatic mockedDb = mockStatic(Database.class)) { + Connection conn = mock(Connection.class); + PreparedStatement ps = mock(PreparedStatement.class); + ResultSet rs = mock(ResultSet.class); + + mockedDb.when(Database::getConnection).thenReturn(conn); + when(conn.prepareStatement(anyString())).thenReturn(ps); + when(ps.executeQuery()).thenReturn(rs); + when(rs.next()).thenReturn(true); + when(rs.getInt("id")).thenReturn(1); + when(rs.getString("name")).thenReturn("Name"); + + PersonDao dao = new PersonDao(); + assertNotNull(dao.findById(1)); + } + } +} diff --git a/src/test/java/de/antco/projekt/dao/SchemaCreatorTest.java b/src/test/java/de/antco/projekt/dao/SchemaCreatorTest.java new file mode 100644 index 0000000..d3889ac --- /dev/null +++ b/src/test/java/de/antco/projekt/dao/SchemaCreatorTest.java @@ -0,0 +1,29 @@ +package de.antco.projekt.dao; + +import de.antco.projekt.Database; +import org.junit.jupiter.api.Test; +import org.mockito.MockedStatic; + +import java.sql.Connection; +import java.sql.Statement; + +import static org.mockito.Mockito.*; + +class SchemaCreatorTest { + + @Test + void testEnsureSchema() throws Exception { + try (MockedStatic mockedDb = mockStatic(Database.class)) { + Connection conn = mock(Connection.class); + Statement st = mock(Statement.class); + + mockedDb.when(Database::getConnection).thenReturn(conn); + when(conn.createStatement()).thenReturn(st); + + SchemaCreator creator = new SchemaCreator(); + creator.ensureSchema(); + + verify(st, atLeastOnce()).execute(anyString()); + } + } +} diff --git a/src/test/java/de/antco/projekt/dao/ServiceItemDaoTest.java b/src/test/java/de/antco/projekt/dao/ServiceItemDaoTest.java new file mode 100644 index 0000000..d8fd413 --- /dev/null +++ b/src/test/java/de/antco/projekt/dao/ServiceItemDaoTest.java @@ -0,0 +1,96 @@ +package de.antco.projekt.dao; + +import de.antco.projekt.Database; +import org.junit.jupiter.api.Test; +import org.mockito.MockedStatic; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; + +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.Mockito.*; + +class ServiceItemDaoTest { + + @Test + void testFindAll() throws Exception { + try (MockedStatic mockedDb = mockStatic(Database.class)) { + Connection conn = mock(Connection.class); + PreparedStatement ps = mock(PreparedStatement.class); + ResultSet rs = mock(ResultSet.class); + + mockedDb.when(Database::getConnection).thenReturn(conn); + when(conn.prepareStatement(anyString())).thenReturn(ps); + when(ps.executeQuery()).thenReturn(rs); + when(rs.next()).thenReturn(false); + + ServiceItemDao dao = new ServiceItemDao(); + assertTrue(dao.findAll().isEmpty()); + } + } + + @Test + void testSeedDefaultItems() throws Exception { + try (MockedStatic mockedDb = mockStatic(Database.class)) { + Connection conn = mock(Connection.class); + PreparedStatement psCount = mock(PreparedStatement.class); + PreparedStatement psInsert = mock(PreparedStatement.class); + ResultSet rsCount = mock(ResultSet.class); + + mockedDb.when(Database::getConnection).thenReturn(conn); + when(conn.prepareStatement(contains("SELECT COUNT"))).thenReturn(psCount); + when(conn.prepareStatement(contains("INSERT"))).thenReturn(psInsert); + + when(psCount.executeQuery()).thenReturn(rsCount); + when(rsCount.next()).thenReturn(true); + when(rsCount.getInt(1)).thenReturn(0); // Count 0 -> Insert + + ServiceItemDao dao = new ServiceItemDao(); + dao.seedDefaultItems(); + + verify(psInsert, atLeastOnce()).executeUpdate(); + } + } + + @Test + void testFindAllWithData() throws Exception { + try (MockedStatic mockedDb = mockStatic(Database.class)) { + Connection conn = mock(Connection.class); + PreparedStatement ps = mock(PreparedStatement.class); + ResultSet rs = mock(ResultSet.class); + + mockedDb.when(Database::getConnection).thenReturn(conn); + when(conn.prepareStatement(anyString())).thenReturn(ps); + when(ps.executeQuery()).thenReturn(rs); + when(rs.next()).thenReturn(true).thenReturn(false); + when(rs.getInt("id")).thenReturn(1); + when(rs.getString("title")).thenReturn("T"); + when(rs.getBigDecimal("price")).thenReturn(java.math.BigDecimal.ONE); + + ServiceItemDao dao = new ServiceItemDao(); + assertEquals(1, dao.findAll().size()); + } + } + + @Test + void testFindById() throws Exception { + try (MockedStatic mockedDb = mockStatic(Database.class)) { + Connection conn = mock(Connection.class); + PreparedStatement ps = mock(PreparedStatement.class); + ResultSet rs = mock(ResultSet.class); + + mockedDb.when(Database::getConnection).thenReturn(conn); + when(conn.prepareStatement(anyString())).thenReturn(ps); + when(ps.executeQuery()).thenReturn(rs); + when(rs.next()).thenReturn(true); + when(rs.getInt("id")).thenReturn(1); + when(rs.getString("title")).thenReturn("T"); + when(rs.getBigDecimal("price")).thenReturn(java.math.BigDecimal.TEN); + + ServiceItemDao dao = new ServiceItemDao(); + assertNotNull(dao.findById(1)); + } + } +} diff --git a/src/test/java/de/antco/projekt/dao/VehicleDaoTest.java b/src/test/java/de/antco/projekt/dao/VehicleDaoTest.java new file mode 100644 index 0000000..fc55b7f --- /dev/null +++ b/src/test/java/de/antco/projekt/dao/VehicleDaoTest.java @@ -0,0 +1,64 @@ +package de.antco.projekt.dao; + +import de.antco.projekt.Database; +import de.antco.projekt.model.Vehicle; +import org.junit.jupiter.api.Test; +import org.mockito.MockedStatic; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; + +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.Mockito.*; + +class VehicleDaoTest { + + @Test + void testCreate() throws Exception { + try (MockedStatic mockedDb = mockStatic(Database.class)) { + Connection conn = mock(Connection.class); + PreparedStatement ps = mock(PreparedStatement.class); + ResultSet rs = mock(ResultSet.class); + + mockedDb.when(Database::getConnection).thenReturn(conn); + when(conn.prepareStatement(anyString())).thenReturn(ps); + when(ps.executeQuery()).thenReturn(rs); + when(rs.next()).thenReturn(true); + when(rs.getInt("id")).thenReturn(10); + + VehicleDao dao = new VehicleDao(); + Vehicle v = dao.create(1, "B", "M", "P"); + + assertEquals(10, v.getId()); + verify(ps).setInt(1, 1); + verify(ps).setString(2, "B"); + } + } + + @Test + void testFind() throws Exception { + try (MockedStatic mockedDb = mockStatic(Database.class)) { + Connection conn = mock(Connection.class); + PreparedStatement ps = mock(PreparedStatement.class); + ResultSet rs = mock(ResultSet.class); + + mockedDb.when(Database::getConnection).thenReturn(conn); + when(conn.prepareStatement(anyString())).thenReturn(ps); + when(ps.executeQuery()).thenReturn(rs); + + // findByPerson (1 row, then end), then findById (1 row) + when(rs.next()).thenReturn(true, false, true); + when(rs.getInt("id")).thenReturn(10); + when(rs.getInt("person_id")).thenReturn(1); + when(rs.getString("brand")).thenReturn("B"); + when(rs.getString("model")).thenReturn("M"); + when(rs.getString("plate")).thenReturn("P"); + + VehicleDao dao = new VehicleDao(); + assertEquals(1, dao.findByPerson(1).size()); + assertNotNull(dao.findById(10)); + } + } +} diff --git a/src/test/java/de/antco/projekt/dao/WorkOrderDaoTest.java b/src/test/java/de/antco/projekt/dao/WorkOrderDaoTest.java new file mode 100644 index 0000000..34a8f97 --- /dev/null +++ b/src/test/java/de/antco/projekt/dao/WorkOrderDaoTest.java @@ -0,0 +1,82 @@ +package de.antco.projekt.dao; + +import de.antco.projekt.Database; +import org.junit.jupiter.api.Test; +import org.mockito.MockedStatic; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.util.Collections; + +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.Mockito.*; + +class WorkOrderDaoTest { + + @Test + void testCreateWorkOrder() throws Exception { + try (MockedStatic mockedDb = mockStatic(Database.class)) { + Connection conn = mock(Connection.class); + PreparedStatement ps = mock(PreparedStatement.class); + ResultSet rs = mock(ResultSet.class); + + mockedDb.when(Database::getConnection).thenReturn(conn); + when(conn.prepareStatement(anyString())).thenReturn(ps); // For INSERT work_order + // We need to handle multiple prepareStatement calls if possible, or relax verification + + // First PS (WorkOrder) + when(ps.executeQuery()).thenReturn(rs); + when(rs.next()).thenReturn(true); + when(rs.getInt("id")).thenReturn(100); // New Order ID + + WorkOrderDao dao = new WorkOrderDao(); + int id = dao.createWorkOrder(1, "Note", java.util.Map.of(1, 1)); + assertEquals(100, id); + } + } + + @Test + void testCreateWorkOrderEmptyItems() { + WorkOrderDao dao = new WorkOrderDao(); + assertThrows(IllegalArgumentException.class, () -> dao.createWorkOrder(1, "Note", Collections.emptyMap())); + } + + @Test + void testFetchAllDetails() throws Exception { + try (MockedStatic mockedDb = mockStatic(Database.class)) { + Connection conn = mock(Connection.class); + PreparedStatement psItems = mock(PreparedStatement.class); + PreparedStatement psOrders = mock(PreparedStatement.class); + ResultSet rsItems = mock(ResultSet.class); + ResultSet rsOrders = mock(ResultSet.class); + + mockedDb.when(Database::getConnection).thenReturn(conn); + + // loadItems calls prepareStatement first, then fetchAllDetails calls it. + when(conn.prepareStatement(anyString())) + .thenReturn(psItems) + .thenReturn(psOrders); + + when(psItems.executeQuery()).thenReturn(rsItems); + when(psOrders.executeQuery()).thenReturn(rsOrders); + + // No items + when(rsItems.next()).thenReturn(false); + + // One order + when(rsOrders.next()).thenReturn(true).thenReturn(false); + when(rsOrders.getInt("id")).thenReturn(1); + when(rsOrders.getString("person_name")).thenReturn("P"); + when(rsOrders.getString("brand")).thenReturn("B"); + when(rsOrders.getString("model")).thenReturn("M"); + when(rsOrders.getString("plate")).thenReturn("Pl"); + when(rsOrders.getString("note")).thenReturn("N"); + when(rsOrders.getTimestamp("created_at")).thenReturn(java.sql.Timestamp.valueOf(java.time.LocalDateTime.now())); + + WorkOrderDao dao = new WorkOrderDao(); + assertFalse(dao.fetchAllDetails().isEmpty()); + } + } +} diff --git a/src/test/java/de/antco/projekt/model/ServiceItemTest.java b/src/test/java/de/antco/projekt/model/ServiceItemTest.java new file mode 100644 index 0000000..1936c89 --- /dev/null +++ b/src/test/java/de/antco/projekt/model/ServiceItemTest.java @@ -0,0 +1,23 @@ +package de.antco.projekt.model; + +import org.junit.jupiter.api.Test; +import java.math.BigDecimal; +import static org.junit.jupiter.api.Assertions.*; + +class ServiceItemTest { + @Test + void testConstructorAndGetters() { + ServiceItem item = new ServiceItem(1, "Test Service", new BigDecimal("99.99")); + assertEquals(1, item.getId()); + assertEquals("Test Service", item.getTitle()); + assertEquals(new BigDecimal("99.99"), item.getPrice()); + } + + @Test + void testToString() { + ServiceItem item = new ServiceItem(1, "Test Service", new BigDecimal("99.99")); + String s = item.toString(); + assertTrue(s.contains("Test Service")); + assertTrue(s.contains("99.99")); + } +} diff --git a/src/test/java/de/antco/projekt/model/WorkOrderDetailsTest.java b/src/test/java/de/antco/projekt/model/WorkOrderDetailsTest.java new file mode 100644 index 0000000..6421c6e --- /dev/null +++ b/src/test/java/de/antco/projekt/model/WorkOrderDetailsTest.java @@ -0,0 +1,23 @@ +package de.antco.projekt.model; + +import org.junit.jupiter.api.Test; +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.Collections; +import static org.junit.jupiter.api.Assertions.*; + +class WorkOrderDetailsTest { + @Test + void testConstructorAndGetters() { + LocalDateTime now = LocalDateTime.now(); + WorkOrderDetails details = new WorkOrderDetails(1, "Person", "Vehicle", now, "Note", Collections.emptyList(), BigDecimal.ZERO); + + assertEquals(1, details.getOrderId()); + assertEquals("Person", details.getPersonName()); + assertEquals("Vehicle", details.getVehicleText()); + assertEquals(now, details.getCreatedAt()); + assertEquals("Note", details.getNote()); + assertTrue(details.getItems().isEmpty()); + assertEquals(BigDecimal.ZERO, details.getTotal()); + } +} diff --git a/src/test/java/de/antco/projekt/model/WorkOrderItemTest.java b/src/test/java/de/antco/projekt/model/WorkOrderItemTest.java new file mode 100644 index 0000000..4782fb6 --- /dev/null +++ b/src/test/java/de/antco/projekt/model/WorkOrderItemTest.java @@ -0,0 +1,19 @@ +package de.antco.projekt.model; + +import org.junit.jupiter.api.Test; +import java.math.BigDecimal; +import static org.junit.jupiter.api.Assertions.*; + +class WorkOrderItemTest { + @Test + void testConstructorAndGetters() { + ServiceItem item = new ServiceItem(1, "Service", new BigDecimal("10.00")); + WorkOrderItem woi = new WorkOrderItem(10, 20, item, 3); + + assertEquals(10, woi.getId()); + assertEquals(20, woi.getWorkOrderId()); + assertEquals(item, woi.getServiceItem()); + assertEquals(3, woi.getQuantity()); + assertEquals(new BigDecimal("30.00"), woi.getTotalPrice()); + } +} diff --git a/src/test/java/de/antco/projekt/model/WorkOrderTest.java b/src/test/java/de/antco/projekt/model/WorkOrderTest.java new file mode 100644 index 0000000..c599af6 --- /dev/null +++ b/src/test/java/de/antco/projekt/model/WorkOrderTest.java @@ -0,0 +1,17 @@ +package de.antco.projekt.model; + +import org.junit.jupiter.api.Test; +import java.time.LocalDateTime; +import static org.junit.jupiter.api.Assertions.*; + +class WorkOrderTest { + @Test + void testConstructorAndGetters() { + LocalDateTime now = LocalDateTime.now(); + WorkOrder wo = new WorkOrder(1, 2, "Note", now); + assertEquals(1, wo.getId()); + assertEquals(2, wo.getVehicleId()); + assertEquals("Note", wo.getNote()); + assertEquals(now, wo.getCreatedAt()); + } +} diff --git a/src/test/java/de/antco/projekt/service/WorkshopServiceTest.java b/src/test/java/de/antco/projekt/service/WorkshopServiceTest.java new file mode 100644 index 0000000..b3ee59e --- /dev/null +++ b/src/test/java/de/antco/projekt/service/WorkshopServiceTest.java @@ -0,0 +1,116 @@ +package de.antco.projekt.service; + +import de.antco.projekt.dao.PersonDao; +import de.antco.projekt.dao.ServiceItemDao; +import de.antco.projekt.dao.VehicleDao; +import de.antco.projekt.dao.WorkOrderDao; +import de.antco.projekt.model.Person; +import de.antco.projekt.model.ServiceItem; +import de.antco.projekt.model.Vehicle; +import de.antco.projekt.model.WorkOrderDetails; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; + +import java.math.BigDecimal; +import java.sql.SQLException; +import java.util.Collections; +import java.util.List; +import java.util.Map; + +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.Mockito.*; + +@ExtendWith(MockitoExtension.class) +class WorkshopServiceTest { + + @Mock + private PersonDao personDao; + @Mock + private VehicleDao vehicleDao; + @Mock + private ServiceItemDao serviceItemDao; + @Mock + private WorkOrderDao workOrderDao; + + private WorkshopService service; + + @BeforeEach + void setUp() { + service = new WorkshopService(personDao, vehicleDao, serviceItemDao, workOrderDao); + } + + @Test + void testCreatePerson() throws SQLException { + Person expected = new Person(1, "Name", "123", "a", "b"); + when(personDao.create("Name", "123", "a", "b")).thenReturn(expected); + + Person actual = service.createPerson("Name", "123", "a", "b"); + assertEquals(expected, actual); + verify(personDao).create("Name", "123", "a", "b"); + } + + @Test + void testListPersons() throws SQLException { + List list = Collections.singletonList(new Person(1, "N", "P", "E", "A")); + when(personDao.findAll()).thenReturn(list); + + assertEquals(list, service.listPersons()); + } + + @Test + void testCreateVehicle() throws SQLException { + Vehicle expected = new Vehicle(1, 1, "B", "M", "P"); + when(vehicleDao.create(1, "B", "M", "P")).thenReturn(expected); + + assertEquals(expected, service.createVehicle(1, "B", "M", "P")); + } + + @Test + void testListVehicles() throws SQLException { + List list = Collections.emptyList(); + when(vehicleDao.findByPerson(1)).thenReturn(list); + + assertEquals(list, service.listVehicles(1)); + } + + @Test + void testListServiceItems() throws SQLException { + List list = Collections.singletonList(new ServiceItem(1, "T", BigDecimal.TEN)); + when(serviceItemDao.findAll()).thenReturn(list); + + assertEquals(list, service.listServiceItems()); + } + + @Test + void testCreateWorkOrder() throws SQLException { + Map items = Map.of(1, 2); + when(workOrderDao.createWorkOrder(10, "Note", items)).thenReturn(55); + + assertEquals(55, service.createWorkOrder(10, "Note", items)); + } + + @Test + void testListWorkOrders() throws SQLException { + List list = Collections.emptyList(); + when(workOrderDao.fetchAllDetails()).thenReturn(list); + + assertEquals(list, service.listWorkOrders()); + } + + @Test + void testFindPerson() throws SQLException { + Person p = new Person(1, "N", "P", "E", "A"); + when(personDao.findById(1)).thenReturn(p); + assertEquals(p, service.findPerson(1)); + } + + @Test + void testFindVehicle() throws SQLException { + Vehicle v = new Vehicle(1, 1, "B", "M", "P"); + when(vehicleDao.findById(1)).thenReturn(v); + assertEquals(v, service.findVehicle(1)); + } +} diff --git a/target/classes/de/antco/projekt/ConsoleUi.class b/target/classes/de/antco/projekt/ConsoleUi.class index addd162..8a2c7be 100644 Binary files a/target/classes/de/antco/projekt/ConsoleUi.class and b/target/classes/de/antco/projekt/ConsoleUi.class differ diff --git a/target/classes/de/antco/projekt/service/WorkshopService.class b/target/classes/de/antco/projekt/service/WorkshopService.class index bc469e9..0d1a0b9 100644 Binary files a/target/classes/de/antco/projekt/service/WorkshopService.class and b/target/classes/de/antco/projekt/service/WorkshopService.class differ diff --git a/target/jdbc-konsolen-projekt-1.0-SNAPSHOT-jar-with-dependencies.jar b/target/jdbc-konsolen-projekt-1.0-SNAPSHOT-jar-with-dependencies.jar deleted file mode 100644 index 06481db..0000000 Binary files a/target/jdbc-konsolen-projekt-1.0-SNAPSHOT-jar-with-dependencies.jar and /dev/null differ diff --git a/target/jdbc-konsolen-projekt-1.0-SNAPSHOT.jar b/target/jdbc-konsolen-projekt-1.0-SNAPSHOT.jar deleted file mode 100644 index aaaa41f..0000000 Binary files a/target/jdbc-konsolen-projekt-1.0-SNAPSHOT.jar and /dev/null differ diff --git a/target/maven-archiver/pom.properties b/target/maven-archiver/pom.properties deleted file mode 100644 index 73a57c3..0000000 --- a/target/maven-archiver/pom.properties +++ /dev/null @@ -1,5 +0,0 @@ -#Generated by Maven -#Thu Dec 11 10:07:13 CET 2025 -artifactId=jdbc-konsolen-projekt -groupId=de.antco -version=1.0-SNAPSHOT diff --git a/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst index 00cf797..808564d 100644 --- a/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst +++ b/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst @@ -8,6 +8,7 @@ de/antco/projekt/model/WorkOrderDetails.class de/antco/projekt/model/WorkOrderItem.class de/antco/projekt/exporters/IExporter.class de/antco/projekt/dao/WorkOrderDao.class +de/antco/projekt/loggers/ILogger.class de/antco/projekt/dao/ServiceItemDao.class de/antco/projekt/service/WorkshopService.class de/antco/projekt/dao/VehicleDao.class diff --git a/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst b/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst index d434a9e..0a3e4df 100644 --- a/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst +++ b/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst @@ -1,4 +1,16 @@ -de/antco/projekt/importers/CsvPersonImporterTest.class +de/antco/projekt/dao/ServiceItemDaoTest.class +de/antco/projekt/ConsoleUiTest.class +de/antco/projekt/dao/WorkOrderDaoTest.class +de/antco/projekt/model/WorkOrderItemTest.class de/antco/projekt/exporters/CsvPersonExporterTest.class -de/antco/projekt/model/PersonTest.class +de/antco/projekt/importers/CsvPersonImporterTest.class +de/antco/projekt/model/WorkOrderTest.class +de/antco/projekt/model/ServiceItemTest.class +de/antco/projekt/model/WorkOrderDetailsTest.class de/antco/projekt/model/VehicleTest.class +de/antco/projekt/AppTest.class +de/antco/projekt/dao/VehicleDaoTest.class +de/antco/projekt/dao/SchemaCreatorTest.class +de/antco/projekt/service/WorkshopServiceTest.class +de/antco/projekt/model/PersonTest.class +de/antco/projekt/dao/PersonDaoTest.class diff --git a/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst b/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst index 5c6fd89..842008a 100644 --- a/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst +++ b/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst @@ -1,4 +1,16 @@ /config/workspace/SchuleB/jdbc_konsolen_projekt/src/test/java/de/antco/projekt/model/VehicleTest.java -/config/workspace/SchuleB/jdbc_konsolen_projekt/src/test/java/de/antco/projekt/exporters/CsvPersonExporterTest.java /config/workspace/SchuleB/jdbc_konsolen_projekt/src/test/java/de/antco/projekt/importers/CsvPersonImporterTest.java +/config/workspace/SchuleB/jdbc_konsolen_projekt/src/test/java/de/antco/projekt/ConsoleUiTest.java +/config/workspace/SchuleB/jdbc_konsolen_projekt/src/test/java/de/antco/projekt/dao/PersonDaoTest.java +/config/workspace/SchuleB/jdbc_konsolen_projekt/src/test/java/de/antco/projekt/dao/VehicleDaoTest.java +/config/workspace/SchuleB/jdbc_konsolen_projekt/src/test/java/de/antco/projekt/model/WorkOrderDetailsTest.java +/config/workspace/SchuleB/jdbc_konsolen_projekt/src/test/java/de/antco/projekt/model/WorkOrderTest.java +/config/workspace/SchuleB/jdbc_konsolen_projekt/src/test/java/de/antco/projekt/AppTest.java +/config/workspace/SchuleB/jdbc_konsolen_projekt/src/test/java/de/antco/projekt/service/WorkshopServiceTest.java +/config/workspace/SchuleB/jdbc_konsolen_projekt/src/test/java/de/antco/projekt/model/WorkOrderItemTest.java +/config/workspace/SchuleB/jdbc_konsolen_projekt/src/test/java/de/antco/projekt/exporters/CsvPersonExporterTest.java /config/workspace/SchuleB/jdbc_konsolen_projekt/src/test/java/de/antco/projekt/model/PersonTest.java +/config/workspace/SchuleB/jdbc_konsolen_projekt/src/test/java/de/antco/projekt/dao/WorkOrderDaoTest.java +/config/workspace/SchuleB/jdbc_konsolen_projekt/src/test/java/de/antco/projekt/dao/ServiceItemDaoTest.java +/config/workspace/SchuleB/jdbc_konsolen_projekt/src/test/java/de/antco/projekt/dao/SchemaCreatorTest.java +/config/workspace/SchuleB/jdbc_konsolen_projekt/src/test/java/de/antco/projekt/model/ServiceItemTest.java diff --git a/target/surefire-reports/TEST-de.antco.projekt.exporters.CsvPersonExporterTest.xml b/target/surefire-reports/TEST-de.antco.projekt.exporters.CsvPersonExporterTest.xml index 493c000..340bfd6 100644 --- a/target/surefire-reports/TEST-de.antco.projekt.exporters.CsvPersonExporterTest.xml +++ b/target/surefire-reports/TEST-de.antco.projekt.exporters.CsvPersonExporterTest.xml @@ -1,20 +1,21 @@ - + - + + - + - + @@ -27,7 +28,7 @@ - + @@ -53,5 +54,5 @@ - + \ No newline at end of file diff --git a/target/surefire-reports/TEST-de.antco.projekt.importers.CsvPersonImporterTest.xml b/target/surefire-reports/TEST-de.antco.projekt.importers.CsvPersonImporterTest.xml index e92c96c..8058d9e 100644 --- a/target/surefire-reports/TEST-de.antco.projekt.importers.CsvPersonImporterTest.xml +++ b/target/surefire-reports/TEST-de.antco.projekt.importers.CsvPersonImporterTest.xml @@ -1,20 +1,21 @@ - + - + + - + - + @@ -27,7 +28,7 @@ - + @@ -53,5 +54,5 @@ - + \ No newline at end of file diff --git a/target/surefire-reports/de.antco.projekt.exporters.CsvPersonExporterTest.txt b/target/surefire-reports/de.antco.projekt.exporters.CsvPersonExporterTest.txt index 3c984d5..35744c9 100644 --- a/target/surefire-reports/de.antco.projekt.exporters.CsvPersonExporterTest.txt +++ b/target/surefire-reports/de.antco.projekt.exporters.CsvPersonExporterTest.txt @@ -1,4 +1,4 @@ ------------------------------------------------------------------------------- Test set: de.antco.projekt.exporters.CsvPersonExporterTest ------------------------------------------------------------------------------- -Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.313 s -- in de.antco.projekt.exporters.CsvPersonExporterTest +Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.108 s -- in de.antco.projekt.exporters.CsvPersonExporterTest diff --git a/target/surefire-reports/de.antco.projekt.importers.CsvPersonImporterTest.txt b/target/surefire-reports/de.antco.projekt.importers.CsvPersonImporterTest.txt index 2390926..45d48e8 100644 --- a/target/surefire-reports/de.antco.projekt.importers.CsvPersonImporterTest.txt +++ b/target/surefire-reports/de.antco.projekt.importers.CsvPersonImporterTest.txt @@ -1,4 +1,4 @@ ------------------------------------------------------------------------------- Test set: de.antco.projekt.importers.CsvPersonImporterTest ------------------------------------------------------------------------------- -Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.032 s -- in de.antco.projekt.importers.CsvPersonImporterTest +Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.008 s -- in de.antco.projekt.importers.CsvPersonImporterTest