42 lines
1.6 KiB
TypeScript
42 lines
1.6 KiB
TypeScript
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);
|
|
});
|
|
});
|