import * as assert from "assert"; import * as sinon from "sinon"; import {dbSessionCtor} from "."; import {dbProviderStub} from "./db-provider-stub"; import {value as createSql} from "./db-session-create_sql"; import {value as deleteSql} from "./db-session-delete_sql"; import {value as expireSql} from "./db-session-expire_sql"; import {value as updateSql} from "./db-session-update_sql"; import {value as verifySql} from "./db-session-verify_sql"; describe("dbSession", async () => { it("create a new session", async () => { const {dbProvider, dbWrite} = dbProviderStub(sinon); dbWrite.one.resolves({ id: "00055d6c5f9ef0da1ddf53e9148f622bffa112496a98abaa197106fdec4befb6", data: "{}", }); const {api} = dbSessionCtor(dbProvider); const result = await api.create(); assert(dbWrite.one.calledWith(createSql)); assert.equal(result.sessionId, "00055d6c5f9ef0da1ddf53e9148f622bffa112496a98abaa197106fdec4befb6"); assert.equal(result.data, "{}"); }); it("create fails", async () => { const {dbProvider, dbWrite} = dbProviderStub(sinon); dbWrite.one.resolves(null); const {api} = dbSessionCtor(dbProvider); try { await api.create(); assert.fail("should not get here"); } catch (e) { assert(e instanceof Error); } assert(dbWrite.one.calledWith(createSql)); }); it("verify a valid session", async () => { const {dbProvider, dbRead} = dbProviderStub(sinon); dbRead.oneOrNone.resolves({ id: "00055d6c5f9ef0da1ddf53e9148f622bffa112496a98abaa197106fdec4befb6", data: "{}", user_id: null, }); const {api} = dbSessionCtor(dbProvider); const result = await api.verify("00055d6c5f9ef0da1ddf53e9148f622bffa112496a98abaa197106fdec4befb6"); assert(dbRead.oneOrNone.calledWith(verifySql, {sessionId: "00055d6c5f9ef0da1ddf53e9148f622bffa112496a98abaa197106fdec4befb6"})); assert(result); if (result) { // if test is required because of strictNullChecks being on in tsconfig assert.equal(result.sessionId, "00055d6c5f9ef0da1ddf53e9148f622bffa112496a98abaa197106fdec4befb6"); assert.equal(result.data, "{}"); } }); it("verify an invalid session", async () => { const {dbProvider, dbRead} = dbProviderStub(sinon); dbRead.oneOrNone.resolves(null); const {api} = dbSessionCtor(dbProvider); const result = await api.verify("00055d6c5f9ef0da1ddf53e9148f622bffa112496a98abaa197106fdec4befb6"); assert(dbRead.oneOrNone.calledWith(verifySql, {sessionId: "00055d6c5f9ef0da1ddf53e9148f622bffa112496a98abaa197106fdec4befb6"})); assert.equal(result, null); }); it("update a session", async () => { const {dbProvider, dbWrite} = dbProviderStub(sinon); dbWrite.result.resolves(true); const {api} = dbSessionCtor(dbProvider); await api.update({ sessionId: "00055d6c5f9ef0da1ddf53e9148f622bffa112496a98abaa197106fdec4befb6", userId: "00055d6d-2322-43f2-affc-0145b25c5f09", data: {}, }, 10000); assert(dbWrite.result.calledWith(updateSql, { sessionId: "00055d6c5f9ef0da1ddf53e9148f622bffa112496a98abaa197106fdec4befb6", userId: "00055d6d-2322-43f2-affc-0145b25c5f09", expiryInterval: 10000, data: {}, })); }); it("delete a session", async () => { const {dbProvider, dbDelete} = dbProviderStub(sinon); dbDelete.result.resolves(true); const {api} = dbSessionCtor(dbProvider); await api.delete("00055d6c5f9ef0da1ddf53e9148f622bffa112496a98abaa197106fdec4befb6"); assert(dbDelete.result.calledWith(deleteSql, { sessionId: "00055d6c5f9ef0da1ddf53e9148f622bffa112496a98abaa197106fdec4befb6", })); }); it("expire old sessions", async () => { const {dbProvider, dbDelete} = dbProviderStub(sinon); dbDelete.result.resolves({rowCount: 1}); const {api} = dbSessionCtor(dbProvider); await api.expire(); assert(dbDelete.result.calledWith(expireSql)); }); });