89 lines
2.6 KiB
JavaScript
89 lines
2.6 KiB
JavaScript
|
|
const assert = require('assert')
|
||
|
|
const fs = require('fs')
|
||
|
|
const path = require('path')
|
||
|
|
const vm = require('vm')
|
||
|
|
|
||
|
|
function loadModule(filePath, stubs = {}) {
|
||
|
|
const source = fs.readFileSync(filePath, 'utf8')
|
||
|
|
const exportedNames = []
|
||
|
|
const transformed = source
|
||
|
|
.replace(/^import .*$/gm, '')
|
||
|
|
.replace(/export function\s+([A-Za-z0-9_]+)\s*\(/g, (_, name) => {
|
||
|
|
exportedNames.push(name)
|
||
|
|
return `function ${name}(`
|
||
|
|
})
|
||
|
|
.replace(/export default\s+/g, 'module.exports = ')
|
||
|
|
|
||
|
|
const sandbox = {
|
||
|
|
module: { exports: {} },
|
||
|
|
exports: {},
|
||
|
|
require,
|
||
|
|
console,
|
||
|
|
process: {
|
||
|
|
env: {
|
||
|
|
VUE_APP_PASSWORD_TRANSFER_KEY: '1234567890abcdef'
|
||
|
|
}
|
||
|
|
},
|
||
|
|
...stubs
|
||
|
|
}
|
||
|
|
|
||
|
|
vm.runInNewContext(
|
||
|
|
`${transformed}\nmodule.exports = { ${exportedNames.join(', ')} };`,
|
||
|
|
sandbox,
|
||
|
|
{ filename: filePath }
|
||
|
|
)
|
||
|
|
|
||
|
|
return sandbox.module.exports
|
||
|
|
}
|
||
|
|
|
||
|
|
const passwordTransferModule = loadModule(
|
||
|
|
path.resolve(__dirname, '../src/utils/passwordTransfer.js'),
|
||
|
|
{ CryptoJS: require('crypto-js') }
|
||
|
|
)
|
||
|
|
|
||
|
|
const { encryptPasswordFields } = passwordTransferModule
|
||
|
|
|
||
|
|
const encrypted = encryptPasswordFields(
|
||
|
|
{ password: 'admin123', code: '8888' },
|
||
|
|
['password'],
|
||
|
|
'1234567890abcdef'
|
||
|
|
)
|
||
|
|
|
||
|
|
assert.notStrictEqual(encrypted.password, 'admin123')
|
||
|
|
assert.strictEqual(encrypted.code, '8888')
|
||
|
|
|
||
|
|
const request = config => config
|
||
|
|
const loginModule = loadModule(
|
||
|
|
path.resolve(__dirname, '../src/api/login.js'),
|
||
|
|
{ request, encryptPasswordFields }
|
||
|
|
)
|
||
|
|
|
||
|
|
const loginConfig = loginModule.login('admin', 'admin123', '8888', 'uuid-1')
|
||
|
|
assert.notStrictEqual(loginConfig.data.password, 'admin123')
|
||
|
|
assert.strictEqual(loginConfig.data.username, 'admin')
|
||
|
|
|
||
|
|
const registerConfig = loginModule.register({ username: 'u1', password: 'p1', confirmPassword: 'p1', code: '8888' })
|
||
|
|
assert.notStrictEqual(registerConfig.data.password, 'p1')
|
||
|
|
assert.strictEqual(registerConfig.data.confirmPassword, 'p1')
|
||
|
|
|
||
|
|
const userModule = loadModule(
|
||
|
|
path.resolve(__dirname, '../src/api/system/user.js'),
|
||
|
|
{
|
||
|
|
request,
|
||
|
|
encryptPasswordFields,
|
||
|
|
parseStrEmpty: value => value
|
||
|
|
}
|
||
|
|
)
|
||
|
|
|
||
|
|
const updatePwdConfig = userModule.updateUserPwd('oldPwd', 'newPwd')
|
||
|
|
assert.notStrictEqual(updatePwdConfig.data.oldPassword, 'oldPwd')
|
||
|
|
assert.notStrictEqual(updatePwdConfig.data.newPassword, 'newPwd')
|
||
|
|
|
||
|
|
const addUserConfig = userModule.addUser({ userName: 'u1', password: 'initPwd', nickName: 'n1' })
|
||
|
|
assert.notStrictEqual(addUserConfig.data.password, 'initPwd')
|
||
|
|
|
||
|
|
const resetUserPwdConfig = userModule.resetUserPwd(2, 'resetPwd')
|
||
|
|
assert.notStrictEqual(resetUserPwdConfig.data.password, 'resetPwd')
|
||
|
|
|
||
|
|
console.log('password-transfer-api test passed')
|