完成80%

This commit is contained in:
2026-07-27 06:50:07 +08:00
parent 8475bbd19a
commit 1eae3bbef4
63 changed files with 13664 additions and 280 deletions
+27 -22
View File
@@ -13,7 +13,7 @@ const run = async () => {
"utf8",
);
const {
AUTH_TAC_SCENE,
AUTH_VERIFICATION_OPERATION,
isAuthPhone,
assertSmsCode,
normalizeCaptchaRequirement,
@@ -23,13 +23,14 @@ const run = async () => {
} = await import(toDataModuleUrl(source));
assert.deepStrictEqual(
{ ...AUTH_TAC_SCENE },
{ ...AUTH_VERIFICATION_OPERATION },
{
SMS_LOGIN: "APP_SMS_LOGIN",
REGISTER: "APP_REGISTER",
FORGOT_PASSWORD: "APP_FORGOT_PASSWORD",
PASSWORD_LOGIN: "password-login",
SMS_LOGIN: "sms-login",
REGISTER: "register",
FORGOT_PASSWORD: "forgot-password",
},
"认证 TAC 场景必须由受保护 OpenAPI 的唯一枚举拥有",
"认证动作必须由受保护 OpenAPI 的唯一枚举拥有",
);
assert.strictEqual(isAuthPhone("13800138000"), true);
@@ -47,32 +48,28 @@ const run = async () => {
required: true,
providerCode: "TIANAI",
captchaType: "SLIDER",
sceneCode: AUTH_TAC_SCENE.REGISTER,
sceneCode: "APP_REGISTER",
ttlSeconds: 300,
},
AUTH_TAC_SCENE.REGISTER,
);
assert.deepStrictEqual(requirement, {
required: true,
providerCode: "TIANAI",
captchaType: "SLIDER",
sceneCode: AUTH_TAC_SCENE.REGISTER,
sceneCode: "APP_REGISTER",
ttlSeconds: 300,
});
assert.throws(
() => normalizeCaptchaRequirement({ ...requirement, required: false }, AUTH_TAC_SCENE.REGISTER),
/未要求行为验证|票据/,
assert.deepStrictEqual(
normalizeCaptchaRequirement({ ...requirement, required: false }),
{ required: false, sceneCode: "APP_REGISTER" },
"策略关闭时必须保留服务端绑定场景并跳过 TAC 渲染",
);
assert.throws(
() => normalizeCaptchaRequirement({ ...requirement, sceneCode: AUTH_TAC_SCENE.SMS_LOGIN }, AUTH_TAC_SCENE.REGISTER),
/场景/,
);
assert.throws(
() => normalizeCaptchaRequirement({ ...requirement, providerCode: "OTHER" }, AUTH_TAC_SCENE.REGISTER),
() => normalizeCaptchaRequirement({ ...requirement, providerCode: "OTHER" }),
/TIANAI/,
);
assert.throws(
() => normalizeCaptchaRequirement({ ...requirement, captchaType: "math" }, AUTH_TAC_SCENE.REGISTER),
() => normalizeCaptchaRequirement({ ...requirement, captchaType: "math" }),
/验证码类型/,
);
@@ -81,18 +78,18 @@ const run = async () => {
baseUrl: "https://backend-api.ddxcjp.cn/",
clientId: "client-1",
tenantId: "000000",
sceneCode: AUTH_TAC_SCENE.REGISTER,
operationCode: AUTH_VERIFICATION_OPERATION.REGISTER,
subject: "13800138000",
requirement,
});
assert.deepStrictEqual(context, {
requestId: "register-1",
baseUrl: "https://backend-api.ddxcjp.cn",
challengeUrl: "https://backend-api.ddxcjp.cn/captcha/challenge",
verifyUrl: "https://backend-api.ddxcjp.cn/captcha/verify",
challengeUrl: "https://backend-api.ddxcjp.cn/genealogy/app/auth/verification/register/challenge",
verifyUrl: "https://backend-api.ddxcjp.cn/genealogy/app/auth/verification/register/verify",
clientId: "client-1",
tenantId: "000000",
sceneCode: AUTH_TAC_SCENE.REGISTER,
operationCode: AUTH_VERIFICATION_OPERATION.REGISTER,
subject: "13800138000",
providerCode: "TIANAI",
captchaType: "SLIDER",
@@ -105,6 +102,14 @@ const run = async () => {
() => createTacRenderContext({ ...context, subject: "1380013800", requirement }),
/手机号/,
);
assert.throws(
() => createTacRenderContext({ ...context, operationCode: "APP_REGISTER", requirement }),
/认证动作/,
);
assert.throws(
() => createTacRenderContext({ ...context, requirement: { ...requirement, required: false } }),
/无需行为验证/,
);
assert.deepStrictEqual(
normalizeTacSuccess(