71 lines
2.4 KiB
JavaScript
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;
|
|
});
|