59 lines
2.1 KiB
JavaScript
59 lines
2.1 KiB
JavaScript
'use strict';
|
|
|
|
const assert = require('assert');
|
|
|
|
const servicePath = require.resolve('../src/services/language_service');
|
|
const stepPath = require.resolve('../src/pipeline/steps/change_language');
|
|
const languageService = require(servicePath);
|
|
const originalChangeLanguage = languageService.changeLanguageFromPage;
|
|
|
|
function makeContext(taskType) {
|
|
const dbWrites = [];
|
|
const messages = [];
|
|
const logs = [];
|
|
return {
|
|
account: { email: 'language-test@example.com' },
|
|
page: { url: () => 'https://myaccount.google.com/language' },
|
|
taskType,
|
|
results: {},
|
|
shouldStop: false,
|
|
failure: null,
|
|
log: message => logs.push(message),
|
|
dbWrite: async (...args) => { dbWrites.push(args); },
|
|
updateMessage: async (...args) => { messages.push(args); },
|
|
dbWrites,
|
|
messages,
|
|
logs,
|
|
};
|
|
}
|
|
|
|
(async () => {
|
|
try {
|
|
languageService.changeLanguageFromPage = async () => [false, '未找到可点击的保存按钮'];
|
|
delete require.cache[stepPath];
|
|
const changeLanguageStep = require(stepPath);
|
|
|
|
const combo = makeContext('aistudio_combo');
|
|
await changeLanguageStep(combo);
|
|
assert.strictEqual(combo.shouldStop, false, 'AI Studio 组合流程不应被语言切换失败中止');
|
|
assert.strictEqual(combo.failure, null);
|
|
assert.strictEqual(combo.results.changeLanguage.warning, true);
|
|
assert.strictEqual(combo.dbWrites.length, 0, '可降级警告不应污染账号失败原因');
|
|
assert(combo.logs.some(line => line.includes('继续后续流程')));
|
|
|
|
const standalone = makeContext('change_language');
|
|
await changeLanguageStep(standalone);
|
|
assert.strictEqual(standalone.shouldStop, true, '单独改语言任务失败时仍应停止并报错');
|
|
assert(standalone.failure && standalone.failure.msg.includes('改语言失败'));
|
|
assert.strictEqual(standalone.dbWrites.length, 1);
|
|
|
|
console.log('change_language_step.test.js: PASS');
|
|
} finally {
|
|
languageService.changeLanguageFromPage = originalChangeLanguage;
|
|
delete require.cache[stepPath];
|
|
}
|
|
})().catch(error => {
|
|
console.error(error && error.stack ? error.stack : error);
|
|
process.exitCode = 1;
|
|
});
|