From a98170487be4404bb0a0ef796cabc9c559fdcbad Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Mon, 18 Jan 2021 17:23:55 +0100 Subject: [PATCH] inviteCodes: explaination added, test for lower case --- .../src/schema/resolvers/helpers/generateInviteCode.js | 3 +++ backend/src/schema/resolvers/inviteCodes.js | 2 +- backend/src/schema/resolvers/inviteCodes.spec.js | 9 +++++++++ 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/backend/src/schema/resolvers/helpers/generateInviteCode.js b/backend/src/schema/resolvers/helpers/generateInviteCode.js index 2b3713e3d..70e122d26 100644 --- a/backend/src/schema/resolvers/helpers/generateInviteCode.js +++ b/backend/src/schema/resolvers/helpers/generateInviteCode.js @@ -1,5 +1,8 @@ export default function generateInviteCode() { + // 6 random numbers in [ 0, 35 ] are 36 possible numbers (10 [0-9] + 26 [A-Z]) return Array.from({ length: 6 }, (n = Math.floor(Math.random() * 36)) => { + // n > 9: it is a letter (ASCII 65 is A) -> 10 + 55 = 65 + // else: it is a number (ASCII 48 is 0) -> 0 + 48 = 48 return String.fromCharCode(n > 9 ? n + 55 : n + 48) }).join('') } diff --git a/backend/src/schema/resolvers/inviteCodes.js b/backend/src/schema/resolvers/inviteCodes.js index ec5517909..d176b7b40 100644 --- a/backend/src/schema/resolvers/inviteCodes.js +++ b/backend/src/schema/resolvers/inviteCodes.js @@ -40,7 +40,7 @@ export default { const session = context.driver.session() const readTxResultPromise = session.readTransaction(async (txc) => { const result = await txc.run( - `MATCH (ic:InviteCode { code: $code }) + `MATCH (ic:InviteCode { code: toUpper($code) }) RETURN CASE WHEN ic.expiresAt IS NULL THEN true diff --git a/backend/src/schema/resolvers/inviteCodes.spec.js b/backend/src/schema/resolvers/inviteCodes.spec.js index f3df6ebba..e1be38376 100644 --- a/backend/src/schema/resolvers/inviteCodes.spec.js +++ b/backend/src/schema/resolvers/inviteCodes.spec.js @@ -163,6 +163,15 @@ describe('inviteCodes', () => { expect(result.data.isValidInviteCode).toBeTruthy() }) + it('validates an invite code in lower case', async () => { + const unExpiringInviteCode = inviteCodes.filter((ic) => ic.expiresAt === null)[0].code + const result = await query({ + query: isValidInviteCodeQuery, + variables: { code: unExpiringInviteCode.toLowerCase() }, + }) + expect(result.data.isValidInviteCode).toBeTruthy() + }) + it('validates an invite code with expiresAt in the future', async () => { const expiringInviteCode = inviteCodes.filter((ic) => ic.expiresAt !== null)[0].code const result = await query({