Modultestbericht – Dokumentenprozess (Gruppe F)
| Feld |
Wert |
| Modul |
Dokumentenprozess |
| Gruppe |
F |
| Verantwortlicher |
Andreas Ivanovic |
| Datum |
28.06.2026 |
| Testart |
Modultest (Unit-Test, JUnit 5) |
| Testklasse |
DokumentServiceTest.java |
| Paket |
de.hsmannheim.faktura.dokumente.service |
| Spec-Grundlage |
Pflichtenheft Gruppe F v1.0.1 |
| Gesamt-Ergebnis |
✅ 16 / 16 Tests bestanden |
1. Testumgebung
| Komponente |
Version |
| Java |
17 |
| JUnit Jupiter |
5.10.2 |
| Maven Surefire |
3.2.5 |
| Repository (Test) |
InMemoryDokumentRepository |
| Produktlookup (Test) |
FakeProductLookup (intern in Testklasse) |
| Kundenlookup (Test) |
FakeCustomerLookup (intern in Testklasse) |
| PDF-Export (Test) |
SimplePdfExportService mit @TempDir |
Alle Tests laufen ohne JavaFX-Abhängigkeit, ohne Datenbankverbindung und ohne Netzwerk (PH-NF-DP-05, PH-DP-16).
2. Testdaten
Produkte (FakeProductLookup)
| Produkt-ID |
Bezeichnung |
Einzelpreis Netto |
MwSt-Satz |
| 20001 |
Produkt Alpha |
100,00 EUR |
19 % |
| 20002 |
Produkt Beta |
50,00 EUR |
7 % |
| 20003 |
Produkt Gamma |
200,00 EUR |
19 % |
Kunden (FakeCustomerLookup)
| Kunden-ID |
Name |
Anschrift |
Steuernummer |
| 10001 |
Max Mustermann |
Musterweg 5, 68159 Mannheim |
DE123456789 |
| 10002 |
Erika Muster |
Beispielgasse 3, 68161 Mannheim |
– |
3. Testergebnisse
MT-DP-01 – Angebot anlegen (Happy Path)
| Feld |
Wert |
| Spec-Bezug |
PH-DP-01 |
| Methode |
erstelleAngebot(long, List<PositionCommand>) |
| Vorbedingung |
Kunde 10001 und Produkte 20001, 20002 existieren |
| Eingabe |
kundenId=10001, Positionen: [20001×2, 20002×1] |
| Erwartetes Ergebnis |
Angebot mit Nummer A-2026-xxxx, Status OFFEN, 2 Positionen, Datum gesetzt |
| Tatsächliches Ergebnis |
✅ Angebot erstellt, alle Felder korrekt |
MT-DP-02 – Summenberechnung Angebot
| Feld |
Wert |
| Spec-Bezug |
PH-DP-01, PH-DP-08 |
| Methode |
erstelleAngebot(...) → berechneSummen() |
| Eingabe |
2 × Produkt Alpha (100,00 EUR, 19 %), 1 × Produkt Beta (50,00 EUR, 7 %) |
| Erwartetes Ergebnis |
Netto: 250,00 EUR · USt: 41,50 EUR · Brutto: 291,50 EUR |
| Tatsächliches Ergebnis |
✅ Alle drei Summen korrekt berechnet |
Berechnung:
- Netto: (2 × 100,00) + (1 × 50,00) = 250,00 EUR
- USt: (200,00 × 0,19) + (50,00 × 0,07) = 38,00 + 3,50 = 41,50 EUR
- Brutto: 250,00 + 41,50 = 291,50 EUR
MT-DP-03 – Fortlaufende Angebotsnummern
| Feld |
Wert |
| Spec-Bezug |
PH-DP-02 |
| Methode |
DokumentNummernGenerator.naechsteNummer() |
| Eingabe |
Zwei Angebote nacheinander anlegen |
| Erwartetes Ergebnis |
Nummern A-2026-0001 und A-2026-0002 (eindeutig, fortlaufend) |
| Tatsächliches Ergebnis |
✅ Nummern korrekt vergeben, kein Duplikat |
MT-DP-04 – Gesperrtes Angebot nach Überführung
| Feld |
Wert |
| Spec-Bezug |
PH-DP-03 |
| Methode |
aktualisiereAngebot(String, List<PositionCommand>) |
| Vorbedingung |
Angebot wurde bereits in AB überführt (Status UEBERFUEHRT) |
| Eingabe |
Versuch Angebot zu bearbeiten |
| Erwartetes Ergebnis |
IllegalStateException wird geworfen |
| Tatsächliches Ergebnis |
✅ Exception korrekt ausgelöst |
MT-DP-05 – Auftragsbestätigung erzeugen
| Feld |
Wert |
| Spec-Bezug |
PH-DP-04 |
| Methode |
erstelleAuftragsbestaetigung(String) |
| Vorbedingung |
Angebot mit Status OFFEN vorhanden |
| Eingabe |
angebotsNummer = A-2026-0001 |
| Erwartetes Ergebnis |
AB mit Nummer AB-2026-xxxx, Referenz auf Angebot, Angebot auf Status UEBERFUEHRT |
| Tatsächliches Ergebnis |
✅ AB korrekt erstellt, Angebotsstatus korrekt aktualisiert |
MT-DP-06 – Doppelte Auftragsbestätigung verhindern
| Feld |
Wert |
| Spec-Bezug |
PH-DP-05 |
| Methode |
erstelleAuftragsbestaetigung(String) (zweiter Aufruf) |
| Vorbedingung |
AB für dieses Angebot existiert bereits |
| Eingabe |
Zweiter Versuch AB für dasselbe Angebot zu erzeugen |
| Erwartetes Ergebnis |
DuplicateDocumentException wird geworfen |
| Tatsächliches Ergebnis |
✅ Exception korrekt ausgelöst |
| Hinweis |
Patch 28.06.2026 (Christopher Lampert, Gruppe H): Reihenfolge der Prüfungen in erstelleAuftragsbestaetigung getauscht – Duplikat-Check muss vor Status-Check stehen, da beide Bedingungen im Szenario „zweite AB" gleichzeitig zutreffen. Spec verlangt explizit DuplicateDocumentException (PH-DP-05). |
MT-DP-07 – Lieferschein erzeugen
| Feld |
Wert |
| Spec-Bezug |
PH-DP-06 |
| Methode |
erstelleLieferschein(String, LocalDate) |
| Vorbedingung |
AB mit Status BESTAETIGT vorhanden |
| Eingabe |
auftragsNummer = AB-2026-0001, lieferdatum = heute + 3 Tage |
| Erwartetes Ergebnis |
Lieferschein mit Nummer LS-2026-xxxx, Referenz auf AB, Status GELIEFERT |
| Tatsächliches Ergebnis |
✅ Lieferschein korrekt erstellt |
MT-DP-08 – Lieferschein enthält keine Preise
| Feld |
Wert |
| Spec-Bezug |
PH-DP-07 |
| Methode |
exportiereAlsPdf(String) auf Lieferschein |
| Vorbedingung |
Lieferschein vorhanden |
| Erwartetes Ergebnis |
PDF-Inhalt enthält Bezeichnung und Menge, aber keine Nettosumme, USt oder Bruttosumme |
| Tatsächliches Ergebnis |
✅ Preisfelder im Export nicht vorhanden |
MT-DP-09 – Rechnung erzeugen (Happy Path)
| Feld |
Wert |
| Spec-Bezug |
PH-DP-08, PH-DP-09 |
| Methode |
erstelleRechnung(String) |
| Vorbedingung |
Vollständige Kette: Angebot → AB → Lieferschein vorhanden |
| Eingabe |
lieferscheinNummer = LS-2026-0001 |
| Erwartetes Ergebnis |
Rechnung mit Nummer R-2026-xxxx, Status FESTGESCHRIEBEN, Pflichtangaben gesetzt, Summen korrekt |
| Tatsächliches Ergebnis |
✅ Rechnung vollständig und korrekt erstellt |
MT-DP-10 – Fehlende Pflichtangaben verhindern Rechnungserstellung
| Feld |
Wert |
| Spec-Bezug |
PH-DP-09 |
| Methode |
erstelleRechnung(String) mit unvollständigen Kundendaten |
| Vorbedingung |
CustomerLookup liefert Kunde ohne Name und Anschrift |
| Erwartetes Ergebnis |
ValidationException mit Liste der fehlenden Felder |
| Tatsächliches Ergebnis |
✅ Exception mit korrekten Fehlermeldungen ausgelöst |
MT-DP-11 – Rechnungsnummern lückenlos
| Feld |
Wert |
| Spec-Bezug |
PH-DP-10 |
| Methode |
erstelleRechnung(String) dreimal hintereinander |
| Erwartetes Ergebnis |
Nummern R-2026-0001, R-2026-0002, R-2026-0003 (lückenlos) |
| Tatsächliches Ergebnis |
✅ Alle drei Nummern korrekt und lückenlos vergeben |
MT-DP-12 – Rechnung unveränderlich nach Festschreibung
| Feld |
Wert |
| Spec-Bezug |
PH-DP-11 |
| Methode |
rechnung.pruefeAenderbar() auf festgeschriebener Rechnung |
| Vorbedingung |
Rechnung wurde erstellt und ist festgeschrieben |
| Erwartetes Ergebnis |
IllegalStateException beim Versuch die Rechnung zu ändern |
| Tatsächliches Ergebnis |
✅ Exception korrekt ausgelöst, Status nach Reload weiterhin FESTGESCHRIEBEN |
MT-DP-13 – Preis-Snapshot bleibt stabil
| Feld |
Wert |
| Spec-Bezug |
PH-DP-14 |
| Methode |
Angebot erstellen → Produktpreis ändern → Angebot neu laden |
| Vorbedingung |
Angebot mit Produkt Alpha (100,00 EUR) erstellt |
| Eingabe |
Produktpreis wird nachträglich auf 120,00 EUR geändert |
| Erwartetes Ergebnis |
Snapshot-Preis im Angebot bleibt 100,00 EUR |
| Tatsächliches Ergebnis |
✅ Snapshot unverändert, Preisänderung hat keinen Einfluss |
MT-DP-14 – PDF-Export erzeugt Datei
| Feld |
Wert |
| Spec-Bezug |
PH-DP-12 |
| Methode |
exportiereAlsPdf(String) |
| Vorbedingung |
Angebot vorhanden |
| Erwartetes Ergebnis |
Datei existiert, ist nicht leer, enthält Dokumentnummer und Typ |
| Tatsächliches Ergebnis |
✅ Datei korrekt erstellt, Inhalt vollständig |
MT-DP-15 – Dokumentübersicht pro Kunde
| Feld |
Wert |
| Spec-Bezug |
PH-DP-13 |
| Methode |
findByKunde(long) |
| Vorbedingung |
2 Dokumente für Kunde 10001, 1 Dokument für Kunde 10002 |
| Erwartetes Ergebnis |
Kunde 10001 → 2 Dokumente, Kunde 10002 → 1 Dokument |
| Tatsächliches Ergebnis |
✅ Filterung korrekt, keine Vermischung zwischen Kunden |
MT-DP-16 – Stammdatenreferenz prüfen
| Feld |
Wert |
| Spec-Bezug |
PH-DP-15 |
| Methode |
existsReferencedProdukt(long), existsReferencedKunde(long) |
| Vorbedingung |
Angebot mit Produkt 20001 und Kunde 10001 vorhanden |
| Erwartetes Ergebnis |
Produkt 20001 → true, Produkt 99999 → false, Kunde 10001 → true, Kunde 99998 → false |
| Tatsächliches Ergebnis |
✅ Alle vier Prüfungen korrekt |
4. Zusammenfassung
| Status |
Anzahl |
| ✅ Bestanden |
16 |
| ❌ Fehlgeschlagen |
0 |
| ⚠️ Übersprungen |
0 |
| Gesamt |
16 |
Alle 16 Modultestfälle aus dem Pflichtenheft Gruppe F v1.0.1 wurden erfolgreich ausgeführt. Der Patch vom 28.06.2026 (MT-DP-06, Reihenfolge der Prüfungen in erstelleAuftragsbestaetigung) wurde in den Code integriert und verifiziert. Alle anderen Testfälle bleiben durch den Patch unberührt.
5. Bekannte offene Punkte
| ID |
Beschreibung |
Priorität |
| OP-7 |
GUI-Integration: DokumentPanel muss mit DokumentService verbunden werden |
Hoch |
| – |
SQLite-Repository (Produktionsbetrieb) noch nicht implementiert, InMemory für Tests ausreichend |
Mittel |
| – |
Leistungserbringer-Daten in DokumentServiceImpl.erstellePflichtangaben() aktuell hartcodiert |
Niedrig |