gongxiangp2/lib/__tests__/dingtalk-profile-token.test.ts

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')
})
})