boredgame/src/lib/server/api/tests/tokens.service.test.ts
2024-09-13 17:21:22 -07:00

45 lines
1.8 KiB
TypeScript

import 'reflect-metadata'
import { Argon2id } from 'oslo/password'
import { container } from 'tsyringe'
import { afterAll, beforeAll, describe, expect, expectTypeOf, it, vi } from 'vitest'
import { HashingService } from '../services/hashing.service'
import { TokensService } from '../services/tokens.service'
describe('TokensService', () => {
let service: TokensService
const hashingService = vi.mocked(HashingService.prototype)
beforeAll(() => {
service = container.register<HashingService>(HashingService, { useValue: hashingService }).resolve(TokensService)
})
afterAll(() => {
vi.resetAllMocks()
})
describe('Generate Token', () => {
it('should resolve', async () => {
const hashedPassword = await new Argon2id().hash('111')
hashingService.hash = vi.fn().mockResolvedValue(hashedPassword)
const spy_hashingService_hash = vi.spyOn(hashingService, 'hash')
const spy_hashingService_verify = vi.spyOn(hashingService, 'verify')
await expectTypeOf(service.createHashedToken('111')).resolves.toBeString()
expect(spy_hashingService_hash).toBeCalledTimes(1)
expect(spy_hashingService_verify).toBeCalledTimes(0)
})
it('should generate a token that is verifiable', async () => {
hashingService.hash = vi.fn().mockResolvedValue(await new Argon2id().hash('111'))
hashingService.verify = vi.fn().mockResolvedValue(true)
const spy_hashingService_hash = vi.spyOn(hashingService, 'hash')
const spy_hashingService_verify = vi.spyOn(hashingService, 'verify')
const token = await service.createHashedToken('111')
expect(token).not.toBeNaN()
expect(token).not.toBeUndefined()
expect(token).not.toBeNull()
const verifiable = await service.verifyHashedToken(token, '111')
expect(verifiable).toBeTruthy()
expect(spy_hashingService_hash).toBeCalledTimes(1)
expect(spy_hashingService_verify).toBeCalledTimes(1)
})
})
})