40 lines
1.2 KiB
TypeScript
40 lines
1.2 KiB
TypeScript
/** @jest-environment node */
|
|
|
|
import { NextRequest } from 'next/server'
|
|
import {
|
|
createDingtalkProfileToken,
|
|
getDingtalkProfileCookieName,
|
|
verifyDingtalkProfileToken,
|
|
} from '@/lib/dingtalk-profile-token'
|
|
|
|
describe('DingTalk profile completion token', () => {
|
|
const originalSecret = process.env.NEXTAUTH_SECRET
|
|
|
|
beforeAll(() => {
|
|
process.env.NEXTAUTH_SECRET = 'test-nextauth-secret-with-enough-entropy'
|
|
})
|
|
|
|
afterAll(() => {
|
|
if (originalSecret === undefined) {
|
|
delete process.env.NEXTAUTH_SECRET
|
|
} else {
|
|
process.env.NEXTAUTH_SECRET = originalSecret
|
|
}
|
|
})
|
|
|
|
test('短时凭证只还原签发时的用户 ID', async () => {
|
|
const token = await createDingtalkProfileToken('user-1')
|
|
|
|
await expect(verifyDingtalkProfileToken(token)).resolves.toBe('user-1')
|
|
await expect(verifyDingtalkProfileToken(`${token}tampered`)).resolves.toBeNull()
|
|
})
|
|
|
|
test('HTTPS 请求使用 Secure Cookie 名称', () => {
|
|
const request = new NextRequest('https://sc.jiansun.vip/complete-profile', {
|
|
headers: { 'x-forwarded-proto': 'https' },
|
|
})
|
|
|
|
expect(getDingtalkProfileCookieName(request)).toBe('__Secure-dingtalk-profile-token')
|
|
})
|
|
})
|