diff --git a/background/message-router.js b/background/message-router.js index c293b16..27b212a 100644 --- a/background/message-router.js +++ b/background/message-router.js @@ -151,6 +151,18 @@ if (payload.email) { await setEmailState(payload.email); } + if (payload.skipRegistrationFlow) { + const latestState = await getState(); + for (const skipStep of [3, 4, 5]) { + const status = latestState.stepStatuses?.[skipStep]; + if (status === 'running' || status === 'completed' || status === 'manual_completed') { + continue; + } + await setStepStatus(skipStep, 'skipped'); + } + await addLog('步骤 2:检测到当前已登录会话,已自动跳过步骤 3/4/5,流程将直接进入步骤 6。', 'warn'); + break; + } if (payload.skippedPasswordStep) { const latestState = await getState(); const step3Status = latestState.stepStatuses?.[3]; diff --git a/tests/background-message-router-step2-skip.test.js b/tests/background-message-router-step2-skip.test.js index e4d27eb..7cc8794 100644 --- a/tests/background-message-router-step2-skip.test.js +++ b/tests/background-message-router-step2-skip.test.js @@ -151,6 +151,25 @@ test('message router does not overwrite a completed step 3 when step 2 is replay assert.deepStrictEqual(events.stepStatuses, []); }); +test('message router skips steps 3/4/5 when step 2 detects already logged-in session', async () => { + const { router, events } = createRouter({ + state: { stepStatuses: { 3: 'pending', 4: 'completed', 5: 'pending' } }, + }); + + await router.handleStepData(2, { + email: 'user@example.com', + skipRegistrationFlow: true, + skippedPasswordStep: true, + }); + + assert.deepStrictEqual(events.emailStates, ['user@example.com']); + assert.deepStrictEqual(events.stepStatuses, [ + { step: 3, status: 'skipped' }, + { step: 5, status: 'skipped' }, + ]); + assert.equal(events.logs[0]?.message, '步骤 2:检测到当前已登录会话,已自动跳过步骤 3/4/5,流程将直接进入步骤 6。'); +}); + test('message router finalizes step 3 before marking it completed', async () => { const { router, events } = createRouter();