Files
Genarrative/server-node/src/services/smsVerificationService.test.ts
2026-04-22 22:01:07 +08:00

77 lines
2.2 KiB
TypeScript

import assert from 'node:assert/strict';
import test from 'node:test';
import pino from 'pino';
import type { AppConfig } from '../config.js';
import { createSmsVerificationService } from './smsVerificationService.js';
function createAliyunSmsConfig(): AppConfig {
return {
smsAuth: {
enabled: true,
provider: 'aliyun',
endpoint: 'dypnsapi.aliyuncs.com',
accessKeyId: 'test-access-key-id',
accessKeySecret: 'test-access-key-secret',
signName: '测试签名',
templateCode: 'SMS_100001',
templateParamKey: 'code',
countryCode: '86',
schemeName: '',
codeLength: 6,
codeType: 1,
validTimeSeconds: 300,
intervalSeconds: 60,
duplicatePolicy: 1,
caseAuthPolicy: 1,
returnVerifyCode: false,
mockVerifyCode: '123456',
maxSendPerPhonePerDay: 20,
maxSendPerIpPerHour: 30,
maxVerifyFailuresPerPhonePerHour: 12,
maxVerifyFailuresPerIpPerHour: 24,
captchaTtlSeconds: 180,
captchaTriggerVerifyFailuresPerPhone: 3,
captchaTriggerVerifyFailuresPerIp: 5,
blockPhoneFailureThreshold: 6,
blockIpFailureThreshold: 10,
blockPhoneDurationMinutes: 30,
blockIpDurationMinutes: 30,
},
} as AppConfig;
}
test('createSmsVerificationService initializes aliyun sdk client under tsx esm runtime', () => {
const service = createSmsVerificationService(
createAliyunSmsConfig(),
pino({ enabled: false }),
);
assert.equal(typeof service.sendLoginCode, 'function');
assert.equal(typeof service.verifyLoginCode, 'function');
});
test('mock sms service reports delivered tracking metadata', async () => {
const config = createAliyunSmsConfig();
config.smsAuth.provider = 'mock';
config.smsAuth.accessKeyId = '';
config.smsAuth.accessKeySecret = '';
const service = createSmsVerificationService(
config,
pino({ enabled: false }),
);
const result = await service.sendLoginCode({
e164: '+8613800138000',
nationalNumber: '13800138000',
maskedNationalNumber: '138****8000',
});
assert.equal(result.provider, 'mock');
assert.equal(result.deliveryStatus, 'delivered');
assert.equal(result.providerRequestId, 'mock-request-id');
assert.equal(result.providerOutId, 'mock-out-id');
});