Inventar Sync Generaltest: Bob-Szenario mit 10 Items, PATCH & WebSocket-Push #62
Labels
No labels
block-planning
bug
documentation
duplicate
enhancement
feature
good first issue
help wanted
infrastructure
invalid
planning
priority:high
priority:low
question
refactoring
status:backlog
status:done
status:in-progress
status:todo
tech-decision
test
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: bollwerkadmin/bollwerk#62
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Kontext
Generaltest für den vollständigen Inventar-Sync-Flow. Testet das Zusammenspiel von Login, Inventar-Anlage, PATCH-Einzelupdate und WebSocket-Push-Benachrichtigung am Beispiel des Testbenutzers bob (Passwort:
bob).Das Szenario soll als neues Szenario 6 in
run-integration-tests.ps1eingebaut werden und deckt den typischen App-Lebenszyklus ab.Haupt-Szenario: Bob legt ein Inventar mit 10 Artikeln an
Schritt 1 – Bob loggt sich ein
POST /api/auth/loginmit{ username: "bob", password: "bob" }accessToken,refreshTokenunduserIdSchritt 2 – Bob pusht 10 Artikel
Bob sendet
PUT /api/inventorymit einem vollständigenInventoryDto:Lebensmittel,Getränke,HygieneKeller,Badezimmerid), z. B.:Assert:
GET /api/inventory→ 10 Items, 3 Kategorien, 2 LagerorteSchritt 3 – Bob ändert einen bestehenden Artikel (PATCH)
PATCH /api/inventory/items/{id}für Dosenbrot →quantity = 10GET /api/inventory→ Dosenbrot qty = 10Schritt 4 – Bob fügt einen weiteren Artikel hinzu (PUT mit 11 Items)
Salzcracker)GET /api/inventory→ 11 ItemsSchritt 5 – Server-seitige Änderung löst WebSocket-Push aus
ws://<host>/ws/sync?token=<bobToken>PATCH /api/inventory/items/{dosenbroId}→quantity = 15inventory_updatedmit deritemIdtype = "inventory_updated"und korrekteitemIdSchritt 6 – Full-Sync-Push bei PUT
PUT /api/inventory(beliebiges Inventar für Bobs userId)type = "full_sync_required"Weitere Testfälle (nach dem Haupt-Szenario)
bob_patchNonExistentItem_returns404bob_pushEmptyInventory_clearsAllbob_putOverwritesPreviousDatabob_websocketReceivesOwnPatchinventory_updatedbob_cannotSeeAlice_inventorybob_invalidToken_returns401bob_multipleWebSocketSessionsbob_patchAfterDisconnect_noErrorUmsetzungshinweise
run-integration-tests.ps1gegen laufenden Server (lokal oder VPS)authorized_keys.pub/ Admin-Init)POST /api/auth/loginermitteln – kein hartcodiertes JWTOpen-WebSocket/Receive-WsMessages[System.Guid]::NewGuid()generieren, damit Tests idempotent sindEndToEndSyncTest.ktPUT /api/inventorymit leeren Listen (oder neuer DB-Zustand ist ok)Akzeptanzkriterien
run-integration-tests.ps1implementiert[PASS]).\run-integration-tests.ps1läuft vollständig ohne[FAIL]inventory_updatedundfull_sync_requiredgeprüftTestergebnis (2026-05-17)
Build & Tests: ✅
Integrationstests: 30/30
Szenario 6: Bob-Generaltest
Nebenfix: WebSocketManager camelCase-Events (\inventoryUpdated/\ullSyncRequired) für App-Kompatibilität korrigiert und auf VPS deployed.