1
0
Fork 0
mirror of https://github.com/s-frick/effigenix.git synced 2026-03-28 15:19:35 +01:00
effigenix/backend/docs/MASTERDATA_MANUAL_TESTS.md
Sebastian Frick 2ace5be394 test(masterdata): Integrationstests für alle vier Masterdata-Aggregate
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
2026-02-19 00:33:52 +01:00

13 KiB
Raw Blame History

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:run oder Docker)
  • TUI läuft (pnpm dev im 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)

  1. Masterdata → Produktkategorien → [n] Neu
  2. 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

  1. Name: Milchprodukte, Beschreibung: leer → Enter
  • Erwartung: Kategorie wird angelegt; Beschreibung fehlt ohne Fehler

TC-CAT-03: Kategorie bearbeiten

  1. Kategorie Obst & Gemüse auswählen → [e]
  2. Name ändern auf Obst und Gemüse, Beschreibung auf Saisonale Frische
  • Erwartung: Änderungen werden gespeichert und korrekt angezeigt

TC-CAT-04: Doppelter Name wird abgelehnt

  1. Neue Kategorie mit Name Milchprodukte (existiert bereits) anlegen
  • Erwartung: Fehlermeldung Name bereits vergeben; kein Datensatz angelegt

TC-CAT-05: Kategorie löschen

  1. Kategorie Milchprodukte in der Liste auswählen → [d]
  2. Bestätigungsdialog mit Ja bestätigen
  • [c] Erwartung: Kategorie verschwindet aus der Liste

TC-CAT-06: Leerer Name wird abgelehnt

  1. Neue Kategorie, Name leer → Enter
  • Erwartung: Fehler / Eingabe nicht möglich; kein API-Aufruf

TC-SUP: Lieferanten

TC-SUP-01: Lieferant erstellen Pflichtfelder

  1. Lieferanten → [n] Neu
  2. 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

  1. Name: Bio GmbH, Telefon: +49 89 999, E-Mail: bio@example.com
  2. Ansprechpartner: Max Muster
  3. Adresse: Gartenstraße 5, 12, 80333, München, Deutschland
  4. Zahlungsziel: 30 Tage
  • [/] Erwartung: Alle Daten in der Detailansicht korrekt angezeigt

TC-SUP-03: Lieferant erstellen ohne Pflichtfelder

  1. Name leer → versuchen zu speichern
  • Erwartung: Fehler; kein Lieferant angelegt
  1. Name gefüllt, Telefon leer → versuchen zu speichern
  • Erwartung: Fehler; kein Lieferant angelegt

TC-SUP-04: Doppelter Name wird abgelehnt

  1. Neuen Lieferanten Frisch AG anlegen (Name existiert bereits)
  • Erwartung: Fehlermeldung Name bereits vergeben

TC-SUP-05: Lieferant deaktivieren und aktivieren

  1. Frisch AG → Detailansicht → [Deaktivieren] → Bestätigen
  • Erwartung: Status wechselt auf INAKTIV (roter Punkt in Liste)
  1. Erneut öffnen → [Aktivieren] → Bestätigen
  • Erwartung: Status wechselt auf AKTIV

TC-SUP-06: Lieferant filtern

  1. Lieferantenliste: [A] nur Aktive
  • Erwartung: Nur AKTIV-Lieferanten sichtbar
  1. [I] nur Inaktive
  • Erwartung: Nur INAKTIV-Lieferanten sichtbar
  1. [a] alle
  • Erwartung: Alle Lieferanten sichtbar

TC-SUP-07: Lieferant bewerten

  1. Frisch AG[Bewerten]
  2. Qualität: 4, Lieferung: 3, Preis: 5 → Enter
  • Erwartung: Bewertung in Detailansicht sichtbar; Durchschnitt = 4.0
  1. In der Liste: Stern-Anzeige ★ 4.0

