Files
go_bt/tests/change_language_step.test.js
T

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;
});