SE1_Team_2/Unterlagen/Modultestbericht_GruppeF_Do...

9.4 KiB
Raw Permalink 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