From 92c96f08fe6ec0d606e4a4282cedd749388271d2 Mon Sep 17 00:00:00 2001 From: Andreas Ivanovic <3028874@stud.th-mannheim.de> Date: Mon, 15 Jun 2026 15:31:34 +0200 Subject: [PATCH] Dokumentenprozess korrigiert --- Modultestplan.md | 80 +++++++++++++++++++++++++----------------------- 1 file changed, 42 insertions(+), 38 deletions(-) diff --git a/Modultestplan.md b/Modultestplan.md index 5849e33..76e31e7 100644 --- a/Modultestplan.md +++ b/Modultestplan.md @@ -73,49 +73,53 @@ Die folgenden Modultests prüfen die fachlichen und systemtechnischen Anforderun | GR-05 Stammdatenschutz | MT-PV-11 | | NF-SH-ARCH-01 Persistenz (JSON) | MT-PV-12


| -# Dokumentenprozess +# Dokumentenprozess -Die folgenden Modultests prüfen die fachlichen Anforderungen des Moduls Dokumentenprozess. Die Testfälle sind so formuliert, dass sie ohne GUI-Abhängigkeiten direkt als JUnit-Tests gegen DokumentService, DokumentRepository, NumberGenerator, FakeProductLookup und FakeCustomerLookup umgesetzt werden können. Dadurch wird die Traceability zwischen Pflichtenheft-Anforderungen, testbaren Abnahmekriterien und Modultests sichergestellt. Die Tests decken die Dokumentenkette Angebot -> Auftragsbestätigung -> Lieferschein -> Rechnung sowie Nummernvergabe, Statusregeln, Summenberechnung, Preis-Snapshots, PDF-Export und Stammdatenreferenzen ab. +Die folgenden Modultests prüfen die fachlichen Anforderungen des Moduls **Dokumentenprozess**. Die Testfälle sind so formuliert, dass sie ohne GUI-Abhängigkeiten direkt als JUnit-Tests gegen `DokumentService`, `DokumentRepository`, `NumberGenerator`, `FakeProductLookup` und `FakeCustomerLookup` umgesetzt werden können. Dadurch wird die Traceability zwischen den Anforderungen des Pflichtenhefts, den Abnahmekriterien und den Modultests sichergestellt. -Testfälle +Die Tests decken die gesamte Dokumentenkette **Angebot → Auftragsbestätigung → Lieferschein → Rechnung** sowie Nummernkreise, Statusregeln, Summenberechnung, Preis-Snapshots, PDF-Export und Stammdatenreferenzen vollständig ab. -Testfall-ID Testziel / Beschreibung Vorbedingungen Testschritte Erwartetes Ergebnis Abgedeckte Anforderungen -MT-DP-01 Angebot mit vorhandenem Kunden und Positionen anlegen Kunde 10001 sowie Produkte 20001 und 20002 sind über FakeCustomerLookup und FakeProductLookup vorhanden erstelleAngebot(10001, Positionen mit 2x Produkt 20001 und 1x Produkt 20002) aufrufen Angebot wird gespeichert, besitzt Status OFFEN, Datum LocalDate.now(), zwei Positionen und eine Nummer im Format A-yyyy-nnnn PH-DP-01, PH-DP-14, PH-DP-16 -MT-DP-02 Summenberechnung im Angebot prüfen Positionen: 2 x 100,00 EUR mit 19 % MwSt. und 1 x 50,00 EUR mit 7 % MwSt. sind im Angebot enthalten berechneSummen() bzw. die Angebotserstellung ausführen Netto-Summe beträgt 250,00 EUR, USt.-Summe beträgt 41,50 EUR und Brutto-Summe beträgt 291,50 EUR PH-DP-01, PH-DP-08, PH-DP-16 -MT-DP-03 Fortlaufende Angebotsnummern vergeben Nummernkreis für das aktuelle Jahr ist leer Zwei Angebote nacheinander erzeugen Die Angebote erhalten unterschiedliche und fortlaufende Nummern, z. B. A-2026-0001 und A-2026-0002 PH-DP-02, PH-DP-16 -MT-DP-04 Offenes Angebot bearbeiten und überführtes Angebot sperren Ein Angebot im Status OFFEN und ein Angebot im Status UEBERFUEHRT existieren Beim offenen Angebot Position ändern; beim überführten Angebot aktualisiereAngebot(...) aufrufen Bearbeitung bei OFFEN ist erfolgreich; bei UEBERFUEHRT wird eine IllegalStateException ausgelöst und das Angebot bleibt unverändert PH-DP-03, PH-DP-16 -MT-DP-05 Auftragsbestätigung aus offenem Angebot erzeugen Ein offenes Angebot mit zwei Positionen existiert erstelleAuftragsbestaetigung(angebotsNr) aufrufen Auftragsbestätigung wird mit eigener Nummer im Format AB-yyyy-nnnn gespeichert, referenziert die Angebotsnummer und übernimmt Positionen und Summen unverändert PH-DP-04, PH-DP-16 -MT-DP-06 Doppelte Auftragsbestätigung verhindern Für ein Angebot existiert bereits eine Auftragsbestätigung erstelleAuftragsbestaetigung(angebotsNr) erneut aufrufen Der zweite Erzeugungsversuch wird mit DuplicateDocumentException abgelehnt; es wird keine zweite Auftragsbestätigung gespeichert PH-DP-05, PH-DP-16 -MT-DP-07 Lieferschein aus bestätigter Auftragsbestätigung erzeugen Eine Auftragsbestätigung im Status BESTAETIGT existiert erstelleLieferschein(auftragsNr, lieferdatum) aufrufen Lieferschein wird mit Nummer im Format LS-yyyy-nnnn, Lieferdatum, AB-Referenz, übernommenen Mengen und Status GELIEFERT gespeichert PH-DP-06, PH-DP-16 -MT-DP-08 Lieferschein ohne Preisfelder bereitstellen Ein Lieferschein wurde aus einer Auftragsbestätigung erzeugt LieferscheinDto.from(lieferschein) oder Exportmodell erzeugen DTO bzw. Exportmodell enthält Produktbezeichnung und Menge, aber keine Einzelpreise, Netto-, USt.- oder Bruttowerte PH-DP-07, PH-DP-16 -MT-DP-09 Rechnung aus geliefertem Lieferschein erzeugen Ein Lieferschein im Status GELIEFERT mit Kunde und Positionen existiert erstelleRechnung(lieferscheinNr) aufrufen Rechnung wird mit Nummer im Format R-yyyy-nnnn, Rechnungsdatum, Lieferscheinreferenz, Kunde, Leistungsdatum, Pflichtangaben, Summen und Status FESTGESCHRIEBEN gespeichert PH-DP-08, PH-DP-09, PH-DP-11, PH-DP-16 -MT-DP-10 Fehlende Rechnungspflichtangaben ablehnen Kunde oder Rechnung enthält unvollständige Pflichtangaben, z. B. fehlende Rechnungsanschrift oder Steuernummer erstelleRechnung(lieferscheinNr) aufrufen Validierungsfehler bzw. ValidationException wird ausgelöst; die Rechnung wird nicht gespeichert PH-DP-09, PH-DP-16 -MT-DP-11 Fortlaufende und lückenlose Rechnungsnummern vergeben Drei unterschiedliche gelieferte Lieferscheine existieren Für alle drei Lieferscheine jeweils eine Rechnung erzeugen Die Rechnungen erhalten fortlaufende Nummern ohne Lücke, z. B. R-2026-0001, R-2026-0002 und R-2026-0003 PH-DP-10, PH-DP-16 -MT-DP-12 Festgeschriebene Rechnung gegen Änderungen sperren Eine gespeicherte und festgeschriebene Rechnung existiert Änderung an Positionen, Summen oder Pflichtangaben versuchen und Rechnung erneut laden Änderungsversuch wird abgelehnt; die erneut geladene Rechnung ist unverändert PH-DP-11, PH-DP-16 -MT-DP-13 Preis- und MwSt.-Snapshot im Dokument sichern Ein Produkt hat beim Erstellen des Angebots den Preis 100,00 EUR und 19 % MwSt.; danach wird der Produktpreis im FakeProductLookup auf 120,00 EUR geändert Angebot erstellen, Produktpreis ändern, Angebot erneut aus dem Repository laden Die Dokumentposition enthält weiterhin den ursprünglichen Snapshot mit 100,00 EUR und 19 % MwSt.; spätere Produktänderungen beeinflussen das Dokument nicht PH-DP-14, PH-DP-16 -MT-DP-14 PDF-Export erzeugt Datei Ein Angebot, Lieferschein oder eine Rechnung existiert; temporäres Testverzeichnis ist verfügbar exportiereAlsPdf(dokumentNr) ausführen Ein Path wird zurückgegeben; die PDF-Datei existiert, ist größer als 0 Byte und enthält Dokumentnummer sowie Dokumenttyp PH-DP-12, PH-DP-16 -MT-DP-15 Dokumentenübersicht pro Kunde liefern Dokumente für Kunde 1 und Kunde 2 existieren im Repository findByKunde(1) aufrufen Es werden nur Dokumente von Kunde 1 zurückgegeben; fremde Kundendokumente fehlen; Sortierung nach Datum und Dokumenttyp ist nachvollziehbar PH-DP-13, PH-DP-16 -MT-DP-16 Stammdatenreferenzen für Produkt- und Kundenverwaltung prüfen Produkt 20001 und Kunde 10001 werden in einem Dokument verwendet; Produkt 99999 und Kunde 99999 werden nicht verwendet isProductReferenced(20001), isProductReferenced(99999), isCustomerReferenced(10001) und isCustomerReferenced(99999) aufrufen Referenzierte Stammdaten liefern true; nicht referenzierte Stammdaten liefern false PH-DP-15, PH-DP-16 +## Testfälle -Abdeckungsübersicht +| Testfall-ID | Testziel / Beschreibung | Vorbedingungen | Testschritte | Erwartetes Ergebnis | Abgedeckte Anforderungen | +|------------|------------------------|----------------|--------------|--------------------|--------------------------| +| MT-DP-01 | Angebot mit vorhandenem Kunden und Positionen anlegen | Kunde 10001 sowie Produkte 20001 und 20002 sind über FakeCustomerLookup und FakeProductLookup vorhanden | erstelleAngebot(10001, Positionen mit 2x Produkt 20001 und 1x Produkt 20002) aufrufen | Angebot wird gespeichert, Status = OFFEN, Datum = LocalDate.now(), zwei Positionen, Nummer im Format A-yyyy-nnnn | PH-DP-01, PH-DP-14, PH-DP-16 | +| MT-DP-02 | Summenberechnung im Angebot prüfen | Positionen: 2×100,00 EUR (19 % MwSt.) und 1×50,00 EUR (7 % MwSt.) | Angebot erstellen / berechneSummen() ausführen | Netto = 250,00 EUR, USt. = 41,50 EUR, Brutto = 291,50 EUR | PH-DP-01, PH-DP-08, PH-DP-16 | +| MT-DP-03 | Fortlaufende Angebotsnummern vergeben | Nummernkreis leer | Zwei Angebote nacheinander erstellen | Nummern A-2026-0001 und A-2026-0002 werden vergeben | PH-DP-02, PH-DP-16 | +| MT-DP-04 | Offenes Angebot bearbeiten, überführtes Angebot gesperrt | OFFENES und UEBERFUEHRTES Angebot existieren | OFFEN: ändern; UEBERFUEHRT: aktualisieren | OFFEN erfolgreich, UEBERFUEHRT → IllegalStateException | PH-DP-03, PH-DP-16 | +| MT-DP-05 | Auftragsbestätigung aus Angebot erzeugen | Offenes Angebot vorhanden | erstelleAuftragsbestaetigung(angebotsNr) | AB mit Nummer AB-yyyy-nnnn wird erstellt, Daten übernommen | PH-DP-04, PH-DP-16 | +| MT-DP-06 | Doppelte Auftragsbestätigung verhindern | AB existiert bereits | erneute Erstellung | DuplicateDocumentException, keine doppelte AB | PH-DP-05, PH-DP-16 | +| MT-DP-07 | Lieferschein aus Auftragsbestätigung erzeugen | AB im Status BESTAETIGT | erstelleLieferschein(auftragsNr, lieferdatum) | LS-yyyy-nnnn erstellt, Status GELIEFERT, Mengen übernommen | PH-DP-06, PH-DP-16 | +| MT-DP-08 | Lieferschein ohne Preisfelder bereitstellen | Lieferschein vorhanden | DTO/Export erzeugen | Nur Bezeichnung + Menge, keine Preise enthalten | PH-DP-07, PH-DP-16 | +| MT-DP-09 | Rechnung aus Lieferschein erzeugen | Lieferschein im Status GELIEFERT | erstelleRechnung(lieferscheinNr) | Rechnung R-yyyy-nnnn mit Pflichtangaben und Summen erstellt | PH-DP-08, PH-DP-09, PH-DP-11, PH-DP-16 | +| MT-DP-10 | Fehlende Pflichtangaben in Rechnung ablehnen | Unvollständige Kundendaten | Rechnung erzeugen | ValidationException, keine Speicherung | PH-DP-09, PH-DP-16 | +| MT-DP-11 | Fortlaufende Rechnungsnummern vergeben | Mehrere Lieferscheine vorhanden | Rechnungen erzeugen | Lückenlose Nummernfolge R-yyyy-0001… | PH-DP-10, PH-DP-16 | +| MT-DP-12 | Festgeschriebene Rechnung ist unveränderbar | Rechnung FESTGESCHRIEBEN | Änderungen durchführen | Änderungen werden blockiert | PH-DP-11, PH-DP-16 | +| MT-DP-13 | Preis- und MwSt.-Snapshot sichern | Produktpreis wird nach Erstellung geändert | Angebot erstellen, Preis ändern, neu laden | Alte Preise bleiben im Dokument erhalten | PH-DP-14, PH-DP-16 | +| MT-DP-14 | PDF-Export erzeugt Datei | Dokument existiert | exportAlsPdf() | PDF-Datei wird erstellt (>0 Byte), enthält Nummer + Typ | PH-DP-12, PH-DP-16 | +| MT-DP-15 | Dokumentenübersicht pro Kunde | Mehrere Kunden mit Dokumenten | findByKunde(1) | Nur Kundendokumente werden zurückgegeben, sortiert | PH-DP-13, PH-DP-16 | +| MT-DP-16 | Stammdatenreferenzen prüfen | Produkte und Kunden vorhanden | isProductReferenced / isCustomerReferenced | Referenzierte Werte = true, sonst false | PH-DP-15, PH-DP-16 | -Anforderung Abgedeckte Testfälle -PH-DP-01 Angebot anlegen MT-DP-01, MT-DP-02 -PH-DP-02 Angebotsnummer vergeben MT-DP-03 -PH-DP-03 Angebot bearbeiten MT-DP-04 -PH-DP-04 Auftragsbestätigung erzeugen MT-DP-05 -PH-DP-05 Doppelte Auftragsbestätigung verhindern MT-DP-06 -PH-DP-06 Lieferschein erzeugen MT-DP-07 -PH-DP-07 Lieferschein ohne Preise MT-DP-08 -PH-DP-08 Rechnung erzeugen MT-DP-02, MT-DP-09 -PH-DP-09 Pflichtangaben prüfen MT-DP-09, MT-DP-10 -PH-DP-10 Rechnungsnummer fortlaufend MT-DP-11 -PH-DP-11 Rechnung festschreiben MT-DP-09, MT-DP-12 -PH-DP-12 PDF-Export MT-DP-14 -PH-DP-13 Dokumentenübersicht pro Kunde MT-DP-15 -PH-DP-14 Preis-Snapshot sichern MT-DP-01, MT-DP-13 -PH-DP-15 Stammdatenreferenzen prüfbar machen MT-DP-16 -PH-DP-16 Testbare Logik ohne GUI MT-DP-01 bis MT-DP-16 +## Abdeckungsübersicht + +| Anforderung | Abgedeckte Testfälle | +|------------|----------------------| +| PH-DP-01 Angebot anlegen | MT-DP-01, MT-DP-02 | +| PH-DP-02 Angebotsnummer vergeben | MT-DP-03 | +| PH-DP-03 Angebot bearbeiten | MT-DP-04 | +| PH-DP-04 Auftragsbestätigung erzeugen | MT-DP-05 | +| PH-DP-05 Doppelte Auftragsbestätigung verhindern | MT-DP-06 | +| PH-DP-06 Lieferschein erzeugen | MT-DP-07 | +| PH-DP-07 Lieferschein ohne Preise | MT-DP-08 | +| PH-DP-08 Rechnung erzeugen | MT-DP-02, MT-DP-09 | +| PH-DP-09 Pflichtangaben prüfen | MT-DP-09, MT-DP-10 | +| PH-DP-10 Rechnungsnummer fortlaufend | MT-DP-11 | +| PH-DP-11 Rechnung festschreiben | MT-DP-09, MT-DP-12 | +| PH-DP-12 PDF-Export | MT-DP-14 | +| PH-DP-13 Dokumentenübersicht pro Kunde | MT-DP-15 | +| PH-DP-14 Preis-Snapshot sichern | MT-DP-01, MT-DP-13 | +| PH-DP-15 Stammdatenreferenzen prüfen | MT-DP-16 | +| PH-DP-16 Testbare Logik ohne GUI | MT-DP-01 bis MT-DP-16 | # GUI