SE1_Team_2/Modultestbericht_GruppeF_Do...

278 lines
9.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 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 |