Files
Wabenhain/src/lib/inventory.test.ts
T
Nick SzaunigandClaude Opus 5.5 d52a762e8a fix: Produkt-Formular ueberschreibt keinen zwischenzeitlich gebuchten Bestand
Das Speichern schrieb den Formularwert immer fest in den Lagerbestand.
Wurde zwischen Oeffnen und Speichern ein Glas verkauft, kam es dadurch
wieder in den Bestand, ohne dass es je zurueckkam.

- Das Formular schickt den Bestand beim Oeffnen mit (quantityLoaded)
- Feld unveraendert: Bestand wird nicht angefasst
- Feld geaendert: Schreiben nur, wenn der Bestand noch dem geladenen Stand
  entspricht (Bedingung atomar im UPDATE); sonst wird nichts gespeichert
  und der aktuelle Wert angezeigt
- Fehlt quantityLoaded (alter Tab), muss neu geladen werden

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
2026-09-26 05:55:36 +02:00

46 lines
1.9 KiB
TypeScript

import { describe, test, expect } from "vitest";
import { needsRestockOnCancel, planInventoryEdit } from "./inventory";
describe("planInventoryEdit", () => {
test("laesst den Bestand unberuehrt, wenn das Feld nicht geaendert wurde", () => {
// Zwischen Oeffnen und Speichern verkaufte Glaeser duerfen nicht
// mit dem alten Formularwert ueberschrieben werden.
expect(planInventoryEdit({ loaded: "105", submitted: 105 })).toEqual({ kind: "keep" });
});
test("setzt den Bestand nur unter der Bedingung, dass er noch dem geladenen Wert entspricht", () => {
expect(planInventoryEdit({ loaded: "105", submitted: 120 })).toEqual({
kind: "set",
expected: 105,
quantity: 120,
});
});
test("verlangt ein Neuladen, wenn der geladene Wert fehlt", () => {
// Formular aus einem Tab, der vor dem Deployment geoeffnet wurde.
expect(planInventoryEdit({ loaded: "", submitted: 105 })).toEqual({ kind: "reload" });
});
test("verlangt ein Neuladen bei einem manipulierten geladenen Wert", () => {
expect(planInventoryEdit({ loaded: "-1", submitted: 105 })).toEqual({ kind: "reload" });
expect(planInventoryEdit({ loaded: "1.5", submitted: 105 })).toEqual({ kind: "reload" });
expect(planInventoryEdit({ loaded: "abc", submitted: 105 })).toEqual({ kind: "reload" });
});
});
describe("needsRestockOnCancel", () => {
test("bucht zurueck, wenn es keine Retoure gibt", () => {
expect(needsRestockOnCancel(null)).toBe(true);
});
test("bucht zurueck, solange die Retoure noch nicht erstattet ist", () => {
expect(needsRestockOnCancel("ANGEFRAGT")).toBe(true);
expect(needsRestockOnCancel("ANGENOMMEN")).toBe(true);
expect(needsRestockOnCancel("ABGELEHNT")).toBe(true);
});
test("bucht nicht noch einmal zurueck, wenn die Retoure die Ware schon zurueckgebucht hat", () => {
expect(needsRestockOnCancel("ERSTATTET")).toBe(false);
});
});