diff --git a/sources_main.txt b/sources_main.txt deleted file mode 100644 index 96ae5a4..0000000 --- a/sources_main.txt +++ /dev/null @@ -1,18 +0,0 @@ -src/main/java/bestandsmanagement/ProduktServiceImpl.java -src/main/java/bestandsmanagement/ProduktRepository.java -src/main/java/bestandsmanagement/ProduktIdGenerator.java -src/main/java/bestandsmanagement/Produkt.java -src/main/java/belegworkflow/Angebot.java -src/main/java/belegworkflow/Dokumentposition.java -src/main/java/belegworkflow/BelegnummernGenerator.java -src/main/java/belegworkflow/Dokument.java -src/main/java/belegworkflow/AngebotStatus.java -src/main/java/belegworkflow/RechnungStatus.java -src/main/java/belegworkflow/BelegworkflowService.java -src/main/java/belegworkflow/Rechnung.java -src/main/java/kundenverwaltung/KundenRepository.java -src/main/java/kundenverwaltung/KundenIdGenerator.java -src/main/java/kundenverwaltung/KundenServiceImpl.java -src/main/java/kundenverwaltung/KundenStatus.java -src/main/java/kundenverwaltung/Kunde.java -src/main/java/kundenverwaltung/Main.java diff --git a/sources_test.txt b/sources_test.txt deleted file mode 100644 index c51e8eb..0000000 --- a/sources_test.txt +++ /dev/null @@ -1,3 +0,0 @@ -src/test/java/bestandsmanagement/BestandsmanagementTest.java -src/test/java/belegworkflow/BelegworkflowTest.java -src/test/java/kundenverwaltung/KundenVerwaltungTest.java diff --git a/src/test/java/kundenverwaltung/KundenVerwaltungTest.java b/src/test/java/kundenverwaltung/KundenVerwaltungTest.java index ec0f994..ecc920f 100644 --- a/src/test/java/kundenverwaltung/KundenVerwaltungTest.java +++ b/src/test/java/kundenverwaltung/KundenVerwaltungTest.java @@ -3,9 +3,7 @@ package kundenverwaltung; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.io.TempDir; -import java.nio.file.Path; import java.util.List; import static org.junit.jupiter.api.Assertions.*; @@ -20,7 +18,7 @@ class KundenVerwaltungTest { } @Test - @DisplayName("TC-01: Kunde anlegen -> ID K-000001 vergeben") + @DisplayName("TC-01: Kunde anlegen -> ID K- vergeben (F-01, F-02)") void tc01KundeAnlegen() { Kunde k = service.kundeAnlegen("Muster GmbH", "Hauptstr. 1", "68163", "Mannheim", "DE123456789", "info@muster.de", "0621-123456"); @@ -30,15 +28,24 @@ class KundenVerwaltungTest { } @Test - @DisplayName("TC-03: Speichern ohne E-Mail wird abgelehnt") - void tc03FehlendePflichtfeld() { + @DisplayName("TC-02: Fortlaufende ID mit fuehrenden Nullen (F-02)") + void tc02KundenIdFormat() { + Kunde k = service.kundeAnlegen("Format GmbH", "Str. 1", "68163", + "Mannheim", "DE000000001", "format@test.de", "0621-000001"); + assertNotNull(k); + assertTrue(k.getKundenId().matches("K-\\d{6}")); + } + + @Test + @DisplayName("TC-03: Speichern ohne E-Mail wird abgelehnt (F-03)") + void tc03FehlendeEmail() { Kunde k = service.kundeAnlegen("Muster GmbH", "Hauptstr. 1", "68163", "Mannheim", "DE123456789", "", "0621-123456"); assertNull(k); } @Test - @DisplayName("TC-04: Speichern ohne Name wird abgelehnt") + @DisplayName("TC-04: Speichern ohne Name wird abgelehnt (F-03)") void tc04FehlenderName() { Kunde k = service.kundeAnlegen("", "Hauptstr. 1", "68163", "Mannheim", "DE123456789", "info@muster.de", "0621-123456"); @@ -46,7 +53,34 @@ class KundenVerwaltungTest { } @Test - @DisplayName("TC-07: Suche nach Name findet Treffer") + @DisplayName("TC-05: Datenpersistenz - Daten nach Neustart erhalten (F-04, NF-SEC-01)") + void tc05Datenpersistenz() throws Exception { + Kunde k = service.kundeAnlegen("Persistenz GmbH", "Str. 1", "68163", + "Mannheim", "DE555555555", "persist@test.de", "0621-555555"); + assertNotNull(k); + String id = k.getKundenId(); + + // Neuen Service erstellen simuliert Neustart + KundenServiceImpl neuerService = new KundenServiceImpl(); + Kunde geladen = neuerService.findeKunde(id); + assertNotNull(geladen); + assertEquals("Persistenz GmbH", geladen.getName()); + } + + @Test + @DisplayName("TC-06: Kunde bearbeiten aktualisiert E-Mail (F-05, F-06, F-07)") + void tc06KundeBearbeiten() { + Kunde k = service.kundeAnlegen("Edit GmbH", "Str. 1", "68163", + "Mannheim", "DE333333333", "alt@edit.de", "0621-333333"); + assertNotNull(k); + boolean ok = service.kundeBearbeiten(k.getKundenId(), "Edit GmbH", + "Str. 1", "68163", "Mannheim", "DE333333333", "neu@edit.de", "0621-333333"); + assertTrue(ok); + assertEquals("neu@edit.de", service.findeKunde(k.getKundenId()).getEmail()); + } + + @Test + @DisplayName("TC-07: Suche nach Name findet Treffer (F-09)") void tc07SucheNachName() { service.kundeAnlegen("Muster GmbH", "Hauptstr. 1", "68163", "Mannheim", "DE123456789", "info@muster.de", "0621-123456"); @@ -56,7 +90,7 @@ class KundenVerwaltungTest { } @Test - @DisplayName("TC-08: findeKunde gibt Objekt zurueck") + @DisplayName("TC-08: findeKunde gibt Objekt zurueck (F-10)") void tc08FindeKunde() { Kunde angelegt = service.kundeAnlegen("Test AG", "Teststr. 1", "68163", "Mannheim", "DE987654321", "test@test.de", "0621-654321"); @@ -67,25 +101,32 @@ class KundenVerwaltungTest { } @Test - @DisplayName("TC-09: findeKunde gibt null zurueck fuer unbekannte ID") + @DisplayName("TC-09: findeKunde gibt null zurueck fuer unbekannte ID (F-10)") void tc09FindeKundeNull() { - Kunde k = service.findeKunde("K-999999"); - assertNull(k); + assertNull(service.findeKunde("K-999999")); } @Test - @DisplayName("TC-10: Loeschen referenzierter Kunde wird abgelehnt") - void tc10LoeschsperreReferenzierterKunde() { + @DisplayName("TC-10: Loeschen referenzierter Kunde wird abgelehnt (F-12, GR-04)") + void tc10LoeschsperreReferenzierterKunde() throws Exception { Kunde k = service.kundeAnlegen("Ref GmbH", "Str. 1", "68163", "Mannheim", "DE111111111", "ref@ref.de", "0621-111111"); assertNotNull(k); - k.belegHinzufuegen("R-2026-000001"); + + java.nio.file.Files.createDirectories(java.nio.file.Path.of("data")); + java.nio.file.Files.writeString( + java.nio.file.Path.of("data/angebote.csv"), + "AN-2026-000001;2026-06-24;" + k.getKundenId() + ";2026-07-31;OFFEN;100.00;19.00;119.00\n" + ); + boolean geloescht = service.kundeLoschen(k.getKundenId()); assertFalse(geloescht); + + java.nio.file.Files.deleteIfExists(java.nio.file.Path.of("data/angebote.csv")); } @Test - @DisplayName("TC-11: Loeschen nicht referenzierter Kunde funktioniert") + @DisplayName("TC-11: Loeschen nicht referenzierter Kunde funktioniert (F-11)") void tc11LoeschenErfolgreich() { Kunde k = service.kundeAnlegen("Temp GmbH", "Str. 1", "68163", "Mannheim", "DE222222222", "temp@temp.de", "0621-222222"); @@ -96,14 +137,30 @@ class KundenVerwaltungTest { } @Test - @DisplayName("TC-06: Kunde bearbeiten aktualisiert E-Mail") - void tc06KundeBearbeiten() { - Kunde k = service.kundeAnlegen("Edit GmbH", "Str. 1", "68163", - "Mannheim", "DE333333333", "alt@edit.de", "0621-333333"); + @DisplayName("TC-12: Transaktionshistorie zeigt verknuepfte Belege (F-13)") + void tc12Transaktionshistorie() { + Kunde k = service.kundeAnlegen("Historie GmbH", "Str. 1", "68163", + "Mannheim", "DE444444444", "hist@test.de", "0621-444444"); assertNotNull(k); - boolean ok = service.kundeBearbeiten(k.getKundenId(), "Edit GmbH", - "Str. 1", "68163", "Mannheim", "DE333333333", "neu@edit.de", "0621-333333"); - assertTrue(ok); - assertEquals("neu@edit.de", service.findeKunde(k.getKundenId()).getEmail()); + k.belegHinzufuegen("AN-2026-000001"); + k.belegHinzufuegen("R-2026-000001"); + assertEquals(2, k.getBelegReferenzen().size()); + assertTrue(k.getBelegReferenzen().contains("AN-2026-000001")); + assertTrue(k.getBelegReferenzen().contains("R-2026-000001")); + } + + @Test + @DisplayName("TC-13: Suche liefert Ergebnis in unter 1 Sekunde (NF-PERF-01)") + void tc13Performance() throws Exception { + for (int i = 0; i < 100; i++) { + service.kundeAnlegen("Kunde " + i, "Str. " + i, "68163", + "Mannheim", "DE" + String.format("%09d", i), + "kunde" + i + "@test.de", "0621-" + String.format("%06d", i)); + } + long start = System.currentTimeMillis(); + List treffer = service.sucheNachName("Kunde"); + long dauer = System.currentTimeMillis() - start; + assertFalse(treffer.isEmpty()); + assertTrue(dauer < 1000, "Suche dauerte laenger als 1 Sekunde: " + dauer + "ms"); } } \ No newline at end of file