From f4946a762b7c66766791c59b99f4c99a2d2b58a7 Mon Sep 17 00:00:00 2001 From: Hymmel Date: Thu, 11 Dec 2025 13:47:41 +0100 Subject: [PATCH] putin --- src/main/java/de/antco/projekt/ConsoleUi.java | 197 ++++++++++++------ .../java/de/antco/projekt/dao/PersonDao.java | 8 + .../projekt/service/WorkshopService.java | 20 ++ .../java/de/antco/projekt/ConsoleUiTest.java | 41 ++-- .../WorkshopServiceIntegrationTest.java | 53 +++++ .../classes/de/antco/projekt/ConsoleUi.class | Bin 11779 -> 14669 bytes .../de/antco/projekt/dao/PersonDao.class | Bin 3886 -> 4436 bytes .../projekt/service/WorkshopService.class | Bin 4062 -> 5363 bytes .../default-testCompile/createdFiles.lst | 1 + .../default-testCompile/inputFiles.lst | 1 + ...rojekt.exporters.CsvPersonExporterTest.xml | 8 +- ...rojekt.importers.CsvPersonImporterTest.xml | 8 +- ...rojekt.exporters.CsvPersonExporterTest.txt | 2 +- ...rojekt.importers.CsvPersonImporterTest.txt | 2 +- 14 files changed, 243 insertions(+), 98 deletions(-) create mode 100644 src/test/java/de/antco/projekt/service/WorkshopServiceIntegrationTest.java diff --git a/src/main/java/de/antco/projekt/ConsoleUi.java b/src/main/java/de/antco/projekt/ConsoleUi.java index 095608f..a8e215d 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 { @@ -34,34 +44,63 @@ public class ConsoleUi { case "4" -> showVehiclesOfPerson(); case "5" -> createWorkOrder(); case "6" -> showWorkOrders(); + case "7" -> exportPersons(); + case "8" -> importPersons(); 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()); + } catch (Exception e) { + 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("7) Kunden exportieren (CSV)"); + out.println("8) Kunden importieren (CSV)"); + out.println("0) Beenden"); + out.print("Auswahl: "); + } + + private void exportPersons() throws Exception { + out.print("Dateipfad für Export: "); + if (!scanner.hasNextLine()) return; + String path = scanner.nextLine().trim(); + if (path.isEmpty()) { + out.println("Export abgebrochen."); + return; + } + service.exportPersons(path); + out.println("Export erfolgreich nach " + path); + } + + private void importPersons() throws Exception { + out.print("Dateipfad für Import: "); + if (!scanner.hasNextLine()) return; + String path = scanner.nextLine().trim(); + if (path.isEmpty()) { + out.println("Import abgebrochen."); + return; + } + service.importPersons(path); + out.println("Import erfolgreich."); } // ---------------- INPUT HELPERS ---------------- private int readPositiveInt(String text) { while (true) { - System.out.print(text); + out.print(text); + if (!scanner.hasNextLine()) return 0; String input = scanner.nextLine().trim(); try { @@ -69,64 +108,68 @@ public class ConsoleUi { if (value > 0) { return value; } - System.out.println("Bitte eine Zahl größer 0 eingeben."); + out.println("Bitte eine Zahl größer 0 eingeben."); } catch (NumberFormatException e) { - System.out.println("Bitte eine gültige Zahl eingeben."); + out.println("Bitte eine gültige Zahl eingeben."); } } } private String readEmail(String text) { while (true) { - System.out.print(text); + out.print(text); + if (!scanner.hasNextLine()) return ""; String input = scanner.nextLine().trim(); // einfache Validierung: enthält '@' und mindestens einen Punkt nach dem '@' if (input.matches("^[\\w._%+-]+@[\\w.-]+\\.[a-zA-Z]{2,}$")) { return input; } else { - System.out.println("Bitte eine gültige Email-Adresse eingeben."); + out.println("Bitte eine gültige Email-Adresse eingeben."); } } } private String readAddress(String text) { while (true) { - System.out.print(text); + out.print(text); + if (!scanner.hasNextLine()) return ""; String input = scanner.nextLine().trim(); // einfache Validierung: mindestens 5 Zeichen, darf Buchstaben, Zahlen, Leerzeichen und Komma enthalten if (input.length() >= 5 && input.matches("[\\w\\d\\s,.-]+")) { return input; } else { - System.out.println("Bitte eine gültige Adresse eingeben (mindestens 5 Zeichen)."); + out.println("Bitte eine gültige Adresse eingeben (mindestens 5 Zeichen)."); } } } 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 label) { while (true) { String name = readNonEmpty(label); + if (name.isEmpty()) return ""; if (name.length() < 2) { - System.out.println("Der Name muss mindestens 2 Zeichen haben."); + out.println("Der Name muss mindestens 2 Zeichen haben."); continue; } if (!name.matches("[a-zA-ZäöüÄÖÜß ]+")) { - System.out.println("Der Name darf nur Buchstaben enthalten."); + out.println("Der Name darf nur Buchstaben enthalten."); continue; } @@ -136,21 +179,22 @@ public class ConsoleUi { 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+")) { - System.out.println("Telefonnummer darf nur Zahlen enthalten."); + out.println("Telefonnummer darf nur Zahlen enthalten."); continue; } if (phone.length() < 8) { - System.out.println("Telefonnummer muss mindestens 8 Stellen haben."); + out.println("Telefonnummer muss mindestens 8 Stellen haben."); continue; } if (phone.length() > 15) { - System.out.println("Telefonnummer darf maximal 15 Stellen haben."); + out.println("Telefonnummer darf maximal 15 Stellen haben."); continue; } @@ -160,16 +204,17 @@ public class ConsoleUi { private String readValidCarText(String label) { while (true) { - System.out.print(label); + out.print(label); + if (!scanner.hasNextLine()) return ""; String value = scanner.nextLine().trim(); if (value.length() < 2) { - System.out.println("Eingabe muss mindestens 2 Zeichen haben."); + out.println("Eingabe muss mindestens 2 Zeichen haben."); continue; } if (!value.matches("[a-zA-Z0-9äöüÄÖÜß ]+")) { - System.out.println("Nur Buchstaben, Zahlen und Leerzeichen erlaubt."); + out.println("Nur Buchstaben, Zahlen und Leerzeichen erlaubt."); continue; } @@ -179,16 +224,17 @@ public class ConsoleUi { private String readLicensePlate(String text) { while (true) { - System.out.print(text); + out.print(text); + if (!scanner.hasNextLine()) return ""; String plate = scanner.nextLine().trim().toUpperCase(); if (plate.length() < 5) { - System.out.println("Kennzeichen muss mindestens 5 Zeichen haben."); + out.println("Kennzeichen muss mindestens 5 Zeichen haben."); continue; } if (!plate.matches("[A-Z0-9\\-]+")) { - System.out.println("Nur Großbuchstaben, Zahlen und Bindestriche erlaubt."); + out.println("Nur Großbuchstaben, Zahlen und Bindestriche erlaubt."); continue; } @@ -198,11 +244,12 @@ public class ConsoleUi { private String readNote() { while (true) { - System.out.print("Notiz: "); + out.print("Notiz: "); + if (!scanner.hasNextLine()) return ""; String note = scanner.nextLine().trim(); if (note.length() > 200) { - System.out.println("Notiz darf maximal 200 Zeichen haben."); + out.println("Notiz darf maximal 200 Zeichen haben."); continue; } @@ -212,7 +259,8 @@ public class ConsoleUi { private int readQuantity(String text) { while (true) { - System.out.print(text); + out.print(text); + if (!scanner.hasNextLine()) return 0; String input = scanner.nextLine().trim(); try { @@ -220,9 +268,9 @@ public class ConsoleUi { if (qty > 0 && qty <= 99) { return qty; } - System.out.println("Menge muss zwischen 1 und 99 liegen."); + out.println("Menge muss zwischen 1 und 99 liegen."); } catch (NumberFormatException e) { - System.out.println("Bitte eine gültige Zahl eingeben."); + out.println("Bitte eine gültige Zahl eingeben."); } } } @@ -234,28 +282,31 @@ public class ConsoleUi { String email = readEmail("Email: "); String address = readAddress("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)); } private void addVehicle() throws SQLException { int personId = readPositiveInt("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; } @@ -263,35 +314,39 @@ public class ConsoleUi { String model = readValidCarText("Modell: "); String plate = readLicensePlate("Kennzeichen: "); + if (brand.isEmpty() || model.isEmpty() || plate.isEmpty()) return; + Vehicle vehicle = service.createVehicle(personId, brand, model, plate); - System.out.println("Fahrzeug gespeichert (ID: " + vehicle.getId() + ")"); + out.println("Fahrzeug gespeichert (ID: " + vehicle.getId() + ")"); } private void showVehiclesOfPerson() throws SQLException { int personId = readPositiveInt("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)); } } private void createWorkOrder() throws SQLException { int vehicleId = readPositiveInt("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; } @@ -301,10 +356,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()) { @@ -315,54 +371,57 @@ 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; } - boolean exists = catalog.stream().anyMatch(s -> s.getId() == serviceId); + int finalServiceId = serviceId; + boolean exists = catalog.stream().anyMatch(s -> s.getId() == finalServiceId); if (!exists) { - System.out.println("Service nicht gefunden."); + out.println("Service nicht gefunden."); continue; } int qty = readQuantity("Menge: "); - selectedItems.merge(serviceId, qty, Integer::sum); + if (qty > 0) { + selectedItems.merge(serviceId, qty, Integer::sum); + } } 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/dao/PersonDao.java b/src/main/java/de/antco/projekt/dao/PersonDao.java index 679e5b4..86e8415 100644 --- a/src/main/java/de/antco/projekt/dao/PersonDao.java +++ b/src/main/java/de/antco/projekt/dao/PersonDao.java @@ -61,4 +61,12 @@ public class PersonDao { return null; } } + + public void deleteAll() throws SQLException { + String sql = "TRUNCATE TABLE person CASCADE"; + try (Connection con = Database.getConnection(); + Statement st = con.createStatement()) { + st.execute(sql); + } + } } diff --git a/src/main/java/de/antco/projekt/service/WorkshopService.java b/src/main/java/de/antco/projekt/service/WorkshopService.java index 3ef794b..4029ab4 100644 --- a/src/main/java/de/antco/projekt/service/WorkshopService.java +++ b/src/main/java/de/antco/projekt/service/WorkshopService.java @@ -10,6 +10,9 @@ import de.antco.projekt.model.ServiceItem; import de.antco.projekt.model.Vehicle; import de.antco.projekt.model.WorkOrderDetails; +import de.antco.projekt.exporters.CsvPersonExporter; +import de.antco.projekt.importers.CsvPersonImporter; + import java.sql.SQLException; import java.util.List; import java.util.Map; @@ -19,6 +22,8 @@ public class WorkshopService { private final VehicleDao vehicleDao; private final ServiceItemDao serviceItemDao; private final WorkOrderDao workOrderDao; + private final CsvPersonImporter personImporter = new CsvPersonImporter(); + private final CsvPersonExporter personExporter = new CsvPersonExporter(); public WorkshopService() { this(new PersonDao(), new VehicleDao(), new ServiceItemDao(), new WorkOrderDao()); @@ -37,6 +42,21 @@ public class WorkshopService { this.workOrderDao = workOrderDao; } + public void importPersons(String filePath) throws Exception { + personDao.deleteAll(); + List persons = personImporter.importData(filePath); + for (Person p : persons) { + // Check if person exists? For simplicity, we just create new ones. + // Duplicate checks could be added here based on name/phone/email + personDao.create(p.getName(), p.getPhone(), p.getEmail(), p.getAddress()); + } + } + + public void exportPersons(String filePath) throws Exception { + List persons = personDao.findAll(); + personExporter.exportData(persons, filePath); + } + 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/ConsoleUiTest.java b/src/test/java/de/antco/projekt/ConsoleUiTest.java index f723dc9..5e6c60e 100644 --- a/src/test/java/de/antco/projekt/ConsoleUiTest.java +++ b/src/test/java/de/antco/projekt/ConsoleUiTest.java @@ -57,11 +57,12 @@ class ConsoleUiTest { @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); + // Phone needs to be >= 8 digits + ConsoleUi ui = createUi("1\nMax\n12345678\nmail@test.com\nAddress, 1\n0\n"); + Person p = new Person(1, "Max", "12345678", "mail@test.com", "Address, 1"); + when(service.createPerson("Max", "12345678", "mail@test.com", "Address, 1")).thenReturn(p); ui.start(); - verify(service).createPerson("Max", "123", "mail", "addr"); + verify(service).createPerson("Max", "12345678", "mail@test.com", "Address, 1"); assertTrue(outContent.toString().contains("Kunde gespeichert")); } @@ -76,16 +77,16 @@ class ConsoleUiTest { @Test void testAddVehicle() throws SQLException { - // 3 -> Person ID -> Brand -> Model -> Plate -> 0 - ConsoleUi ui = createUi("3\n1\nVW\nGolf\nABC\n0\n"); + // 3 -> Person ID -> Brand -> Model -> Plate (>=5 chars) -> 0 + ConsoleUi ui = createUi("3\n1\nVW\nGolf\nABC-123\n0\n"); Person p = new Person(1, "Max", "123", "m", "a"); - Vehicle v = new Vehicle(10, 1, "VW", "Golf", "ABC"); + Vehicle v = new Vehicle(10, 1, "VW", "Golf", "ABC-123"); when(service.findPerson(1)).thenReturn(p); - when(service.createVehicle(1, "VW", "Golf", "ABC")).thenReturn(v); + when(service.createVehicle(1, "VW", "Golf", "ABC-123")).thenReturn(v); ui.start(); - assertTrue(outContent.toString().contains("Fahrzeug angelegt")); + assertTrue(outContent.toString().contains("Fahrzeug gespeichert")); } @Test @@ -136,7 +137,7 @@ class ConsoleUiTest { ui.start(); String output = outContent.toString(); assertTrue(output.contains("Service nicht gefunden")); - assertTrue(output.contains("Menge muss größer als 0 sein")); + assertTrue(output.contains("Menge muss zwischen 1 und 99 liegen")); } @Test @@ -160,24 +161,26 @@ class ConsoleUiTest { @Test void testInputValidation() throws SQLException { // 1 (Add Person) - // Name: "123" (invalid) -> "Max" (valid) - // Phone: "abc" (invalid) -> "123" (valid) - // Email: "" (empty - loop) -> "mail" - // Address: "addr" + // Name: "" (empty) -> "1" (too short) -> "Max" (valid) + // Phone: "abc" (invalid) -> "123" (too short) -> "12345678" (valid) + // Email: "" (empty - regex fail) -> "mail" (invalid) -> "mail@test.com" (valid) + // Address: "addr" (valid if >= 5) // 0 (Exit) - String input = "1\n123\nMax\nabc\n123\n\nmail\naddr\n0\n"; + String input = "1\n\n1\nMax\nabc\n123\n12345678\n\nmail\nmail@test.com\nAddress\n0\n"; ConsoleUi ui = createUi(input); - Person p = new Person(1, "Max", "123", "mail", "addr"); - when(service.createPerson("Max", "123", "mail", "addr")).thenReturn(p); + Person p = new Person(1, "Max", "12345678", "mail@test.com", "Address"); + when(service.createPerson("Max", "12345678", "mail@test.com", "Address")).thenReturn(p); ui.start(); String output = outContent.toString(); - assertTrue(output.contains("Der Name darf nur Buchstaben enthalten")); + assertTrue(output.contains("Der Name muss mindestens 2 Zeichen haben")); assertTrue(output.contains("Telefonnummer darf nur Zahlen enthalten")); + assertTrue(output.contains("Telefonnummer muss mindestens 8 Stellen haben")); assertTrue(output.contains("Eingabe darf nicht leer sein")); + assertTrue(output.contains("Bitte eine gültige Email-Adresse eingeben")); assertTrue(output.contains("Kunde gespeichert")); } -} \ No newline at end of file +} diff --git a/src/test/java/de/antco/projekt/service/WorkshopServiceIntegrationTest.java b/src/test/java/de/antco/projekt/service/WorkshopServiceIntegrationTest.java new file mode 100644 index 0000000..a0c0f3c --- /dev/null +++ b/src/test/java/de/antco/projekt/service/WorkshopServiceIntegrationTest.java @@ -0,0 +1,53 @@ +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 org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; + +import java.io.File; +import java.io.FileWriter; +import java.util.List; + +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.Mockito.*; + +@ExtendWith(MockitoExtension.class) +class WorkshopServiceIntegrationTest { + + @Mock + private PersonDao personDao; + @Mock + private VehicleDao vehicleDao; + @Mock + private ServiceItemDao serviceItemDao; + @Mock + private WorkOrderDao workOrderDao; + + @InjectMocks + private WorkshopService service; + + @Test + void testImportClearsTable() throws Exception { + // Create a temporary CSV file + File tempFile = File.createTempFile("import_test", ".csv"); + tempFile.deleteOnExit(); + try (FileWriter writer = new FileWriter(tempFile)) { + writer.write("New User;12345;mail;addr\n"); + } + + service.importPersons(tempFile.getAbsolutePath()); + + // Verify deleteAll was called + verify(personDao).deleteAll(); + + // Verify create was called for the new user + verify(personDao).create("New User", "12345", "mail", "addr"); + } +} diff --git a/target/classes/de/antco/projekt/ConsoleUi.class b/target/classes/de/antco/projekt/ConsoleUi.class index 8a2c7bedc445b0fdbe2fcd2842b96a71b86b02ea..54fc71cabbe5666ee9fb4d9b3b591cb1f8b9dac5 100644 GIT binary patch literal 14669 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 literal 11779 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 bb@i)jfx7DI8t}2Kq00XQR1WtI diff --git a/target/classes/de/antco/projekt/dao/PersonDao.class b/target/classes/de/antco/projekt/dao/PersonDao.class index d44f8cc3ca053d5f4fba221a70a912600eacdb56..9b217fead844473aa2af6da25b5d379a2acd5958 100644 GIT binary patch delta 1405 zcmZuxOHWfl6#nM+UZyWAQ6Mx%Qs1Bue61j8N-Zu#e1M`xqZKZQmdmRuic;V2XZjaR zj2n$18gZcs3uBB48{@)_Cc4vwTa8-3ncg-ir0vW(Gv}N+-*?XG!-{tc{crv}e*vHY zcOU!Tn`ti&2+VKWzM~};ZHq_RqK(b*NWVQe)aOKE(biaWLp*?D91NlZodUBv2JJ-3 zZcTCNwVjkeS!Gr8;l!~-?a)B7ws2k_Ko`0t4h7MJ!vb@rn+QmIxYF)8nz98-D|11T z38$M;278?D`l>xD$SR3mfr?CnRWW8-yM#!O?JJ6irM^x(X{YRHGAUpTF_Ds)(#VX+ z1#^=yh#0US_$%V-WFE<~WqmwT8sJAi*Pxay3}BF&zz|aObjH3(j}U#C@80!kWwsYS zG@=PdaSUFR;4Y417?P*sIDwN42~4;_l(Z2eI`9NGQ&Oo+U<)OWmbOtc`FVj;lq{U) z=@a;}=!0J(DKR?bD@HSqeBtzer?e=RD1(rw&$3v)X@0H+@3oOP%QWPSR)rwm8LxGO za;{#SVWK91t>y15&Jm6?w%=c^n7R>YKcbjgM=lnSM8%Yaay-yXnV5|ankmJ=SC=U- zKI1$tFjxSeG#3Ug@?I4scXx@BV&@t{S%xjr3AU1*OiM5<$%&SoU}UE&=V&Q_{sE(z zN){nl1z&CBvOkQ_>TNjw6UHxuD6<_5owRFIGPT@_2z8$M7%EF^ ziJ;s%=AafryFjO)6u3bcM8}4Yb63sVIcIhFV|sL;wEm< zL2_8tNUEXhbW7nuLKh&{Os(KBEP|Qub`Db4KiuW3(lx!0X8q%)xeeFLA1v}2zL%ek J+msF5`3pN>_00eP delta 875 zcmZ{iyK7WI7{!0HyLadAGh2wHaoq%jAc7DC3sJ!$sWgg6EP`?4+r&qFzgG(zJGuXY z78VNO5+oKWwh$2^jaXQSVCi3=Lat|KZ*~`4x%bYTneW_h=A7^QJo=_y{J8#Z71+y@ zrQ(-d-g44VkG=)<_+@b1m}~KRzG0$?aO>e&G9p3_LqJ|*Q>&etjpktcTg;L`hB=Kc z3`I_9EO!W;=8RT`vz!yF883%fW9Fij!v2<{%~0R~6P)J)A)9#4Mdq>EU15PsN(t>W zi9?fI_KDjZ6moZKGbNPu=!j5G&nj1h0 z;P4-2O2k<9B-AMUkD<6Hg^8|a2eP_J!tsIeZVImJ^3L{M`fhMj5}WZ@X@_&~Sb5sJ zw@?0zDCpb^80M9CFUJsHy?f4;pQ(ExKe)whB`fjW`;+00;;vAg*j*v#*fXk$(yA@w z*ir9T>J$87@{o6-TuTKyLbSWmuqin@QQ0!y|6^*&FIm!)bWi7GxUUl*@KC53zpe~B zY4593)2=a`v{9+rP7>`r<4-)fh&Ycw-_x9HRe6) f6uw&ur_>QP`k}9gxn3xxR|$H1gR9l@;vWA6H@1M) diff --git a/target/classes/de/antco/projekt/service/WorkshopService.class b/target/classes/de/antco/projekt/service/WorkshopService.class index 0d1a0b985048f04a4fb2b40a58da515a566c7984..a89fae2ef07aa030dbd61abc4c8d6c347f337148 100644 GIT binary patch literal 5363 zcma)AiF*`h9e%&CVUx`)i7AIbTS7RRYy!(Elm!$5lt9AKP>>$hVfQ0DWOrt}GYL?S zTD6|_s8+34y~U$yTbm$6i}z8j)?5D-pGWKao0*+#b~iK+Pj*Zp*g3y$TC@ zdQZpEqOhvr;?p{BWeeJ09Y-vVHib0}XO8Idgq78Uo-X>c6Eb^|!s>>z&p73=(# z`*V|sCGa|Q#&L__TddGix5^Fdr)8y^cS_-Y3Xk^;)lJS-^UgFLpP@F#gxQSdm{d(9 zBT_C^=x&H-B%9YobD*qE&nYLcL^v8^;=jB^S&IGwnW9NRONxI(R9oOP=M}aja8V z;SUu|do+Fbxb0a*9gQc@jXMnVpjRO=s=ZSlrV)G_!2PD_izxrjyaxXP_S& z6qXguF+JeeS<^dXd3m;6kJ0KXtnaB`*}zx=Ymt`t*rbqZu%yb!seIYFXr3!*x+H-u z5{g@?!wkOT=Pu~17sqym{yJ}2#gbF@m^SGFcOpoi!LTcVZHS3`b{e=7yXc;hpI()5 zg^l&@xrx0@9J?Dq(3k2U91Ob>$OI7HXy8rQ7eT0uH-vB#dl{iKVBi1_DzpZ4n3W1$ z^-N~xl`Oo=z+ntB7AB%f!JKcrvMS?b=}`ki7-r~StSSa9FO3(^N;D~D#|@m2=x)vF zg7);jLP4B!w}BCyBA!6>1EyyxtZfi2VStT$Rv|rPxn8CXr*S5ZHyb#Md#S1)EYYw+ zi^Y(T+*MdwiFJRNDdqRm!u@z4j<*W{b|AfpJXm$jD0RVy0US)U3+AF!krt(_8QAYDyW|{*r;q zc$l2dTXv34rmnNp_kAZh@pc36z&q*rAl3uVuM4q8e$3S4k`fWeyM*SW3TJx;>!-}8 zXHGI<*pp2h?=kRRJjR$8Hv2CJ#YN$kp250!lnQ<+fh0a);Dh*(LVMtVC=qxR%#GD2 zJZzRSy@O)oaRVO_72D5iFPo=~2ee1G`wsq?fsf+}Mo55Zkg?b;cy1bQKATU<$|sq! zHNrgqMsM%BWMSZkdK z4nqMSvmGg#%{)DdwAx~|c` z^~z>xSbKRV=eFPvtPCUC8!vU8*ZIPzcC+~c@1XXsF4evee@x&{cqNWM%f0h2Jp5ByrufFYuCI-wxVT3_LKO2L#t;+)i({(jd`tL0Kb(|VOjpLvED7^Vpp6dZGtmc($ z3-9X-(J6O9wmRi%=Rf%+;y-y`^Pjx>`cK|J`AqVd=2s{Tq7 zMx2kQ zX5Q_(u>hZ@<=c6Xf?r2nSjAZ~wuYmtv7IyS;zz<~IJ%S=wv)kA_$=2G4L*m@^Z5n- zb)e~0E>LkY=1+I0kAHE9|7q^h%vqaKSFxEKwh`nTCb5If44ZoiT$bmNgPUT zn8eD|^4KJfJjXRnKE7_Wu)Q8JEJr&(?^fUrBJClvUj9oVjXodawqTzS8F%z`7qpvv zy$ zOFxC)6_csUV^bKFp9}I+l%LWR+%s2ReMM-*d>Z^NWqTvVPE)c?1ih8=Zo?4@D-x$T zuMfB4OZYNd1Q8KAim%|S1lqxC+1K!Og8c@^ji~3F>=8#SLeqb-EDnA)-~S&5-xc-= z!Ef>JI}ynXq%Q(=1|%;I^SQU5G~XszgOFI{&)7-f@1#?A`S`kmRS~Mr5LF8=RmMG>PxC zC6to*0b8+X+iqHV77uewyt{>OV!0(GUc2Kye@Bs(bHW`f1iBH#Hs8JhkFz*&b86fj-;AiZqrS)@y_(elnN2c)MT3YwagVrx;@mF{vbbhrL z_EV{k)|xy!hZlbBlbV66@EbhYz^J(P6SYPkn5WSN_${?;!td}BpDjfGGXH*$zw%AK M1OJA9;9pq&e{alTC;$Ke delta 1530 zcma)5+jA3D9R4=hZqmJUG&0qsZIISFG;IfqDYnoSvDUU2pxAN;VX12^grtOsRKcKt zP~}p46#fYwV6cJVfpJEkeC3@#fZ@#-pMdY24KWkSz{A<|JGbw4&i>o>V7d9v&4%Cud%_#M;H``jag&J#wQpS z4~-R82%~a-qlR5V3&+H~5f^_NQ88eJO%oxcY;3}2aVOMf4ViGT)y8KS7mq>%#x@(< ziSk~!-q>kl7j}zOIBD&b^kPq&JhF&Sq}Snkntg`c!t(O>cK|)9%5vH!(ZoO~~Tb zUsh7neir}PO?4MdT*BoLuGr|nyl8Rm>q0}T*y6MrA^ff(&N40r>mr>xA~Gx{7?DY- zz6o*FGcNWPG}OT0_j9pO=N9&JF3vcBx9~P%NT2~-oJpb)-Dtuvmg4|d>k;5M0v88) z78t=KzF_aMy@tRO9?(L(EqR78fAd`_B?~8Uiif`^gnwIdrofp>W75}Ys`z0^UwuVPC|?Ej>U{|tUcuOpggk@Y z1eb5Q@*HR|ZgP)nde{6vufoW}+BVM_mn RZ4SS3WU^YoZ#u3b`V{pM#WMf^ 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 0a3e4df..3d0f53c 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 @@ -3,6 +3,7 @@ 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/service/WorkshopServiceIntegrationTest.class de/antco/projekt/importers/CsvPersonImporterTest.class de/antco/projekt/model/WorkOrderTest.class de/antco/projekt/model/ServiceItemTest.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 842008a..3f84dca 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,5 +1,6 @@ /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/importers/CsvPersonImporterTest.java +/config/workspace/SchuleB/jdbc_konsolen_projekt/src/test/java/de/antco/projekt/service/WorkshopServiceIntegrationTest.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 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 340bfd6..2d79ef8 100644 --- a/target/surefire-reports/TEST-de.antco.projekt.exporters.CsvPersonExporterTest.xml +++ b/target/surefire-reports/TEST-de.antco.projekt.exporters.CsvPersonExporterTest.xml @@ -1,5 +1,5 @@ - + @@ -13,7 +13,7 @@ - + @@ -28,7 +28,7 @@ - + @@ -54,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 8058d9e..f14d3d4 100644 --- a/target/surefire-reports/TEST-de.antco.projekt.importers.CsvPersonImporterTest.xml +++ b/target/surefire-reports/TEST-de.antco.projekt.importers.CsvPersonImporterTest.xml @@ -1,5 +1,5 @@ - + @@ -13,7 +13,7 @@ - + @@ -28,7 +28,7 @@ - + @@ -54,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 35744c9..021adbf 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.108 s -- in de.antco.projekt.exporters.CsvPersonExporterTest +Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.083 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 45d48e8..dd0558b 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.008 s -- in de.antco.projekt.importers.CsvPersonImporterTest +Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.020 s -- in de.antco.projekt.importers.CsvPersonImporterTest