refactor: 移除不必要的 gopayHelperPhoneMode 逻辑,简化代码

This commit is contained in:
QLHazyCoder
2026-05-11 19:12:35 +08:00
parent dff579b78d
commit 4ed5720a26
6 changed files with 85 additions and 52 deletions
@@ -960,7 +960,7 @@ test('GPC billing auto mode only polls until completed without OTP or PIN submis
assert.equal(events.logs.some((entry) => entry.message === '步骤 7GPC 任务状态:等待自动 OTP'), true);
assert.equal(events.logs.some((entry) => /auto_otp_wait/.test(entry.message)), false);
assert.equal(events.states.some((state) => state.plusManualConfirmationMethod === 'gopay-otp'), false);
assert.equal(events.states.some((state) => state.gopayHelperTaskId === 'task_auto' && state.gopayHelperPhoneMode === 'auto' && state.gopayHelperTaskStatus === 'completed'), true);
assert.equal(events.states.some((state) => state.gopayHelperTaskId === 'task_auto' && state.gopayHelperTaskStatus === 'completed'), true);
assert.equal(events.completed[0].step, 7);
assert.equal(events.completed[0].payload.plusCheckoutSource, 'gpc-helper');
});
+2 -2
View File
@@ -505,7 +505,7 @@ test('GPC auto checkout only sends access token and API Key', async () => {
assert.equal(Object.prototype.hasOwnProperty.call(helperPayload, 'pin'), false);
const statePayload = events.find((event) => event.type === 'set-state')?.payload || {};
assert.equal(statePayload.gopayHelperTaskId, 'task_auto');
assert.equal(statePayload.gopayHelperPhoneMode, 'auto');
assert.equal(Object.prototype.hasOwnProperty.call(statePayload, 'gopayHelperPhoneMode'), false);
assert.equal(statePayload.gopayHelperTaskStatus, 'queued');
assert.equal(events.find((event) => event.type === 'complete')?.step, 6);
});
@@ -563,7 +563,7 @@ test('GPC auto checkout keeps running when balance payload omits auto mode permi
assert.equal(helperPayload.phone_mode, 'auto');
const statePayload = events.find((event) => event.type === 'set-state')?.payload || {};
assert.equal(statePayload.gopayHelperTaskId, 'task_auto_unknown_permission');
assert.equal(statePayload.gopayHelperPhoneMode, 'auto');
assert.equal(Object.prototype.hasOwnProperty.call(statePayload, 'gopayHelperPhoneMode'), false);
assert.equal(events.find((event) => event.type === 'complete')?.step, 6);
});
+72 -15
View File
@@ -310,7 +310,7 @@ return {
assert.equal(api.rowPayPalAccount.style.display, 'none');
});
test('sidepanel hides GPC auto mode selector when API Key has no auto permission', () => {
test('sidepanel keeps selected GPC auto mode when API Key has no auto permission', () => {
const bundle = [
extractFunction('normalizePlusPaymentMethod'),
extractFunction('getSelectedPlusPaymentMethod'),
@@ -354,11 +354,11 @@ return { updatePlusModeUI, selectGpcHelperPhoneMode, plusPaymentMethodCaption, r
api.updatePlusModeUI();
assert.equal(api.rows.rowGpcHelperPhoneMode.style.display, 'none');
assert.equal(api.selectGpcHelperPhoneMode.value, 'manual');
assert.equal(api.rows.rowGpcHelperPhone.style.display, '');
assert.equal(api.rows.rowGpcHelperOtpChannel.style.display, '');
assert.equal(api.rows.rowGpcHelperPin.style.display, '');
assert.equal(api.rows.rowGpcHelperPhoneMode.style.display, '');
assert.equal(api.selectGpcHelperPhoneMode.value, 'auto');
assert.equal(api.rows.rowGpcHelperPhone.style.display, 'none');
assert.equal(api.rows.rowGpcHelperOtpChannel.style.display, 'none');
assert.equal(api.rows.rowGpcHelperPin.style.display, 'none');
assert.match(api.plusPaymentMethodCaption.textContent, /手动/);
});
@@ -412,9 +412,7 @@ return {
getSelectedPhoneMode() { return selectGpcHelperPhoneMode.value; },
getPayloadPhoneMode() {
return (() => {
const selectedGpcPhoneMode = normalizeGpcHelperPhoneModeValue(selectGpcHelperPhoneMode.value);
const preserveSelectedGpcAutoMode = shouldPreserveSelectedGpcAutoMode(latestState);
return (!preserveSelectedGpcAutoMode && isGpcAutoModePermissionDenied(latestState)) ? 'manual' : selectedGpcPhoneMode;
return normalizeGpcHelperPhoneModeValue(selectGpcHelperPhoneMode.value);
})();
},
applyDataUpdated(payload) {
@@ -422,12 +420,6 @@ return {
if (payload.gopayHelperPhoneMode !== undefined) {
selectGpcHelperPhoneMode.value = normalizeGpcHelperPhoneModeValue(payload.gopayHelperPhoneMode);
}
if (payload.gopayHelperAutoModeEnabled === false
&& selectGpcHelperPhoneMode?.value === GPC_HELPER_PHONE_MODE_AUTO
&& isGpcAutoModePermissionDenied(latestState)) {
selectGpcHelperPhoneMode.value = GPC_HELPER_PHONE_MODE_MANUAL;
syncLatestState({ gopayHelperPhoneMode: GPC_HELPER_PHONE_MODE_MANUAL });
}
updatePlusModeUI();
},
rows: { rowGpcHelperPhoneMode, rowGpcHelperPhone, rowGpcHelperOtpChannel, rowGpcHelperPin },
@@ -566,6 +558,71 @@ return {
assert.deepEqual(api.getDialogs(), []);
});
test('sidepanel start check blocks unsupported GPC auto mode without rewriting selection', async () => {
const bundle = [
extractFunction('normalizeGpcAutoModePermissionValue'),
extractFunction('getGpcAutoModePermissionFromPayload'),
extractFunction('isGpcAutoModePermissionDenied'),
extractFunction('normalizeGpcRemainingUsesValue'),
extractFunction('ensureGpcApiKeyReadyForStart'),
].join('\n');
const api = new Function(`
let latestState = { gopayHelperPhoneMode: 'auto' };
const GPC_HELPER_PHONE_MODE_AUTO = 'auto';
const GPC_HELPER_PHONE_MODE_MANUAL = 'manual';
const selectGpcHelperPhoneMode = { value: 'auto' };
const dialogs = [];
let saveCalls = 0;
let updateCalls = 0;
${bundle}
function isGpcHelperCheckoutSelected() { return true; }
function getSelectedGpcHelperPhoneMode() { return selectGpcHelperPhoneMode.value; }
async function refreshGpcBalanceForStart() {
return {
gopayHelperRemainingUses: 998,
gopayHelperApiKeyStatus: 'active',
gopayHelperAutoModeEnabled: false,
gopayHelperBalancePayload: {
status: 'active',
remaining_uses: 998,
auto_mode_enabled: false,
},
};
}
async function showGpcStartBlockedDialog(message) {
dialogs.push(message);
}
function syncLatestState(nextState) {
latestState = { ...latestState, ...nextState };
}
function updatePlusModeUI() {
updateCalls += 1;
}
async function saveSettings() {
saveCalls += 1;
}
function showToast() {}
return {
ensureGpcApiKeyReadyForStart,
selectGpcHelperPhoneMode,
getDialogs: () => dialogs.slice(),
getSaveCalls: () => saveCalls,
getUpdateCalls: () => updateCalls,
getPersistedPhoneMode: () => latestState.gopayHelperPhoneMode,
};
`)();
const allowed = await api.ensureGpcApiKeyReadyForStart();
assert.equal(allowed, false);
assert.equal(api.selectGpcHelperPhoneMode.value, 'auto');
assert.equal(api.getPersistedPhoneMode(), 'auto');
assert.equal(api.getSaveCalls(), 0);
assert.equal(api.getUpdateCalls(), 0);
assert.equal(api.getDialogs().length, 1);
});
test('sidepanel resolves pending GoPay manual confirmation from DATA_UPDATED state', async () => {
const bundle = [
extractFunction('openPlusManualConfirmationDialog'),