32 lines
1.2 KiB
TypeScript
32 lines
1.2 KiB
TypeScript
import Database from 'better-sqlite3';
|
|
import { SqliteSessionRepo } from '../src/db/session-repo';
|
|
|
|
describe('SqliteSessionRepo', () => {
|
|
it('creates and retrieves sessions within the TTL', () => {
|
|
const repo = new SqliteSessionRepo(new Database(':memory:'));
|
|
const s = repo.create('cust_1', 60_000);
|
|
expect(s.customerId).toBe('cust_1');
|
|
expect(repo.get(s.token, s.createdMs + 30_000)?.customerId).toBe('cust_1');
|
|
});
|
|
|
|
it('persists sessions across instances (same db)', () => {
|
|
const db = new Database(':memory:');
|
|
const first = new SqliteSessionRepo(db);
|
|
const s = first.create('cust_1', 60_000);
|
|
const second = new SqliteSessionRepo(db);
|
|
expect(second.get(s.token, s.createdMs + 1_000)?.customerId).toBe('cust_1');
|
|
});
|
|
|
|
it('expires sessions after the TTL', () => {
|
|
const repo = new SqliteSessionRepo(new Database(':memory:'));
|
|
const s = repo.create('cust_1', 60_000);
|
|
expect(repo.get(s.token, s.createdMs + 61_000)).toBeUndefined();
|
|
});
|
|
|
|
it('deletes sessions (logout)', () => {
|
|
const repo = new SqliteSessionRepo(new Database(':memory:'));
|
|
const s = repo.create('cust_1', 60_000);
|
|
repo.delete(s.token);
|
|
expect(repo.get(s.token, s.createdMs)).toBeUndefined();
|
|
});
|
|
});
|