完成50%
This commit is contained in:
@@ -0,0 +1,108 @@
|
||||
"use strict";
|
||||
|
||||
const assert = require("assert");
|
||||
const fs = require("fs");
|
||||
const vm = require("vm");
|
||||
|
||||
const source = fs.readFileSync("static/tac/js/jiapu-tac-adapter.js", "utf8");
|
||||
const sandbox = {};
|
||||
sandbox.window = sandbox;
|
||||
sandbox.globalThis = sandbox;
|
||||
vm.runInNewContext(source, sandbox, { filename: "jiapu-tac-adapter.js" });
|
||||
|
||||
const adapter = sandbox.JiapuTacAdapter;
|
||||
assert(adapter, "TAC 供应商适配器必须暴露唯一全局 owner");
|
||||
|
||||
const context = {
|
||||
tenantId: "000000",
|
||||
clientId: "client-1",
|
||||
sceneCode: "APP_REGISTER",
|
||||
subject: "13800138000",
|
||||
providerCode: "TIANAI",
|
||||
captchaType: "SLIDER",
|
||||
};
|
||||
const mapped = adapter.normalizeChallengeResponse(
|
||||
{
|
||||
code: 200,
|
||||
msg: "操作成功",
|
||||
data: {
|
||||
required: true,
|
||||
providerCode: "TIANAI",
|
||||
captchaType: "SLIDER",
|
||||
challengeId: "challenge-1",
|
||||
payload: {
|
||||
backgroundImage: "data:image/png;base64,bg",
|
||||
templateImage: "data:image/png;base64,tpl",
|
||||
},
|
||||
expireSeconds: 300,
|
||||
},
|
||||
},
|
||||
context,
|
||||
);
|
||||
assert.strictEqual(mapped.sdkResponse.code, 200);
|
||||
assert.strictEqual(mapped.sdkResponse.data.type, "SLIDER");
|
||||
assert.strictEqual(mapped.sdkResponse.data.id, "challenge-1");
|
||||
assert.strictEqual(mapped.challenge.challengeId, "challenge-1");
|
||||
|
||||
for (const invalid of [
|
||||
{ code: 500, msg: "失败" },
|
||||
{ code: 200, data: { ...mapped.challenge, required: false, payload: mapped.sdkResponse.data } },
|
||||
{ code: 200, data: { ...mapped.challenge, providerCode: "OTHER", payload: mapped.sdkResponse.data } },
|
||||
{ code: 200, data: { ...mapped.challenge, captchaType: "SLIDER", payload: {} } },
|
||||
]) {
|
||||
assert.throws(() => adapter.normalizeChallengeResponse(invalid, context));
|
||||
}
|
||||
|
||||
const track = {
|
||||
bgImageWidth: 300,
|
||||
bgImageHeight: 180,
|
||||
templateImageWidth: 60,
|
||||
templateImageHeight: 180,
|
||||
startTime: 1000,
|
||||
stopTime: 1500,
|
||||
trackList: [
|
||||
{ x: 1, y: 2, t: 0, type: "down" },
|
||||
{ x: 80, y: 2, t: 500, type: "up" },
|
||||
],
|
||||
};
|
||||
const verifyBody = adapter.buildVerifyBody(
|
||||
{ id: "challenge-1", data: track },
|
||||
context,
|
||||
mapped.challenge,
|
||||
);
|
||||
assert.deepStrictEqual(JSON.parse(JSON.stringify(verifyBody)), {
|
||||
tenantId: "000000",
|
||||
clientId: "client-1",
|
||||
sceneCode: "APP_REGISTER",
|
||||
subject: "13800138000",
|
||||
challengeId: "challenge-1",
|
||||
providerCode: "TIANAI",
|
||||
captchaType: "SLIDER",
|
||||
payload: { track },
|
||||
});
|
||||
assert.strictEqual(Object.prototype.hasOwnProperty.call(verifyBody.payload, "id"), false);
|
||||
assert.throws(
|
||||
() => adapter.buildVerifyBody({ id: "other", data: track }, context, mapped.challenge),
|
||||
/挑战|challenge/,
|
||||
);
|
||||
assert.throws(
|
||||
() => adapter.buildVerifyBody({ id: "challenge-1", data: { ...track, trackList: [] } }, context, mapped.challenge),
|
||||
/轨迹/,
|
||||
);
|
||||
|
||||
assert.deepStrictEqual(
|
||||
JSON.parse(JSON.stringify(adapter.normalizeVerifyResponse({
|
||||
code: 200,
|
||||
data: { passed: true, validToken: "ticket-1", expireSeconds: 300 },
|
||||
}))),
|
||||
{ code: 200, data: { passed: true, validToken: "ticket-1", expireSeconds: 300 } },
|
||||
);
|
||||
for (const invalid of [
|
||||
{ code: 200, data: { passed: false, validToken: "ticket-1" } },
|
||||
{ code: 200, data: { passed: true, validToken: "" } },
|
||||
{ code: 500, data: { passed: true, validToken: "ticket-1" } },
|
||||
]) {
|
||||
assert.throws(() => adapter.normalizeVerifyResponse(invalid), /验证|票据|请求/);
|
||||
}
|
||||
|
||||
console.log("TAC-ADAPTER-RUNTIME-SMOKE PASS");
|
||||
Reference in New Issue
Block a user