37 lines
1.2 KiB
TypeScript
37 lines
1.2 KiB
TypeScript
|
|
import { describe, it, expect, beforeAll } from 'vitest'
|
||
|
|
import {
|
||
|
|
signExternalLunchToken,
|
||
|
|
verifyExternalLunchToken,
|
||
|
|
} from '../../src/lib/external-lunch-token'
|
||
|
|
|
||
|
|
beforeAll(() => {
|
||
|
|
process.env.NEXTAUTH_SECRET = 'test-secret-for-external-lunch-tokens'
|
||
|
|
})
|
||
|
|
|
||
|
|
describe('external lunch token', () => {
|
||
|
|
it('round-trips a payload', () => {
|
||
|
|
const exp = Math.floor(Date.now() / 1000) + 86400
|
||
|
|
const token = signExternalLunchToken({ externalId: 'cmx_test', exp })
|
||
|
|
const verified = verifyExternalLunchToken(token)
|
||
|
|
expect(verified.externalId).toBe('cmx_test')
|
||
|
|
expect(verified.exp).toBe(exp)
|
||
|
|
})
|
||
|
|
|
||
|
|
it('rejects tampered tokens', () => {
|
||
|
|
const exp = Math.floor(Date.now() / 1000) + 86400
|
||
|
|
const token = signExternalLunchToken({ externalId: 'cmx_test', exp })
|
||
|
|
const tampered = token.slice(0, -2) + 'xx'
|
||
|
|
expect(() => verifyExternalLunchToken(tampered)).toThrow(/signature/i)
|
||
|
|
})
|
||
|
|
|
||
|
|
it('rejects expired tokens', () => {
|
||
|
|
const exp = Math.floor(Date.now() / 1000) - 1
|
||
|
|
const token = signExternalLunchToken({ externalId: 'cmx_test', exp })
|
||
|
|
expect(() => verifyExternalLunchToken(token)).toThrow(/expired/i)
|
||
|
|
})
|
||
|
|
|
||
|
|
it('rejects malformed tokens', () => {
|
||
|
|
expect(() => verifyExternalLunchToken('not-a-token')).toThrow(/malformed/i)
|
||
|
|
})
|
||
|
|
})
|