const { generateSignatureHeaders, parseUrl } = require('./signature'); describe('signature utils', () => { test('parseUrl 应正确分离 path 和 query', () => { const result = parseUrl('https://api.example.com/api/users?id=1'); expect(result.path).toBe('/api/users'); expect(result.query).toBe('id=1'); }); test('parseUrl 无 query 时返回空 query', () => { const result = parseUrl('/api/users'); expect(result.path).toBe('/api/users'); expect(result.query).toBe(''); }); test('generateSignatureHeaders 应生成包含必要字段的请求头', () => { const headers = generateSignatureHeaders('GET', 'https://api.example.com/api/users', null); expect(headers).toHaveProperty('X-Signature'); expect(headers).toHaveProperty('X-Timestamp'); expect(headers).toHaveProperty('X-Nonce'); expect(headers['X-Signature']).toBeTruthy(); expect(Number(headers['X-Timestamp'])).toBeGreaterThan(0); }); test('相同请求参数应生成不同 nonce 的签名', () => { const headers1 = generateSignatureHeaders('POST', 'https://api.example.com/api/users', { name: 'test' }); const headers2 = generateSignatureHeaders('POST', 'https://api.example.com/api/users', { name: 'test' }); expect(headers1['X-Nonce']).not.toBe(headers2['X-Nonce']); expect(headers1['X-Signature']).not.toBe(headers2['X-Signature']); }); });