mirror of
https://github.com/s-frick/effigenix.git
synced 2026-03-28 11:59:35 +01:00
70 MockMvc-Integrationstests für ProductCategory, Supplier, Article und Customer Controller. Abgedeckte Szenarien: Happy Paths, Validierung (400), Duplikate (409), Not Found (404), Autorisierung (403/401) sowie aggregate-spezifische Operationen (Zertifikate, Bewertungen, Verkaufs- einheiten, Lieferadressen, Präferenzen, Rahmenverträge). Außerdem: Manuelle Testfallbeschreibung unter backend/docs/MASTERDATA_MANUAL_TESTS.md
13 KiB
13 KiB
Manuelle Testfälle – Masterdata BC
Kontext
Der Masterdata Bounded Context ist vollständig implementiert und umfasst vier Aggregate:
- ProductCategory – einfaches Kategorie-Aggregate
- Supplier – Lieferanten mit Zertifikaten, Bewertungen, Adressen
- Article – Artikel mit Verkaufseinheiten (SalesUnits), Lieferantenzuordnung
- Customer – Kunden (B2B/B2C) mit Lieferadressen, Präferenzen, Rahmenvertrag (nur B2B)
Die TUI ist das Testwerkzeug für das Backend. Alle Schreiboperationen erfordern MASTERDATA_WRITE-Permission.
Voraussetzungen
- Backend läuft (
./mvnw spring-boot:runoder Docker) - TUI läuft (
pnpm devim CLI-Verzeichnis) - Eingeloggt als User mit
MASTERDATA_WRITE-Permission (z.B.admin) - Eingeloggt als User ohne
MASTERDATA_WRITE-Permission (z.B.viewer) – für Authz-Tests
TC-CAT: Produktkategorien
TC-CAT-01: Kategorie erstellen (Happy Path)
- Masterdata → Produktkategorien →
[n]Neu - Name:
Obst & Gemüse, Beschreibung:Frische Produkte→ Enter
- Erwartung: Kategorie erscheint in der Liste; Name und Beschreibung korrekt
TC-CAT-02: Kategorie erstellen – ohne Beschreibung
- Name:
Milchprodukte, Beschreibung: leer → Enter
- Erwartung: Kategorie wird angelegt; Beschreibung fehlt ohne Fehler
TC-CAT-03: Kategorie bearbeiten
- Kategorie
Obst & Gemüseauswählen →[e] - Name ändern auf
Obst und Gemüse, Beschreibung aufSaisonale Frische
- Erwartung: Änderungen werden gespeichert und korrekt angezeigt
TC-CAT-04: Doppelter Name wird abgelehnt
- Neue Kategorie mit Name
Milchprodukte(existiert bereits) anlegen
- Erwartung: Fehlermeldung – Name bereits vergeben; kein Datensatz angelegt
TC-CAT-05: Kategorie löschen
- Kategorie
Milchproduktein der Liste auswählen →[d] - Bestätigungsdialog mit
Jabestätigen
- [c] Erwartung: Kategorie verschwindet aus der Liste
TC-CAT-06: Leerer Name wird abgelehnt
- Neue Kategorie, Name leer → Enter
- Erwartung: Fehler / Eingabe nicht möglich; kein API-Aufruf
TC-SUP: Lieferanten
TC-SUP-01: Lieferant erstellen – Pflichtfelder
- Lieferanten →
[n]Neu - Name:
Frisch AG, Telefon:+49 30 12345→ restliche Felder leer → Enter
- Erwartung: Lieferant erscheint in der Liste, Status
AKTIV
TC-SUP-02: Lieferant erstellen – alle Felder
- Name:
Bio GmbH, Telefon:+49 89 999, E-Mail:bio@example.com - Ansprechpartner:
Max Muster - Adresse:
Gartenstraße 5,12,80333,München,Deutschland - Zahlungsziel:
30Tage
- [/] Erwartung: Alle Daten in der Detailansicht korrekt angezeigt
TC-SUP-03: Lieferant erstellen – ohne Pflichtfelder
- Name leer → versuchen zu speichern
- Erwartung: Fehler; kein Lieferant angelegt
- Name gefüllt, Telefon leer → versuchen zu speichern
- Erwartung: Fehler; kein Lieferant angelegt
TC-SUP-04: Doppelter Name wird abgelehnt
- Neuen Lieferanten
Frisch AGanlegen (Name existiert bereits)
- Erwartung: Fehlermeldung – Name bereits vergeben
TC-SUP-05: Lieferant deaktivieren und aktivieren
Frisch AG→ Detailansicht →[Deaktivieren]→ Bestätigen
- Erwartung: Status wechselt auf
INAKTIV(roter Punkt in Liste)
- Erneut öffnen →
[Aktivieren]→ Bestätigen
- Erwartung: Status wechselt auf
AKTIV
TC-SUP-06: Lieferant filtern
- Lieferantenliste:
[A]– nur Aktive
- Erwartung: Nur AKTIV-Lieferanten sichtbar
[I]– nur Inaktive
- Erwartung: Nur INAKTIV-Lieferanten sichtbar
[a]– alle
- Erwartung: Alle Lieferanten sichtbar
TC-SUP-07: Lieferant bewerten
Frisch AG→[Bewerten]- Qualität: 4, Lieferung: 3, Preis: 5 → Enter
- Erwartung: Bewertung in Detailansicht sichtbar; Durchschnitt = 4.0
- In der Liste: Stern-Anzeige
★ 4.0
TC-SUP-08: Bewertung – Grenzen (1 und 5)
- Alle Scores auf 1 setzen → Speichern
- Erwartung: Gespeichert; Durchschnitt = 1.0
- Alle Scores auf 5 → Speichern
- Erwartung: Gespeichert; Durchschnitt = 5.0
TC-SUP-09: Zertifikat hinzufügen (gültig)
Frisch AG→[Zertifikat hinzufügen]- Typ:
ISO9001, Aussteller:TÜV, ab:2024-01-01, bis:2027-01-01
- Erwartung: Zertifikat erscheint in Detailansicht; Anzahl in Liste = 1
TC-SUP-10: Zertifikat hinzufügen (abgelaufen)
- Zertifikat, bis:
2023-12-31(Datum in der Vergangenheit)
- Erwartung: Zertifikat wird angelegt (keine Ablauf-Prüfung beim Hinzufügen); in Detail sichtbar (Edge Case: System soll abgelaufene Zertifikate anzeigen, nicht blocken)
TC-SUP-11: Doppeltes Zertifikat wird abgelehnt
- Erneut
ISO9001,TÜV,2024-01-01hinzufügen
- Erwartung: Fehlermeldung – Duplikat abgelehnt
TC-SUP-12: Zertifikat entfernen
Frisch AG→[Zertifikat entfernen]→ Zertifikat auswählen → Enter
- Erwartung: Zertifikat aus Detailansicht verschwunden
TC-ART: Artikel
TC-ART-01: Artikel erstellen – PIECE_FIXED
- Artikel →
[n]Neu - Name:
Äpfel Gala, Nummer:OG-001 - Kategorie:
Obst & Gemüse(mit ← →) - Einheit:
PIECE_FIXED, Preis:1.99
- Erwartung: Artikel in Liste; Preismodell automatisch
FIXED
TC-ART-02: Artikel erstellen – KG (gewichtsbasiert)
- Name:
Bananen, Nummer:OG-002 - Einheit:
KG, Preis:2.49
- Erwartung: Preismodell automatisch
WEIGHT_BASED
TC-ART-03: Artikel erstellen – HUNDRED_GRAM und PIECE_VARIABLE
- Einheit
HUNDRED_GRAM→ PreismodellWEIGHT_BASED - Einheit
PIECE_VARIABLE→ PreismodellWEIGHT_BASED
- Erwartung: Konsistenz in beiden Fällen korrekt
TC-ART-04: Doppelte Artikelnummer wird abgelehnt
- Neuen Artikel mit Nummer
OG-001anlegen
- Erwartung: Fehlermeldung – Artikelnummer bereits vergeben
TC-ART-05: Artikel deaktivieren und aktivieren
Äpfel Gala→[Deaktivieren]→ Bestätigen
- Erwartung: Status INAKTIV
- Erwartung: Status AKTIV
TC-ART-06: Artikel filtern
[A]nur Aktive,[I]nur Inaktive,[a]alle
- Erwartung: Filter wirkt korrekt
TC-ART-07: Verkaufseinheit hinzufügen
Äpfel Gala→[Verkaufseinheit hinzufügen]- Einheit:
KG, Preis:3.50
- Erwartung: Zweite VE in Detailansicht; Anzahl VE in Liste = 2
TC-ART-08: Doppelte Einheit wird abgelehnt
- Erneut
PIECE_FIXEDfürÄpfel Galahinzufügen
- Erwartung: Fehlermeldung – Einheit bereits vorhanden
TC-ART-09: Letzte Verkaufseinheit kann nicht entfernt werden
- Artikel mit genau einer VE →
[Verkaufseinheit entfernen]
- Erwartung: Aktion nicht verfügbar / Fehler – mindestens eine VE erforderlich
TC-ART-10: Verkaufseinheit entfernen (wenn 2+ vorhanden)
Äpfel Galahat 2 VE →[Verkaufseinheit entfernen]→ KG-Einheit wählen
- Erwartung: VE entfernt; nur noch PIECE_FIXED vorhanden
TC-ART-11: Lieferant dem Artikel zuweisen (falls TUI-Unterstützung vorhanden)
Äpfel Gala→ LieferantFrisch AGzuweisen
- Erwartung: Lieferant in Detailansicht sichtbar
TC-CUS: Kunden
TC-CUS-01: B2C-Kunde erstellen
- Kunden →
[n]Neu - Typ:
B2C, Name:Max Mustermann, Telefon:+49 176 12345 - Rechnungsadresse:
Musterstr. 1,2,10115,Berlin,Deutschland
- Erwartung: Kunde in Liste, Typ-Badge
B2C, StatusAKTIV
TC-CUS-02: B2B-Kunde erstellen
- Typ:
B2B, Name:Gastro GmbH, Telefon:+49 30 9876 - Rechnungsadresse vollständig ausfüllen
- Erwartung: Kunde in Liste, Typ-Badge
B2B
TC-CUS-03: Pflichtfelder Validierung
- Name leer → Fehler
- Telefon leer → Fehler
- Rechnungsadresse unvollständig → Fehler
- Erwartung: Jeweils spezifische Fehlermeldung
TC-CUS-04: Doppelter Kundenname wird abgelehnt
- Erneut
Gastro GmbHanlegen
- Erwartung: Fehlermeldung – Name bereits vergeben
TC-CUS-05: Kunde deaktivieren und aktivieren
Max Mustermann→[Deaktivieren]→ Bestätigen →[Aktivieren]
- Erwartung: Status wechselt korrekt
TC-CUS-06: Kunden filtern (Status + Typ)
[A]→ nur Aktive;[I]→ nur Inaktive;[a]→ alle[B]→ nur B2B;[C]→ nur B2C;[b]→ alle- Kombination: Aktive B2B-Kunden
- Erwartung: Alle Filter wirken korrekt und kombinierbar
TC-CUS-07: Lieferadresse hinzufügen
Gastro GmbH→[Lieferadresse hinzufügen]- Label:
Hauptküche, Straße:Kochstr., Nr:12, PLZ:10963, Stadt:Berlin, Land:Deutschland - Ansprechpartner:
Koch Müller, Lieferhinweis:Bitte kühlen
- Erwartung: Lieferadresse in Detailansicht; Anzahl in Liste = 1
TC-CUS-08: Lieferadresse entfernen
[Lieferadresse entfernen]→Hauptkücheauswählen
- Erwartung: Lieferadresse entfernt
TC-CUS-09: Mehrere Lieferadressen
- Zwei Lieferadressen
Filiale NordundFiliale Südhinzufügen
- Erwartung: Beide in Detailansicht; Anzahl in Liste = 2
TC-CUS-10: Präferenzen setzen
Max Mustermann→[Präferenzen setzen]BIOundREGIONALaktivieren → Enter
- Erwartung: Präferenzen in Detailansicht sichtbar
- Erneut öffnen → nur
HALALaktivieren → Enter
- Erwartung: Nur
HALALgesetzt (Set wird ersetzt, nicht ergänzt)
TC-CUS-11: Alle Präferenzen abwählen
[Präferenzen setzen]→ alle deaktivieren → Enter
- Erwartung: Keine Präferenzen mehr sichtbar
TC-B2B: Rahmenverträge (B2B-spezifisch)
Vorbedingung: Gastro GmbH (B2B) existiert; Artikel Äpfel Gala existiert
TC-B2B-01: Rahmenvertrag für B2B-Kunden erstellen (falls TUI-Unterstützung vorhanden)
Gastro GmbH→ Rahmenvertrag-Bereich- Gültig ab:
2025-01-01, bis:2025-12-31, Rhythmus:WEEKLY - Position: Artikel
Äpfel Gala, vereinbarter Preis:1.50, Menge:100
- Erwartung: Rahmenvertrag in Detailansicht sichtbar
TC-B2B-02: Rahmenvertrag für B2C-Kunden nicht möglich (Backend-Test via API)
POST /api/customers/{b2c-id}/frame-contract
- Erwartung: HTTP 400/422, Fehler
FrameContractNotAllowed
TC-AUTH: Autorisierung
TC-AUTH-01: Lesezugriff ohne MASTERDATA_WRITE
- Als
viewer(ohne MASTERDATA_WRITE) einloggen - Alle Listen aufrufen (Kategorien, Lieferanten, Artikel, Kunden)
- Erwartung: Daten sichtbar, kein Fehler
TC-AUTH-02: Schreibzugriff ohne MASTERDATA_WRITE wird abgelehnt
- Als
viewerversuchen: neue Kategorie erstellen
- Erwartung: HTTP 403 / Fehlermeldung in TUI; kein Datensatz angelegt
- Dasselbe für Lieferant, Artikel, Kunde anlegen
- Erwartung: Jeweils Ablehnung
TC-AUTH-03: Schreibzugriff mit MASTERDATA_WRITE funktioniert
- Als
admin(mit MASTERDATA_WRITE) → alle CRUD-Operationen möglich
- Erwartung: Alle Operationen erfolgreich
TC-CROSS: Übergreifende / Integrations-Tests
TC-CROSS-01: Artikel-Lieferant-Verknüpfung konsistent
- Lieferant
Frisch AGeinem Artikel zuweisen Frisch AGdeaktivieren- Artikel aufrufen → Lieferant weiterhin referenziert (keine Zwangstrennung)
- Erwartung: Artikel zeigt
Frisch AGtrotz INAKTIV-Status
TC-CROSS-02: Kategorie in Artikelauswahl verfügbar
- Neue Kategorie
Getränkeanlegen - Artikel erstellen → Kategorie-Auswahl enthält
Getränke
- Erwartung: Neue Kategorien sofort im Artikel-Formular verfügbar
TC-CROSS-03: Sequenz – Kompletter Lieferant-Workflow
- Lieferant erstellen → bewerten → Zertifikat hinzufügen → deaktivieren → wieder aktivieren → Zertifikat entfernen
- Erwartung: Alle Schritte funktionieren in Folge ohne Datenverlust
TC-CROSS-04: Sequenz – Kompletter Artikel-Workflow
- Kategorie erstellen → Artikel erstellen (mit Kategorie) → 2. VE hinzufügen → 1. VE entfernen → Artikel deaktivieren → aktivieren
- Erwartung: Konsistenz über alle Schritte
TC-CROSS-05: Sequenz – B2B-Kunde vollständig
- B2B-Kunde erstellen → 2 Lieferadressen → Präferenzen setzen → 1 Adresse entfernen → Präferenzen ändern → deaktivieren → aktivieren
- Erwartung: Konsistenz über alle Schritte
Verifikation / Testdurchführung
# Backend starten
./mvnw spring-boot:run
# TUI starten
cd frontend/apps/cli && pnpm dev
# Backend-Logs beobachten (Fehler sichtbar machen)
# Direkte API-Tests (für TC-B2B-02, TC-AUTH)
curl -X POST http://localhost:8080/api/... -H "Authorization: Bearer <token>"
Checkliste nach Test-Durchlauf:
- Alle TC-CAT (1-6) durchgeführt
- Alle TC-SUP (1-12) durchgeführt
- Alle TC-ART (1-11) durchgeführt
- Alle TC-CUS (1-11) durchgeführt
- TC-B2B (1-2) durchgeführt
- TC-AUTH (1-3) durchgeführt
- TC-CROSS (1-5) durchgeführt