32 lines
1.1 KiB
TypeScript
32 lines
1.1 KiB
TypeScript
import { describe, expect, it } from 'vitest';
|
|
import { decodeAlipayPayload, parseAlipayNotificationParams } from '@/lib/alipay/codec';
|
|
|
|
describe('Alipay codec', () => {
|
|
it('should normalize plus signs in notify sign parameter', () => {
|
|
const params = parseAlipayNotificationParams(Buffer.from('sign=abc+def&trade_no=1'), {
|
|
'content-type': 'application/x-www-form-urlencoded; charset=utf-8',
|
|
});
|
|
|
|
expect(params.sign).toBe('abc+def');
|
|
expect(params.trade_no).toBe('1');
|
|
});
|
|
|
|
it('should decode payload charset from content-type header', () => {
|
|
const body = Buffer.from('charset=utf-8&trade_status=TRADE_SUCCESS', 'utf-8');
|
|
|
|
const decoded = decodeAlipayPayload(body, {
|
|
'content-type': 'application/x-www-form-urlencoded; charset=utf-8',
|
|
});
|
|
|
|
expect(decoded).toContain('trade_status=TRADE_SUCCESS');
|
|
});
|
|
|
|
it('should fallback to body charset hint when header is missing', () => {
|
|
const body = Buffer.from('charset=gbk&trade_no=202603090001', 'utf-8');
|
|
|
|
const decoded = decodeAlipayPayload(body);
|
|
|
|
expect(decoded).toContain('trade_no=202603090001');
|
|
});
|
|
});
|