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); }); });