feat: 增强注册方法管理,支持动态解析步骤标题及相关测试

This commit is contained in:
QLHazyCoder
2026-05-04 15:06:19 +08:00
parent 5d70d2b681
commit 5f7450acf5
8 changed files with 178 additions and 32 deletions
@@ -95,3 +95,43 @@ return {
assert.equal(api.logs.some((entry) => /固定为邮箱注册/.test(entry.message)), true);
});
test('background step definitions resolve titles from the frozen signup method', () => {
const api = new Function(`
const captured = [];
const self = {
MultiPageStepDefinitions: {
getSteps(options) {
captured.push(options);
return [{
id: 2,
key: 'submit-signup-email',
title: options.signupMethod === 'phone' ? '注册并输入手机号' : '注册并输入邮箱',
}];
},
},
};
${extractFunction('isPlusModeState')}
${extractFunction('normalizePlusPaymentMethod')}
${extractFunction('normalizeSignupMethod')}
${extractFunction('getSignupMethodForStepDefinitions')}
${extractFunction('getStepDefinitionsForState')}
return {
getCaptured: () => captured.slice(),
getStepDefinitionsForState,
};
`)();
const steps = api.getStepDefinitionsForState({
plusModeEnabled: true,
plusPaymentMethod: 'gopay',
signupMethod: 'email',
resolvedSignupMethod: 'phone',
});
assert.deepEqual(api.getCaptured(), [{
plusModeEnabled: true,
plusPaymentMethod: 'gopay',
signupMethod: 'phone',
}]);
assert.equal(steps[0].title, '注册并输入手机号');
});
+21 -1
View File
@@ -34,6 +34,7 @@ function extractFunction(name) {
test('sidepanel step definitions keep the selected Plus payment method', () => {
const bundle = [
extractFunction('normalizeSignupMethod'),
extractFunction('normalizePlusPaymentMethod'),
extractFunction('getStepDefinitionsForMode'),
extractFunction('rebuildStepDefinitionState'),
@@ -52,6 +53,8 @@ const window = {
};
let currentPlusModeEnabled = false;
let currentPlusPaymentMethod = 'paypal';
let currentSignupMethod = 'email';
const DEFAULT_SIGNUP_METHOD = 'email';
let stepDefinitions = [];
let STEP_IDS = [];
let STEP_DEFAULT_STATUSES = {};
@@ -74,11 +77,28 @@ return {
assert.deepEqual(api.getStepIds(), [7]);
assert.deepEqual(api.calls[0], {
type: 'getSteps',
options: { plusModeEnabled: true, plusPaymentMethod: 'gopay' },
options: { plusModeEnabled: true, plusPaymentMethod: 'gopay', signupMethod: 'email' },
});
assert.deepEqual(api.calls[1], { type: 'render', stepIds: [7] });
});
test('sidepanel normalizeSignupMethod stays independent from signup constants during bootstrap', () => {
const source = extractFunction('normalizeSignupMethod');
assert.doesNotMatch(source, /SIGNUP_METHOD_(PHONE|EMAIL)/);
});
test('sidepanel signup method UI syncs shared step definitions with the selected signup method', () => {
const source = extractFunction('updateSignupMethodUI');
assert.match(source, /syncStepDefinitionsForMode\(/);
assert.match(source, /signupMethod:\s*selectedMethod/);
});
test('sidepanel applies restored signup method when rebuilding shared step definitions on load', () => {
const source = extractFunction('applySettingsState');
assert.match(source, /syncStepDefinitionsForMode\(Boolean\(state\?\.plusModeEnabled\),\s*\{/);
assert.match(source, /signupMethod:\s*state\?\.signupMethod/);
});
test('sidepanel Plus UI hides PayPal account selector while GoPay is selected', () => {
const bundle = [
extractFunction('normalizePlusPaymentMethod'),
+6
View File
@@ -8,7 +8,9 @@ test('step definitions module exposes ordered normal and Plus step metadata', ()
const api = new Function('self', `${source}; return self.MultiPageStepDefinitions;`)(globalScope);
const steps = api.getSteps();
const phoneSteps = api.getSteps({ signupMethod: 'phone' });
const plusSteps = api.getSteps({ plusModeEnabled: true });
const plusPhoneSteps = api.getSteps({ plusModeEnabled: true, signupMethod: 'phone' });
const goPaySteps = api.getSteps({ plusModeEnabled: true, plusPaymentMethod: 'gopay' });
assert.equal(Array.isArray(steps), true);
@@ -34,6 +36,8 @@ test('step definitions module exposes ordered normal and Plus step metadata', ()
);
assert.equal(steps[0].title, '打开 ChatGPT 官网');
assert.equal(steps[5].title, '清理登录 Cookies');
assert.equal(phoneSteps[1].title, '注册并输入手机号');
assert.equal(phoneSteps[3].title, '获取手机验证码');
assert.deepStrictEqual(
plusSteps.map((step) => step.key),
@@ -56,6 +60,8 @@ test('step definitions module exposes ordered normal and Plus step metadata', ()
assert.equal(plusSteps.some((step) => step.key === 'clear-login-cookies'), false);
assert.equal(plusSteps.some((step) => step.key === 'fetch-login-code'), true);
assert.equal(plusSteps.find((step) => step.key === 'paypal-approve')?.title, 'PayPal 登录与授权');
assert.equal(plusPhoneSteps[1].title, '注册并输入手机号');
assert.equal(plusPhoneSteps[3].title, '获取手机验证码');
assert.equal(goPaySteps.some((step) => step.key === 'paypal-approve'), false);
assert.equal(api.getStepById(8, { plusModeEnabled: true, plusPaymentMethod: 'gopay' }), null);
assert.equal(api.getPlusPaymentStepTitle({ plusModeEnabled: true, plusPaymentMethod: 'gopay' }), '');