fix: keep GPC card mode during plus billing
This commit is contained in:
@@ -903,10 +903,23 @@ test('Plus checkout billing reports when the payment iframe exists but cannot re
|
||||
function createGpcPageHarness(states) {
|
||||
const pageStates = Array.isArray(states) ? [...states] : [];
|
||||
const clicks = [];
|
||||
const modeClicks = [];
|
||||
return {
|
||||
clicks,
|
||||
modeClicks,
|
||||
run(details) {
|
||||
const source = String(details.func || '');
|
||||
if (source.includes('cardModeButton.click')) {
|
||||
modeClicks.push({ target: details.target?.tabId });
|
||||
return [{
|
||||
result: {
|
||||
ok: true,
|
||||
clicked: true,
|
||||
isCardModeActive: false,
|
||||
activeModeText: '卡密充值 使用付费卡密扣次充值',
|
||||
},
|
||||
}];
|
||||
}
|
||||
if (source.includes('button.click')) {
|
||||
clicks.push({ target: details.target?.tabId });
|
||||
return [{ result: { clicked: true, buttonText: '开始 Plus 充值' } }];
|
||||
@@ -925,6 +938,10 @@ function createGpcPageHarness(states) {
|
||||
hasStartButton: true,
|
||||
cardKeyValue: 'AAAA1111-BBBB2222-CCCC3333',
|
||||
sessionLength: 256,
|
||||
hasCardMode: state.hasCardMode !== false,
|
||||
hasFreeMode: true,
|
||||
isCardModeActive: state.isCardModeActive !== false,
|
||||
activeModeText: state.isCardModeActive === false ? '免费充值' : '卡密充值 使用付费卡密扣次充值',
|
||||
},
|
||||
}];
|
||||
},
|
||||
@@ -1005,6 +1022,26 @@ test('GPC billing clicks start and completes after page log shows subscription d
|
||||
assert.equal(events.states.some((state) => state.gpcPageStatus === 'completed'), true);
|
||||
});
|
||||
|
||||
test('GPC billing keeps prepared page, switches card mode, and clicks start instead of reloading home', async () => {
|
||||
const { events, executor, pageHarness } = createGpcPageExecutorHarness([
|
||||
{ startButtonText: '停止当前任务', logText: '免费充值任务进行中', isCardModeActive: false },
|
||||
{ startButtonText: '开始 Plus 充值', logText: 'SYSTEM 页面已就绪', isCardModeActive: true },
|
||||
{ startButtonText: '任务进行中', logText: '开始处理任务', isCardModeActive: true },
|
||||
{ startButtonText: '开始 Plus 充值', logText: '订阅完成', hasSubscriptionDone: true, isCardModeActive: true },
|
||||
]);
|
||||
|
||||
await executor.executePlusCheckoutBilling({
|
||||
plusPaymentMethod: 'gpc-helper',
|
||||
plusCheckoutSource: 'gpc-helper',
|
||||
plusCheckoutTabId: 77,
|
||||
});
|
||||
|
||||
assert.equal(pageHarness.modeClicks.length, 1);
|
||||
assert.equal(pageHarness.clicks.length, 1);
|
||||
assert.equal(events.updates.some((event) => event.payload?.url === 'https://gpc.qlhazycoder.top/'), false);
|
||||
assert.equal(events.completed.length, 1);
|
||||
});
|
||||
|
||||
test('GPC billing restarts when start button returns without subscription done', async () => {
|
||||
const { events, executor, pageHarness } = createGpcPageExecutorHarness([
|
||||
{ startButtonText: '开始 Plus 充值', logText: 'SYSTEM 页面已就绪' },
|
||||
|
||||
@@ -873,6 +873,7 @@ function createFakeGpcPrepareDom() {
|
||||
scrollIntoView() {},
|
||||
click() {
|
||||
this.clicked = true;
|
||||
this.onClick?.();
|
||||
},
|
||||
dispatchEvent(event) {
|
||||
dispatches.push({ element: this, type: event?.type || '' });
|
||||
@@ -886,6 +887,11 @@ function createFakeGpcPrepareDom() {
|
||||
|
||||
const freeButton = createElement({ tagName: 'BUTTON', text: '免费充值' });
|
||||
const cardModeButton = createElement({ tagName: 'BUTTON', text: '卡密充值 使用付费卡密扣次充值' });
|
||||
freeButton.className = 'active';
|
||||
cardModeButton.onClick = () => {
|
||||
freeButton.className = '';
|
||||
cardModeButton.className = 'active';
|
||||
};
|
||||
const startButton = createElement({ tagName: 'BUTTON', text: '开始 Plus 充值' });
|
||||
const cardInputs = [
|
||||
createElement({ tagName: 'INPUT', placeholder: 'XXXXXXXX', className: 'card-key-seg' }),
|
||||
@@ -1004,7 +1010,7 @@ test('GPC checkout prepare opens page, fills segmented card key, and writes full
|
||||
includeSession: true,
|
||||
includeAccessToken: true,
|
||||
});
|
||||
const executeEvent = events.find((event) => event.type === 'execute-script');
|
||||
const executeEvent = events.find((event) => event.type === 'execute-script' && Array.isArray(event.args));
|
||||
assert.equal(executeEvent.target.tabId, 77);
|
||||
assert.equal(executeEvent.args[1], JSON.stringify(session));
|
||||
const statePayload = events.find((event) => event.type === 'set-state')?.payload || {};
|
||||
|
||||
Reference in New Issue
Block a user