import { describe, it, expect, afterEach } from "vitest"; import prisma from "../config/database"; import { generateIssuedOrderNumber, previewIssuedOrderNumber, releaseIssuedOrderNumber, } from "../services/numbering.service"; afterEach(async () => { await prisma.number_sequences.deleteMany({ where: { type: "issued_order" } }); }); describe("issued-order numbering", () => { it("generates sequential numbers", async () => { const year = new Date().getFullYear(); const a = await generateIssuedOrderNumber(year); const b = await generateIssuedOrderNumber(year); expect(Number(b.number)).toBe(Number(a.number) + 1); }); it("preview does not consume the sequence", async () => { const year = new Date().getFullYear(); const p1 = await previewIssuedOrderNumber(year); const p2 = await previewIssuedOrderNumber(year); expect(p1.number).toBe(p2.number); }); it("release frees only the highest number", async () => { const year = new Date().getFullYear(); await generateIssuedOrderNumber(year); // seq 1 await generateIssuedOrderNumber(year); // seq 2 const c = await generateIssuedOrderNumber(year); // seq 3 (current highest) const beforeRelease = (await previewIssuedOrderNumber(year)).number; // seq 4 // Releasing a number that is NOT the current highest is a no-op. await releaseIssuedOrderNumber(year, "00000000"); expect((await previewIssuedOrderNumber(year)).number).toBe(beforeRelease); // Releasing the current highest reclaims it. await releaseIssuedOrderNumber(year, c.number); expect((await previewIssuedOrderNumber(year)).number).toBe(c.number); }); });