修改问题

This commit is contained in:
rain
2026-07-11 11:03:45 +08:00
parent edc0a58a54
commit db397a7917
38 changed files with 1082 additions and 7994 deletions
+106 -11
View File
@@ -1,11 +1,58 @@
const assert = require('assert');
const fs = require('fs');
const path = require('path');
const vm = require('vm');
const SecurityPages = require('../public/js/security-pages.js');
const securityPagePath = path.join(__dirname, '..', 'profile-security.html');
const securityPagesPath = path.join(__dirname, '..', 'public', 'js', 'security-pages.js');
function hash(value) {
return `hashed:${value}`;
}
function run() {
function loadSecurityPages(root) {
const source = fs.readFileSync(securityPagesPath, 'utf8');
const sandbox = {
module: { exports: {} },
exports: {},
globalThis: root,
window: root
};
vm.runInNewContext(source, sandbox, { filename: securityPagesPath });
return sandbox.module.exports;
}
function createPageRoot(api) {
const handlers = {};
const document = {
addEventListener(type, handler) {
handlers[type] = handler;
},
querySelector(selector) {
return selector === '[data-security-page]' ? {} : null;
},
querySelectorAll() {
return [];
}
};
return {
document,
handlers,
GenealogyApi: { defaultClient: api },
confirm: () => true,
alert: () => {},
location: { href: '' }
};
}
function waitForAsyncAction() {
return new Promise((resolve) => setImmediate(resolve));
}
async function run() {
assert.deepStrictEqual(SecurityPages.buildPasswordChangeBody({
oldPassword: '123456',
newPassword: 'abcdef'
@@ -24,15 +71,8 @@ function run() {
validToken: 'ticket'
});
assert.deepStrictEqual(SecurityPages.buildSmsLoginBody({
phone: '13900000000',
smsCode: '123456',
validToken: ''
}), {
phone: '13900000000',
smsCode: '123456',
validToken: undefined
});
assert.strictEqual(SecurityPages.buildSmsLoginBody, undefined);
assert.doesNotMatch(fs.readFileSync(securityPagePath, 'utf8'), /data-security-form="sms-login"/);
assert.deepStrictEqual(SecurityPages.buildDeactivateBody({
password: '123456',
@@ -45,7 +85,62 @@ function run() {
assert.strictEqual(SecurityPages.isDangerConfirmed('确认注销'), true);
assert.strictEqual(SecurityPages.isDangerConfirmed('注销'), false);
const logoutRoot = createPageRoot({
logout() {
return Promise.reject(new Error('network'));
}
});
const LogoutPages = loadSecurityPages(logoutRoot);
LogoutPages.init();
logoutRoot.handlers.click({
target: {
closest(selector) {
return selector === '[data-security-logout]' ? this : null;
}
},
preventDefault() {}
});
await waitForAsyncAction();
assert.strictEqual(logoutRoot.location.href, 'index.html');
const deactivateRoot = createPageRoot({
deactivateAccount() {
return Promise.resolve();
}
});
const DeactivatePages = loadSecurityPages(deactivateRoot);
const deactivateForm = {
getAttribute(name) {
return name === 'data-security-form' ? 'deactivate' : null;
},
querySelectorAll(selector) {
if (selector !== '[name]') return [];
return [
{ name: 'password', value: '123456' },
{ name: 'reason', value: '' },
{ name: 'confirmText', value: '确认注销' }
];
},
querySelector() {
return null;
}
};
DeactivatePages.init();
deactivateRoot.handlers.submit({
target: {
closest(selector) {
return selector === '[data-security-form]' ? deactivateForm : null;
}
},
preventDefault() {}
});
await waitForAsyncAction();
assert.strictEqual(deactivateRoot.location.href, 'index.html');
console.log('security-pages tests passed');
}
run();
run().catch((error) => {
console.error(error);
process.exitCode = 1;
});