Initial commit
This commit is contained in:
@@ -0,0 +1,61 @@
|
||||
import { mkdtemp, rm } from 'node:fs/promises'
|
||||
import { tmpdir } from 'node:os'
|
||||
import { join } from 'node:path'
|
||||
import { afterEach, describe, expect, it } from 'vitest'
|
||||
import { AuthService } from '../src/server/auth-service.js'
|
||||
import { openDatabase, type AppDatabase } from '../src/server/database.js'
|
||||
|
||||
const directories: string[] = []
|
||||
const databases: AppDatabase[] = []
|
||||
|
||||
afterEach(async () => {
|
||||
while (databases.length > 0) {
|
||||
databases.pop()?.close()
|
||||
}
|
||||
await Promise.all(
|
||||
directories.splice(0).map((directory) =>
|
||||
rm(directory, { recursive: true, force: true })
|
||||
)
|
||||
)
|
||||
})
|
||||
|
||||
describe('AuthService', () => {
|
||||
it('invalidates existing sessions when an administrator is reset', async () => {
|
||||
const directory = await mkdtemp(join(tmpdir(), 'product-issue-auth-'))
|
||||
directories.push(directory)
|
||||
const database = openDatabase(join(directory, 'database.sqlite'))
|
||||
databases.push(database)
|
||||
const auth = new AuthService(
|
||||
database,
|
||||
'test-secret-that-is-at-least-thirty-two-characters',
|
||||
60 * 60 * 1_000
|
||||
)
|
||||
await auth.createAdmin({
|
||||
email: 'admin@example.com',
|
||||
displayName: 'First name',
|
||||
password: 'correct horse battery staple'
|
||||
})
|
||||
await expect(
|
||||
auth.login('unknown@example.com', 'an incorrect password')
|
||||
).resolves.toBeUndefined()
|
||||
const session = await auth.login(
|
||||
'admin@example.com',
|
||||
'correct horse battery staple'
|
||||
)
|
||||
expect(session).toBeDefined()
|
||||
|
||||
await auth.createAdmin({
|
||||
email: 'admin@example.com',
|
||||
displayName: 'Updated name',
|
||||
password: 'a different secure password'
|
||||
})
|
||||
|
||||
expect(auth.authenticate(session?.token)).toBeUndefined()
|
||||
await expect(
|
||||
auth.login('admin@example.com', 'correct horse battery staple')
|
||||
).resolves.toBeUndefined()
|
||||
await expect(
|
||||
auth.login('admin@example.com', 'a different secure password')
|
||||
).resolves.toMatchObject({ displayName: 'Updated name' })
|
||||
})
|
||||
})
|
||||
Reference in New Issue
Block a user