fix(numbering): release project number on order delete + harden split tests + accurate settings preview
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -112,6 +112,55 @@ describe("generateProjectNumber", () => {
|
||||
});
|
||||
});
|
||||
|
||||
describe("cross-sequence isolation (shared vs project)", () => {
|
||||
beforeEach(async () => {
|
||||
await prisma.number_sequences.deleteMany({
|
||||
where: { type: { in: ["shared", "project"] } },
|
||||
});
|
||||
});
|
||||
|
||||
afterEach(async () => {
|
||||
await prisma.number_sequences.deleteMany({
|
||||
where: { type: { in: ["shared", "project"] } },
|
||||
});
|
||||
});
|
||||
|
||||
it("generateSharedNumber advances ONLY the shared row; generateProjectNumber ONLY the project row", async () => {
|
||||
// Seed the two sequences to DISTINCT known highs so neither generated
|
||||
// number collides with a real row (skip-taken retry never fires) and a
|
||||
// cross-contamination bug is unambiguous.
|
||||
await seedSequence("shared", 900000);
|
||||
await seedSequence("project", 500000);
|
||||
|
||||
await generateSharedNumber();
|
||||
// After a shared allocation only the shared row may have moved.
|
||||
let shared = await prisma.number_sequences.findFirst({
|
||||
where: { type: "shared", year: YEAR },
|
||||
select: { last_number: true },
|
||||
});
|
||||
let project = await prisma.number_sequences.findFirst({
|
||||
where: { type: "project", year: YEAR },
|
||||
select: { last_number: true },
|
||||
});
|
||||
expect(shared?.last_number).toBe(900001);
|
||||
expect(project?.last_number).toBe(500000);
|
||||
|
||||
await generateProjectNumber();
|
||||
// After a project allocation only the project row may have moved; the
|
||||
// shared row must still sit at 900001.
|
||||
shared = await prisma.number_sequences.findFirst({
|
||||
where: { type: "shared", year: YEAR },
|
||||
select: { last_number: true },
|
||||
});
|
||||
project = await prisma.number_sequences.findFirst({
|
||||
where: { type: "project", year: YEAR },
|
||||
select: { last_number: true },
|
||||
});
|
||||
expect(shared?.last_number).toBe(900001);
|
||||
expect(project?.last_number).toBe(500001);
|
||||
});
|
||||
});
|
||||
|
||||
describe("generateOfferNumber", () => {
|
||||
beforeEach(async () => {
|
||||
await prisma.number_sequences.deleteMany({ where: { type: "offer" } });
|
||||
|
||||
Reference in New Issue
Block a user