Files
digital-me-history/digital-me-backend/test/altauth-failclose.test.js
T
admin 0593ff7e62
nginx serve /uploads direct (audio speed) / patch-nginx (push) Failing after 1m34s
数字我 Digital Me:全量入库(大文件走 Git LFS)
2026-10-10 16:24:43 +08:00

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');
});