You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
90 lines
3.6 KiB
90 lines
3.6 KiB
import { test } from 'node:test'
|
|
import assert from 'node:assert/strict'
|
|
import { runMigrationSqlite, getOrCreateSqlite } from '@nano/sqlite'
|
|
import SessionStore from './../src/sessionStore.js'
|
|
import dayjs from 'dayjs'
|
|
|
|
import path from 'path'
|
|
import dotenv from 'dotenv'
|
|
import Session from './../src/session.js'
|
|
|
|
const userHashResult = '6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b'
|
|
const userHmacResult = 'RrnHJRqdfuq/kHK+RChE8q9T84xSj40IT/nqD5X6yenlacHj4/XbPsTAYFQ7diBxCADzrqnIE9jrtN+FHiWrbw=='
|
|
const request = {
|
|
agent: 'Mozilla/2.0 (X11; Windows x86;) Gecko/20100101 Firefox/120.0',
|
|
agentChrome: 'Mozilla/2.0 (X11; Windows x86;) Gecko/20100101 Chrome/121.0',
|
|
language: 'de,en-US;q=0.8,en;q=0.10',
|
|
ip: '1.1.1.1'
|
|
}
|
|
|
|
dotenv.config({ path: './.env.test' })
|
|
|
|
test('session / create', async () => {
|
|
const db = getOrCreateSqlite({ 'uri': ':memory:', 'create': true, 'readwrite': true })
|
|
await runMigrationSqlite(path.resolve(path.resolve(), './src/migration'), db)
|
|
|
|
const session = new Session(db)
|
|
const result = await session.create(1, request.agent, request.language, request.ip)
|
|
|
|
assert.equal(result.user, userHashResult)
|
|
})
|
|
|
|
test('session / find', async () => {
|
|
const db = getOrCreateSqlite({ 'uri': ':memory:', 'create': true, 'readwrite': true })
|
|
await runMigrationSqlite(path.resolve(path.resolve(), './src/migration'), db)
|
|
|
|
const session = new Session(db)
|
|
const result = await session.create(1, request.agent, request.language, request.ip)
|
|
|
|
const userSession = await session.get(result.user, result.token, request.agent, request.language, request.ip)
|
|
|
|
assert.equal(userSession.user, userHmacResult)
|
|
})
|
|
|
|
test('session / find / change browser', async () => {
|
|
const db = getOrCreateSqlite({ 'uri': ':memory:', 'create': true, 'readwrite': true })
|
|
await runMigrationSqlite(path.resolve(path.resolve(), './src/migration'), db)
|
|
|
|
const session = new Session(db)
|
|
const result = await session.create(1, request.agent, request.language, request.ip)
|
|
|
|
const userSession = await session.get(result.user, result.token, request.agentChrome, request.language, request.ip)
|
|
|
|
assert.equal(userSession, undefined)
|
|
})
|
|
|
|
test('session / expired', async () => {
|
|
const db = getOrCreateSqlite({ 'uri': ':memory:', 'create': true, 'readwrite': true })
|
|
await runMigrationSqlite(path.resolve(path.resolve(), './src/migration'), db)
|
|
|
|
const session = new Session(db)
|
|
const result = await session.create(1, request.agent, request.language, request.ip)
|
|
|
|
// change manually session, and set expired_at to
|
|
const sessionStore = new SessionStore(db)
|
|
await sessionStore.update(1, { 'expired_at': dayjs().subtract(60, 'minute').toISOString() })
|
|
|
|
// getting user
|
|
const user = await session.get(result.user, result.token, request.agent, request.language, request.ip)
|
|
|
|
assert.equal(user, undefined) // user not found, because expired user is deleted
|
|
})
|
|
|
|
test('session / destroy all', async () => {
|
|
const db = getOrCreateSqlite({ 'uri': ':memory:', 'create': true, 'readwrite': true })
|
|
await runMigrationSqlite(path.resolve(path.resolve(), './src/migration'), db)
|
|
|
|
const session = new Session(db)
|
|
|
|
await session.create(1, request.agent, request.language, request.ip)
|
|
await session.create(1, request.agent, request.language, request.ip)
|
|
await session.create(1, request.agent, request.language, request.ip)
|
|
await session.create(1, request.agent, request.language, request.ip)
|
|
await session.create(1, request.agent, request.language, request.ip)
|
|
|
|
await session.destroyAll(1)
|
|
const result = db.prepare("SELECT * FROM sessions").all()
|
|
|
|
assert.equal(result.length, 0)
|
|
})
|