import { describe, expect, it } from "vitest"; import { detectWpNumber, makeIdentifier, parseIdentifier, parseVersionLabel } from "@/lib/papers/identifiers"; describe("identifiers", () => { it("builds permanent identifiers and slugs", () => { expect(makeIdentifier("WP", 7)).toEqual({ seriesCode: "WP", number: 7, identifier: "WP07", slug: "wp7" }); expect(makeIdentifier("wp", 38).identifier).toBe("WP38"); expect(makeIdentifier("FIRC", 2)).toEqual({ seriesCode: "FIRC", number: 2, identifier: "FIRC0002", slug: "firc2" }); }); it("parses user input leniently", () => { for (const s of ["wp38", "WP38", "WP038", "wp-38", "WP_38", "38", " wp 38 "]) expect(parseIdentifier(s)?.slug).toBe("wp38"); expect(parseIdentifier("firc2")?.identifier).toBe("FIRC0002"); expect(parseIdentifier("FIRC0002")?.slug).toBe("firc2"); expect(parseIdentifier("hello")).toBeNull(); expect(parseIdentifier("wp0")).toBeNull(); expect(parseIdentifier("")).toBeNull(); }); it("parses version labels", () => { expect(parseVersionLabel("v2")).toEqual({ versionNo: 2, label: "v2" }); expect(parseVersionLabel("1.1")).toEqual({ versionNo: 1, label: "v1.1" }); expect(parseVersionLabel("x")).toBeNull(); }); it("detects working paper numbers on title pages", () => { expect(detectWpNumber("UQO Working Paper No. 38\nNovember 2026")).toEqual({ seriesCode: "WP", number: 38 }); expect(detectWpNumber("Working Paper Number 7")).toEqual({ seriesCode: "WP", number: 7 }); expect(detectWpNumber("FIRC Research Paper No. 0002")).toEqual({ seriesCode: "FIRC", number: 2 }); expect(detectWpNumber("No working paper here")).toBeNull(); }); });