spb/wp-spboucher-ai
Public
1import { describe, expect, it } from "vitest";2import { detectWpNumber, makeIdentifier, parseIdentifier, parseVersionLabel } from "@/lib/papers/identifiers";3describe("identifiers", () => {4 it("builds permanent identifiers and slugs", () => {5 expect(makeIdentifier("WP", 7)).toEqual({ seriesCode: "WP", number: 7, identifier: "WP07", slug: "wp7" });6 expect(makeIdentifier("wp", 38).identifier).toBe("WP38");7 expect(makeIdentifier("FIRC", 2)).toEqual({ seriesCode: "FIRC", number: 2, identifier: "FIRC0002", slug: "firc2" });8 });9 it("parses user input leniently", () => {10 for (const s of ["wp38", "WP38", "WP038", "wp-38", "WP_38", "38", " wp 38 "]) expect(parseIdentifier(s)?.slug).toBe("wp38");11 expect(parseIdentifier("firc2")?.identifier).toBe("FIRC0002"); expect(parseIdentifier("FIRC0002")?.slug).toBe("firc2");12 expect(parseIdentifier("hello")).toBeNull(); expect(parseIdentifier("wp0")).toBeNull(); expect(parseIdentifier("")).toBeNull();13 });14 it("parses version labels", () => {15 expect(parseVersionLabel("v2")).toEqual({ versionNo: 2, label: "v2" }); expect(parseVersionLabel("1.1")).toEqual({ versionNo: 1, label: "v1.1" }); expect(parseVersionLabel("x")).toBeNull();16 });17 it("detects working paper numbers on title pages", () => {18 expect(detectWpNumber("UQO Working Paper No. 38\nNovember 2026")).toEqual({ seriesCode: "WP", number: 38 });19 expect(detectWpNumber("Working Paper Number 7")).toEqual({ seriesCode: "WP", number: 7 });20 expect(detectWpNumber("FIRC Research Paper No. 0002")).toEqual({ seriesCode: "FIRC", number: 2 });21 expect(detectWpNumber("No working paper here")).toBeNull();22 });23});24