TC-SUP-08: Bewertung Grenzen (1 und 5)

  1. Alle Scores auf 1 setzen → Speichern
  • Erwartung: Gespeichert; Durchschnitt = 1.0
  1. Alle Scores auf 5 → Speichern
  • Erwartung: Gespeichert; Durchschnitt = 5.0

TC-SUP-09: Zertifikat hinzufügen (gültig)

  1. Frisch AG[Zertifikat hinzufügen]
  2. 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)

  1. 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

  1. Erneut ISO9001, TÜV, 2024-01-01 hinzufügen
  • Erwartung: Fehlermeldung Duplikat abgelehnt

TC-SUP-12: Zertifikat entfernen

  1. Frisch AG[Zertifikat entfernen] → Zertifikat auswählen → Enter
  • Erwartung: Zertifikat aus Detailansicht verschwunden

TC-ART: Artikel

TC-ART-01: Artikel erstellen PIECE_FIXED

  1. Artikel → [n] Neu
  2. Name: Äpfel Gala, Nummer: OG-001
  3. Kategorie: Obst & Gemüse (mit ← →)
  4. Einheit: PIECE_FIXED, Preis: 1.99
  • Erwartung: Artikel in Liste; Preismodell automatisch FIXED

TC-ART-02: Artikel erstellen KG (gewichtsbasiert)

  1. Name: Bananen, Nummer: OG-002
  2. Einheit: KG, Preis: 2.49
  • Erwartung: Preismodell automatisch WEIGHT_BASED

TC-ART-03: Artikel erstellen HUNDRED_GRAM und PIECE_VARIABLE

  1. Einheit HUNDRED_GRAM → Preismodell WEIGHT_BASED
  2. Einheit PIECE_VARIABLE → Preismodell WEIGHT_BASED
  • Erwartung: Konsistenz in beiden Fällen korrekt

TC-ART-04: Doppelte Artikelnummer wird abgelehnt

  1. Neuen Artikel mit Nummer OG-001 anlegen
  • Erwartung: Fehlermeldung Artikelnummer bereits vergeben

TC-ART-05: Artikel deaktivieren und aktivieren

  1. Äpfel Gala[Deaktivieren] → Bestätigen
  • Erwartung: Status INAKTIV
  • Erwartung: Status AKTIV

TC-ART-06: Artikel filtern

  1. [A] nur Aktive, [I] nur Inaktive, [a] alle
  • Erwartung: Filter wirkt korrekt

TC-ART-07: Verkaufseinheit hinzufügen

  1. Äpfel Gala[Verkaufseinheit hinzufügen]
  2. Einheit: KG, Preis: 3.50
  • Erwartung: Zweite VE in Detailansicht; Anzahl VE in Liste = 2

TC-ART-08: Doppelte Einheit wird abgelehnt

  1. Erneut PIECE_FIXED für Äpfel Gala hinzufügen
  • Erwartung: Fehlermeldung Einheit bereits vorhanden

TC-ART-09: Letzte Verkaufseinheit kann nicht entfernt werden

  1. 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)

  1. Äpfel Gala hat 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)

  1. Äpfel Gala → Lieferant Frisch AG zuweisen
  • Erwartung: Lieferant in Detailansicht sichtbar

TC-CUS: Kunden

TC-CUS-01: B2C-Kunde erstellen

  1. Kunden → [n] Neu
  2. Typ: B2C, Name: Max Mustermann, Telefon: +49 176 12345
  3. Rechnungsadresse: Musterstr. 1, 2, 10115, Berlin, Deutschland
  • Erwartung: Kunde in Liste, Typ-Badge B2C, Status AKTIV

TC-CUS-02: B2B-Kunde erstellen

  1. Typ: B2B, Name: Gastro GmbH, Telefon: +49 30 9876
  2. Rechnungsadresse vollständig ausfüllen
  • Erwartung: Kunde in Liste, Typ-Badge B2B

