import { describe, expect, it } from "vitest"; import { tagCodeAusFund } from "@/lib/tagcode"; /** * Was ein gescannter Code bedeutet (#014). * * Die Kamera findet alles Moegliche: den eigenen Aufkleber, den QR-Code auf * einer Paketmarke, einen Link ins Intranet. Diese Entscheidung liegt deshalb in * einer reinen Funktion und nicht in der Kamerakomponente — dort waere sie nur * von Hand pruefbar, und zwar genau einmal. */ describe("Ein Fund des Scanners", () => { it("nimmt die Adresse vom Aufkleber", () => { expect(tagCodeAusFund("https://laufzettel.firma.de/t/LZ-7K3F9Q")).toBe("LZ-7K3F9Q"); }); it("nimmt sie auch von einem anderen Host", () => { /* * Der Aufkleber klebt jahrelang. Zieht die Anwendung um oder steht ein * zweiter Name davor, waere ein Vergleich mit APP_URL der Grund, warum der * Scanner plötzlich nichts mehr erkennt — obwohl der Code stimmt. */ expect(tagCodeAusFund("http://10.0.0.5:3000/t/LZ-7K3F9Q")).toBe("LZ-7K3F9Q"); }); it("nimmt den blanken Code, auch klein geschrieben", () => { expect(tagCodeAusFund("LZ-7K3F9Q")).toBe("LZ-7K3F9Q"); expect(tagCodeAusFund(" lz-7k3f9q ")).toBe("LZ-7K3F9Q"); }); it("weist alles andere ab, statt zu raten", () => { for (const fund of [ "", " ", "https://laufzettel.firma.de/geraete/abc", "https://laufzettel.firma.de/t/", "https://laufzettel.firma.de/t/LZ-7K3F9Q/extra", // Verwechselbare Zeichen gibt es im Alphabet nicht – ein Code mit O, I // oder 1 ist keiner, auch wenn er wie einer aussieht. "LZ-7K3F9O", "LZ-ABCDE", "nur text", ]) { expect(tagCodeAusFund(fund), fund).toBeNull(); } }); it("verkraftet eine prozentkodierte Adresse", () => { expect(tagCodeAusFund("https://laufzettel.firma.de/t/LZ%2D7K3F9Q")).toBe("LZ-7K3F9Q"); }); });