34 lines
1.1 KiB
TypeScript
34 lines
1.1 KiB
TypeScript
|
|
/**
|
||
|
|
* Concurrent smoke test: 10 parallel calls to generateQuoteNumberServer
|
||
|
|
* must produce 10 unique, contiguous quote numbers (no collisions).
|
||
|
|
*/
|
||
|
|
import { generateQuoteNumberServer } from "../../src/lib/server/quotes-service";
|
||
|
|
|
||
|
|
async function main() {
|
||
|
|
const calls = Array.from({ length: 10 }, () => generateQuoteNumberServer());
|
||
|
|
const results = await Promise.all(calls);
|
||
|
|
console.log("Generated:", results);
|
||
|
|
|
||
|
|
const set = new Set(results);
|
||
|
|
if (set.size !== results.length) {
|
||
|
|
console.error(`FAIL — got ${results.length} results but only ${set.size} unique`);
|
||
|
|
process.exit(1);
|
||
|
|
}
|
||
|
|
// Numbers must be contiguous (Q-2026-06-004..013, since -001..-003 are taken)
|
||
|
|
const seqs = results
|
||
|
|
.map((r) => Number(r.match(/Q-\d{4}-\d{2}-(\d{3})$/)![1]))
|
||
|
|
.sort((a, b) => a - b);
|
||
|
|
for (let i = 0; i < seqs.length; i += 1) {
|
||
|
|
if (seqs[i] !== seqs[0] + i) {
|
||
|
|
console.error(`FAIL — non-contiguous sequence: ${seqs.join(",")}`);
|
||
|
|
process.exit(1);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
console.log("OK — 10 concurrent calls, all unique and contiguous.");
|
||
|
|
}
|
||
|
|
|
||
|
|
main().catch((err) => {
|
||
|
|
console.error(err);
|
||
|
|
process.exit(1);
|
||
|
|
});
|