Compare commits

..

2 Commits

1 changed files with 80 additions and 23 deletions

View File

@ -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<Kunde> treffer = service.sucheNachName("Kunde");
long dauer = System.currentTimeMillis() - start;
assertFalse(treffer.isEmpty());
assertTrue(dauer < 1000, "Suche dauerte laenger als 1 Sekunde: " + dauer + "ms");
}
}