TC-CUS-03: Pflichtfelder Validierung

  1. Name leer → Fehler
  2. Telefon leer → Fehler
  3. Rechnungsadresse unvollständig → Fehler
  • Erwartung: Jeweils spezifische Fehlermeldung

TC-CUS-04: Doppelter Kundenname wird abgelehnt

  1. Erneut Gastro GmbH anlegen
  • Erwartung: Fehlermeldung Name bereits vergeben

TC-CUS-05: Kunde deaktivieren und aktivieren

  1. Max Mustermann[Deaktivieren] → Bestätigen → [Aktivieren]
  • Erwartung: Status wechselt korrekt

TC-CUS-06: Kunden filtern (Status + Typ)

  1. [A] → nur Aktive; [I] → nur Inaktive; [a] → alle
  2. [B] → nur B2B; [C] → nur B2C; [b] → alle
  3. Kombination: Aktive B2B-Kunden
  • Erwartung: Alle Filter wirken korrekt und kombinierbar

TC-CUS-07: Lieferadresse hinzufügen

  1. Gastro GmbH[Lieferadresse hinzufügen]
  2. Label: Hauptküche, Straße: Kochstr., Nr: 12, PLZ: 10963, Stadt: Berlin, Land: Deutschland
  3. Ansprechpartner: Koch Müller, Lieferhinweis: Bitte kühlen
  • Erwartung: Lieferadresse in Detailansicht; Anzahl in Liste = 1

TC-CUS-08: Lieferadresse entfernen

  1. [Lieferadresse entfernen]Hauptküche auswählen
  • Erwartung: Lieferadresse entfernt

TC-CUS-09: Mehrere Lieferadressen

  1. Zwei Lieferadressen Filiale Nord und Filiale Süd hinzufügen
  • Erwartung: Beide in Detailansicht; Anzahl in Liste = 2

TC-CUS-10: Präferenzen setzen

  1. Max Mustermann[Präferenzen setzen]
  2. BIO und REGIONAL aktivieren → Enter
  • Erwartung: Präferenzen in Detailansicht sichtbar
  1. Erneut öffnen → nur HALAL aktivieren → Enter
  • Erwartung: Nur HALAL gesetzt (Set wird ersetzt, nicht ergänzt)

TC-CUS-11: Alle Präferenzen abwählen

  1. [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)

  1. Gastro GmbH → Rahmenvertrag-Bereich
  2. Gültig ab: 2025-01-01, bis: 2025-12-31, Rhythmus: WEEKLY
  3. 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

  1. Als viewer (ohne MASTERDATA_WRITE) einloggen
  2. Alle Listen aufrufen (Kategorien, Lieferanten, Artikel, Kunden)
  • Erwartung: Daten sichtbar, kein Fehler

TC-AUTH-02: Schreibzugriff ohne MASTERDATA_WRITE wird abgelehnt

  1. Als viewer versuchen: neue Kategorie erstellen
  • Erwartung: HTTP 403 / Fehlermeldung in TUI; kein Datensatz angelegt
  1. Dasselbe für Lieferant, Artikel, Kunde anlegen
  • Erwartung: Jeweils Ablehnung

TC-AUTH-03: Schreibzugriff mit MASTERDATA_WRITE funktioniert

  1. 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

  1. Lieferant Frisch AG einem Artikel zuweisen
  2. Frisch AG deaktivieren
  3. Artikel aufrufen → Lieferant weiterhin referenziert (keine Zwangstrennung)
  • Erwartung: Artikel zeigt Frisch AG trotz INAKTIV-Status

TC-CROSS-02: Kategorie in Artikelauswahl verfügbar

  1. Neue Kategorie Getränke anlegen
  2. Artikel erstellen → Kategorie-Auswahl enthält Getränke
  • Erwartung: Neue Kategorien sofort im Artikel-Formular verfügbar

TC-CROSS-03: Sequenz Kompletter Lieferant-Workflow

  1. 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

  1. 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

  1. 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