import { expect, test } from 'bun:test' import { runMigrationSqlite, getOrCreateSqlite } from '@nano/sqlite' import SessionStore from './../src/sessionStore.ts' import dayjs from 'dayjs' import path from 'path' import dotenv from 'dotenv' import Session from './../src/session.ts' test('session / create', async () => { const db = getOrCreateSqlite({ 'name': ':memory:', 'create': true, 'readwrite': true }) await runMigrationSqlite(path.resolve(__dirname, './../src/migration'), db) dotenv.config('./../.env.test') const session = new Session(db) const result = await session.create(1, 'Mozilla/2.0 (X11; Windows x86;) Gecko/20100101 Firefox/120.0', 'de,en-US;q=0.7,en;q=0.3', '1.1.1.1') expect('3qC9SK5Z8XC0DXQXs3Fs5CbK5ZS9YOVZziNT8Ulzc2dehXh9qJNMyoVl6jGJJnbbd77/qPdID2wRDFEzqtKshg==').toEqual(result.user) }) test('session / find', async () => { const db = getOrCreateSqlite({ 'name': ':memory:', 'create': true, 'readwrite': true }) await runMigrationSqlite(path.resolve(__dirname, './../src/migration'), db) dotenv.config('./../.env.test') const session = new Session(db) const result = await session.create(1, 'Mozilla/2.0 (X11; Windows x86;) Gecko/20100101 Firefox/120.0', 'de,en-US;q=0.7,en;q=0.3', '1.1.1.1') const user = await session.get(1, 'Mozilla/2.0 (X11; Windows x86;) Gecko/20100101 Firefox/120.0', 'de,en-US;q=0.7,en;q=0.3', '1.1.1.1', result.token) expect('3qC9SK5Z8XC0DXQXs3Fs5CbK5ZS9YOVZziNT8Ulzc2dehXh9qJNMyoVl6jGJJnbbd77/qPdID2wRDFEzqtKshg==').toEqual(user.user) }) test('session / expired', async () => { const db = getOrCreateSqlite({ 'name': ':memory:', 'create': true, 'readwrite': true }) await runMigrationSqlite(path.resolve(__dirname, './../src/migration'), db) dotenv.config('./../.env.test') const session = new Session(db) const result = await session.create(1, 'Mozilla/2.0 (X11; Windows x86;) Gecko/20100101 Firefox/120.0', 'de,en-US;q=0.7,en;q=0.3', '1.1.1.1') // change manually session, and set expired_at to const sessionStore = new SessionStore(db) await sessionStore.update(1, { 'expired_at': dayjs().toISOString() }) // getting user const user = await session.get(1, 'Mozilla/2.0 (X11; Windows x86;) Gecko/20100101 Firefox/120.0', 'de,en-US;q=0.7,en;q=0.3', '1.1.1.1', result.token) expect(null).toEqual(user) // user not found, because expired user is deleted }) test('session / destroy all', async () => { const db = getOrCreateSqlite({ 'name': ':memory:', 'create': true, 'readwrite': true }) await runMigrationSqlite(path.resolve(__dirname, './../src/migration'), db) dotenv.config('./../.env.test') const session = new Session(db) await session.create(1, 'Mozilla/2.0 (X11; Windows x86;) Gecko/20100101 Firefox/120.0', 'de,en-US;q=0.7,en;q=0.3', '1.1.1.1') await session.create(1, 'Mozilla/2.0 (X11; Windows x86;) Gecko/20100101 Firefox/120.0', 'de,en-US;q=0.7,en;q=0.3', '1.1.1.2') await session.create(1, 'Mozilla/2.0 (X11; Windows x86;) Gecko/20100101 Firefox/120.0', 'de,en-US;q=0.7,en;q=0.3', '1.1.1.3') await session.create(1, 'Mozilla/2.0 (X11; Windows x86;) Gecko/20100101 Firefox/120.0', 'de,en-US;q=0.7,en;q=0.3', '1.1.1.4') await session.create(1, 'Mozilla/2.0 (X11; Windows x86;) Gecko/20100101 Firefox/120.0', 'de,en-US;q=0.7,en;q=0.3', '1.1.1.5') await session.destroyAll(1) const result = db.query("SELECT * FROM sessions").all() expect([]).toEqual(result) })