diff --git a/server/package.json b/server/package.json index ebba413..93bd0fc 100644 --- a/server/package.json +++ b/server/package.json @@ -18,7 +18,8 @@ "pg": "^8.7.3", "redis": "^4.2.0", "reflect-metadata": "^0.1.13", - "typeorm": "^0.3.7" + "typeorm": "^0.3.7", + "uuid": "^8.3.2" }, "devDependencies": { "@types/bcrypt": "^5.0.0", @@ -26,6 +27,7 @@ "@types/jest": "^28.1.4", "@types/jsonwebtoken": "^8.5.8", "@types/node": "^18.0.3", + "@types/uuid": "^8.3.4", "concurrently": "^7.2.2", "jest": "^28.1.2", "nodemon": "^2.0.19", diff --git a/server/src/repository/__tests__/session.repository.spec.ts b/server/src/repository/__tests__/session.repository.spec.ts new file mode 100644 index 0000000..c33c40a --- /dev/null +++ b/server/src/repository/__tests__/session.repository.spec.ts @@ -0,0 +1,42 @@ +import { RedisConnection } from "../../infra/redis"; +import { sessionRepository } from "../session.repository"; +import { v4 as uuid } from "uuid"; +describe("sessionRepository", () => { + beforeAll(async () => { + await RedisConnection.connect(); + }); + afterAll(async () => { + await RedisConnection.disconnect(); + }); + + describe("saveSession", () => { + it("should save a new session on redis", async () => { + const sessionToken = uuid(); + + expect(await sessionRepository.saveSession(sessionToken)).toBeTruthy(); + expect(await sessionRepository.sessionExists(sessionToken)).toBeTruthy(); + }); + }); + describe("sessionExists", () => { + it("should return true if session exists", async () => { + const sessionToken = uuid(); + + expect(await sessionRepository.saveSession(sessionToken)).toBeTruthy(); + expect(await sessionRepository.sessionExists(sessionToken)).toBeTruthy(); + }); + + it("should return false if session does not exists", async () => { + const sessionToken = uuid(); + expect(await sessionRepository.sessionExists(sessionToken)).toBeFalsy(); + }); + }); + describe("deleteByToken", () => { + it("should remove session from redis", async () => { + const sessionToken = uuid(); + + await sessionRepository.saveSession(sessionToken); + expect(await sessionRepository.deleteSession(sessionToken)).toBeTruthy(); + expect(await sessionRepository.sessionExists(sessionToken)).toBeFalsy(); + }); + }); +}); diff --git a/server/src/repository/session.repository.ts b/server/src/repository/session.repository.ts index 159253d..57aca68 100644 --- a/server/src/repository/session.repository.ts +++ b/server/src/repository/session.repository.ts @@ -3,13 +3,13 @@ import { RedisConnection } from "../infra/redis" const sessionExists = async (jwt: string): Promise => { const result = await RedisConnection.get(jwt) - return result == "valid" + return result === "EXIST" } const saveSession = async (jwt: string): Promise => { - const result = await RedisConnection.set(jwt, 'valid') + const result = await RedisConnection.set(jwt, 'EXIST') - return result == "valid" + return result === "OK" } const deleteSession = async (jwt: string): Promise => { diff --git a/server/yarn.lock b/server/yarn.lock index d073038..389afde 100644 --- a/server/yarn.lock +++ b/server/yarn.lock @@ -794,6 +794,11 @@ resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.1.tgz#20f18294f797f2209b5f65c8e3b5c8e8261d127c" integrity sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw== +"@types/uuid@^8.3.4": + version "8.3.4" + resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-8.3.4.tgz#bd86a43617df0594787d38b735f55c805becf1bc" + integrity sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw== + "@types/yargs-parser@*": version "21.0.0" resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.0.tgz#0c60e537fa790f5f9472ed2776c2b71ec117351b"