/** @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') }) })