28 lines
1.5 KiB
JavaScript
28 lines
1.5 KiB
JavaScript
// 回归测试 #1 / #4:生产环境下,忘记密码/短信验证码绝不出现在响应里(fail-closed)。
|
|
// NODE_ENV 必须在 import config 之前设定,故用动态 import。
|
|
process.env.NODE_ENV = 'production';
|
|
process.env.EMAIL_PROVIDER = 'stub'; // 无真实邮件 provider
|
|
process.env.SMS_PROVIDER = 'stub'; // 无真实短信 provider
|
|
// ⚠ 必须显式钉死:开发机的 .env 里常有 ALLOW_STUB_LOGIN=true(内测放开手机/微信登录),
|
|
// dotenv 不覆盖已存在的 process.env,但【没设过的】变量会被 .env 灌进来 →
|
|
// 这条回归测试会被本地 .env 污染:它本想验证"没开 stub 时必须 fail-closed",
|
|
// 结果读到 allowStubLogin=true 走了另一条分支,长期红着、没人当回事。
|
|
process.env.ALLOW_STUB_LOGIN = 'false';
|
|
|
|
import { test } from 'node:test';
|
|
import assert from 'node:assert/strict';
|
|
|
|
const { sendResetCode, sendSmsCode } = await import('../src/services/altauth.js');
|
|
|
|
test('prod: 忘记密码验证码不回传(无 devCode),fail-closed', async () => {
|
|
const r = await sendResetCode('victim@example.com');
|
|
assert.ok(!('devCode' in r) || !r.devCode, `不应泄露 devCode,实际:${JSON.stringify(r)}`);
|
|
assert.equal(r.error, 'email-send-failed');
|
|
});
|
|
|
|
test('prod: 短信验证码不回传(无 devCode),fail-closed', async () => {
|
|
const r = await sendSmsCode('13800138000');
|
|
assert.ok(!('devCode' in r) || !r.devCode, `不应泄露 devCode,实际:${JSON.stringify(r)}`);
|
|
assert.equal(r.error, 'sms-send-failed');
|
|
});
|