Files
omniai-server/scripts/betaInviteCodes.test.js
2026-06-02 13:14:10 +08:00

71 lines
2.4 KiB
JavaScript

const assert = require("node:assert/strict");
const {
checkBetaInviteCodeForRegistration,
consumeBetaInviteCode,
loadBetaInviteCodesFromText,
normalizeBetaInviteCode,
validateBetaInviteCode,
} = require("../src/betaInviteCodes");
const sampleMarkdown = `
# OmniAI Internal Beta Invite Codes
| # | HEX | Octal |
|---|-----|-------|
| 1 | A1B2C3D4E5F60718 | 120746072324712600340 |
| 2 | 0011223344556677 | 000104421463210531467 |
`;
const codes = loadBetaInviteCodesFromText(sampleMarkdown);
assert.equal(normalizeBetaInviteCode(" a1b2-c3d4 e5f60718 "), "A1B2C3D4E5F60718");
assert.equal(normalizeBetaInviteCode("120746072324712600340"), "120746072324712600340");
assert.equal(codes.has("A1B2C3D4E5F60718"), true);
assert.equal(codes.has("120746072324712600340"), true);
assert.equal(validateBetaInviteCode("a1b2c3d4e5f60718", codes), true);
assert.equal(validateBetaInviteCode("000104421463210531467", codes), true);
assert.equal(validateBetaInviteCode("", codes), false);
assert.equal(validateBetaInviteCode("NOT-A-CODE", codes), false);
function createInviteCodeClient() {
const used = new Map();
return {
used,
async query(sql, params) {
if (/SELECT 1 FROM beta_invite_code_uses/i.test(sql)) {
return { rows: used.has(params[0]) ? [{ 1: 1 }] : [] };
}
if (/INSERT INTO beta_invite_code_uses/i.test(sql)) {
const [code, userId] = params;
if (used.has(code)) return { rows: [] };
used.set(code, userId);
return { rows: [{ code }] };
}
throw new Error(`Unexpected SQL: ${sql}`);
},
};
}
(async () => {
const client = createInviteCodeClient();
const firstCheck = await checkBetaInviteCodeForRegistration("a1b2c3d4e5f60718", client, codes);
assert.equal(firstCheck.ok, true);
const firstConsume = await consumeBetaInviteCode("a1b2c3d4e5f60718", 101, client, codes);
assert.equal(firstConsume.ok, true);
assert.equal(client.used.get("A1B2C3D4E5F60718"), 101);
const secondCheck = await checkBetaInviteCodeForRegistration("A1B2C3D4E5F60718", client, codes);
assert.equal(secondCheck.ok, false);
assert.equal(secondCheck.status, 409);
const secondConsume = await consumeBetaInviteCode("A1B2C3D4E5F60718", 102, client, codes);
assert.equal(secondConsume.ok, false);
assert.equal(secondConsume.status, 409);
assert.equal(client.used.get("A1B2C3D4E5F60718"), 101);
})().catch((error) => {
console.error(error);
process.exitCode = 1;
});