SE1_Team_2/Unterlagen/Modultestbericht_GruppeF_Do...

9.4 KiB
Raw Blame History

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