Cartly /
QA / QA-042-Sprint2-Test-Plan
QA-042: Sprint 2 Test Plan — Products, Categories, Attributes
Status: Draft (QA)
Issue: CAR-42
Owner: QA (8d0de613)
Created: 2026-07-03
Blocked by: CAR-36, CAR-37, CAR-38, CAR-39 (DEV Sprint 2 Implementation)
PRD Reference: PRD-001 v0.8, PRD-001-Gherkin-Acceptance-Criteria.md (Sprint 2 Section)
1. Overview
Vollständiger Testplan für Sprint 2 Stammdaten-Features gemäß PM-SPRINT2-STORIES.md und PRD-001-Gherkin-Acceptance-Criteria.md.
Test Scope: REST API (backend), keine UI in Sprint 2.
Ziel: ≥ 80% Testabdeckung (27/34 Szenarien automatisiert), alle Critical-Path-Szenarien in CI.
2. Test Environment
Test-Accounts (from Sprint 1, reused):
3. Feature Test Matrix
S2-F1 Product CRUD (8 Total: 4 Must-Have, 4 Edge)
| ID |
Test Case |
Type |
Priority |
Status |
| SP-AC001 |
Product erstellen mit Pflichtfeldern |
Must-Have |
P0 |
Pending |
| SP-AC002 |
Product erstellen mit allen optionalen Feldern |
Must-Have |
P0 |
Pending |
| SP-AC003 |
Product abrufen nach ID |
Must-Have |
P0 |
Pending |
| SP-AC004 |
Product aktualisieren (Update) |
Must-Have |
P0 |
Pending |
| SP-AC005 |
Product mit ungültigen Pflichtfeldern → 400 |
Edge |
P1 |
Pending |
| SP-AC006 |
Product mit nicht-existierender Company → 404 |
Edge |
P1 |
Pending |
| SP-AC007 |
Product löschen (Soft Delete) |
Must-Have |
P0 |
Pending |
| SP-AC008 |
Gelöschtes Product erscheint nicht mehr in Liste |
Edge |
P1 |
Pending |
S2-F2 Category Management + Hierarchie (6 Total: 4 Must-Have, 2 Edge)
| ID |
Test Case |
Type |
Priority |
Status |
| SP-AC010 |
Root Category erstellen |
Must-Have |
P0 |
Pending |
| SP-AC011 |
Child Category unter Parent erstellen |
Must-Have |
P0 |
Pending |
| SP-AC012 |
Category-Hierarchie abrufen (Tree) |
Must-Have |
P0 |
Pending |
| SP-AC013 |
Category mit nicht-existierendem Parent → 400 |
Edge |
P1 |
Pending |
| SP-AC014 |
Category löschen → Children werden Root |
Must-Have |
P0 |
Pending |
| SP-AC015 |
Category wird Product zugewiesen |
Must-Have |
P0 |
Pending |
S2-F3 Product Attributes (7 Total: 5 Must-Have, 2 Edge)
| ID |
Test Case |
Type |
Priority |
Status |
| SP-AC020 |
Size-Attribut einzeln vergeben |
Must-Have |
P0 |
Pending |
| SP-AC021 |
Size-Attribut Multi-Select (S, M, L, XL) |
Must-Have |
P0 |
Pending |
| SP-AC022 |
Color-Attribut vergeben (schwarz, weiß) |
Must-Have |
P0 |
Pending |
| SP-AC023 |
Season-Attribut vergeben |
Must-Have |
P0 |
Pending |
| SP-AC024 |
Ungültiges Attribut-Type → 400 |
Edge |
P1 |
Pending |
| SP-AC025 |
Product ohne Season (optional) |
Must-Have |
P0 |
Pending |
| SP-AC026 |
Product nach Size filtern |
Must-Have |
P0 |
Pending |
S2-F4 SKU-Varianten (7 Total: 4 Must-Have, 3 Edge)
| ID |
Test Case |
Type |
Priority |
Status |
| SP-AC030 |
SKU-Varianten automatisch generieren (1×N) |
Must-Have |
P0 |
Pending |
| SP-AC031 |
Vollständige Größe×Farbe-Matrix (N×M) |
Must-Have |
P0 |
Pending |
| SP-AC032 |
SKU-Variante eigenen Preis setzen |
Must-Have |
P0 |
Pending |
| SP-AC033 |
SKU-Variante eigenen Bestand setzen |
Must-Have |
P0 |
Pending |
| SP-AC034 |
Bestand reduzieren (Verkauf) |
Edge |
P1 |
Pending |
| SP-AC035 |
Bestand = 0 → ausverkauft |
Edge |
P1 |
Pending |
| SP-AC036 |
Verkauf mit Bestand = 0 → 409 |
Edge |
P1 |
Pending |
S2-F5 Product Images — S3 Upload (6 Total: 4 Must-Have, 2 Edge)
| ID |
Test Case |
Type |
Priority |
Status |
| SP-AC040 |
Produktbild hochladen (primary) |
Must-Have |
P0 |
Pending |
| SP-AC041 |
Mehrere Bilder (Galerie) hochladen |
Must-Have |
P0 |
Pending |
| SP-AC042 |
Primäres Bild austauschen |
Must-Have |
P0 |
Pending |
| SP-AC043 |
Bild-Upload ohne Auth → 401 |
Must-Have |
P0 |
Pending |
| SP-AC044 |
Falsches Dateiformat → 400 |
Edge |
P1 |
Pending |
| SP-AC045 |
Bild > 10MB → 413 |
Edge |
P1 |
Pending |
4. Edge-Case-Szenarien
Product
- SKU-Duplikat innerhalb Company → 409 Conflict
- is_deleted Product bei GET → 404
- Negativer Preis → 400
- Preis = 0 (Erlaubt? Dokumentieren!)
- Sehr lange Produktbeschreibung (> 10.000 Zeichen)
Category
- Zirkuläre Parent-Referenz verhindern (A→B→C→A)
- Category mit Product-Zuordnung löschen → Children werden Root, Products behalten Category
- Unbegrenzte Hierarchie-Tiefe (Performance-Test: 100 Ebenen)
SKU-Varianten
- Bestand-Konkurrenz (zwei gleichzeitige Verkäufe)
- Bestand geht negativ (Race Condition)
- Preis-Leerung (NULL) → wie behandeln?
- SKU mit Umlauten/Sonderzeichen (z.B. Größe "XL/XXL")
Meilisearch
- Suche während Index-Update (stale data window)
- Unicode-Suche (umlaut expansion: "schwarz" findet auch "schwärz")
- Leere Suchergebnisse → aussagekräftige Fehlermeldung
5. Test Execution Checklist
Phase 1: Test Environment Setup
Phase 2: Product CRUD Tests
Phase 3: Category + Hierarchy Tests
Phase 4: Product Attributes Tests
Phase 5: SKU-Varianten Tests
Phase 6: Image Upload Tests
Phase 7: Meilisearch Integration Tests
6. Critical Path (CI-Include)
Folgende Szenarien MÜSSEN in CI-Pipeline sein (≥80% Coverage für diese):
- SP-AC001 — Product erstellen
- SP-AC003 — Product abrufen
- SP-AC004 — Product aktualisieren
- SP-AC007 — Product löschen (Soft Delete)
- SP-AC010 — Category erstellen
- SP-AC012 — Category-Hierarchie abrufen
- SP-AC020 — Size-Attribut vergeben
- SP-AC022 — Color-Attribut vergeben
- SP-AC030 — SKU generieren (Matrix)
- SP-AC032 — SKU-Preis setzen
- SP-AC040 — Bild hochladen
- SP-AC043 — Bild-Upload ohne Auth → 401
7. Dependencies
| Issue |
Owner |
Blockiert |
| CAR-36 |
DEV |
Product CRUD + Gherkin AK |
| CAR-37 |
DEV |
Category CRUD + Hierarchie + Gherkin AK |
| CAR-38 |
DEV |
Product Attributes + Gherkin AK |
| CAR-39 |
DEV |
SKU-Varianten + Gherkin AK |
| CAR-40 |
DEV |
Meilisearch Integration |
| CAR-41 |
DEV |
Meilisearch Integration |
8. Deliverables
QA Agent (8d0de613) — 2026-07-03