c84c77616c
微信支付和订阅失败日志改为固定阶段标签 原生壳门禁拒绝支付订阅日志输出原生错误对象 同步宿主壳方案和共享决策记录
138 lines
4.3 KiB
JavaScript
138 lines
4.3 KiB
JavaScript
import path from 'node:path';
|
|
|
|
import { beforeEach, describe, expect, test, vi } from 'vitest';
|
|
|
|
import { loadCommonJsModule } from '../test-utils/loadCommonJsModule.js';
|
|
|
|
const TEST_TEMPLATE_ID = 'm5z7BkkBhJGbcH0cdDeHaeRU2tViDEguP38XdrRRCdU';
|
|
|
|
const subscribeBridgePath = path.resolve(
|
|
process.cwd(),
|
|
'miniprogram/host-bridge/subscribeMessage.js',
|
|
);
|
|
|
|
describe('subscribe-message mini program bridge', () => {
|
|
let subscribeMessageBridge;
|
|
|
|
beforeEach(() => {
|
|
vi.spyOn(console, 'error').mockImplementation(() => {});
|
|
globalThis.wx = {
|
|
requestSubscribeMessage: vi.fn(),
|
|
setStorageSync: vi.fn(),
|
|
navigateBack: vi.fn(),
|
|
};
|
|
globalThis.getCurrentPages = vi.fn(() => []);
|
|
subscribeMessageBridge = loadCommonJsModule(subscribeBridgePath);
|
|
});
|
|
|
|
test('requests subscribe message and stores result before returning', () => {
|
|
const {
|
|
SUBSCRIBE_RESULT_STORAGE_KEY,
|
|
createSubscribeMessagePageController,
|
|
} = subscribeMessageBridge;
|
|
const previousPage = {
|
|
data: { webViewUrl: 'https://web.test/#tab=create' },
|
|
setData: vi.fn(),
|
|
};
|
|
globalThis.getCurrentPages = vi.fn(() => [previousPage, {}]);
|
|
globalThis.wx.requestSubscribeMessage.mockImplementationOnce((options) => {
|
|
options.success?.({
|
|
m5z7BkkBhJGbcH0cdDeHaeRU2tViDEguP38XdrRRCdU: 'accept',
|
|
});
|
|
});
|
|
const page = createSubscribeMessagePageController(
|
|
{
|
|
setData: vi.fn(),
|
|
},
|
|
{ templateId: TEST_TEMPLATE_ID },
|
|
);
|
|
page.onLoad({ requestId: 'request-1' });
|
|
|
|
page.requestSubscribe();
|
|
|
|
expect(globalThis.wx.requestSubscribeMessage).toHaveBeenCalledWith({
|
|
tmplIds: [TEST_TEMPLATE_ID],
|
|
success: expect.any(Function),
|
|
fail: expect.any(Function),
|
|
});
|
|
expect(globalThis.wx.setStorageSync).toHaveBeenCalledWith(
|
|
SUBSCRIBE_RESULT_STORAGE_KEY,
|
|
'request-1:success',
|
|
);
|
|
expect(previousPage.setData).not.toHaveBeenCalled();
|
|
expect(globalThis.wx.navigateBack).toHaveBeenCalled();
|
|
});
|
|
|
|
test('hides requestSubscribeMessage native failure details from H5 result', () => {
|
|
const {
|
|
SUBSCRIBE_RESULT_STORAGE_KEY,
|
|
createSubscribeMessagePageController,
|
|
} = subscribeMessageBridge;
|
|
const subscribeError = {
|
|
errMsg: 'requestSubscribeMessage:fail private native detail',
|
|
};
|
|
globalThis.wx.requestSubscribeMessage.mockImplementationOnce((options) => {
|
|
options.fail?.(subscribeError);
|
|
});
|
|
const page = createSubscribeMessagePageController(
|
|
{
|
|
setData: vi.fn(),
|
|
},
|
|
{ templateId: TEST_TEMPLATE_ID },
|
|
);
|
|
page.onLoad({ requestId: 'request-fail' });
|
|
|
|
page.requestSubscribe();
|
|
|
|
expect(globalThis.wx.setStorageSync).toHaveBeenCalledWith(
|
|
SUBSCRIBE_RESULT_STORAGE_KEY,
|
|
'request-fail:skip:wechat%20subscribe%20unavailable',
|
|
);
|
|
expect(console.error).toHaveBeenCalledWith('[subscribe-message] request failed');
|
|
expect(console.error.mock.calls.flat()).not.toContain(subscribeError);
|
|
expect(globalThis.wx.navigateBack).toHaveBeenCalled();
|
|
});
|
|
|
|
test('skip action notifies previous web-view', () => {
|
|
const {
|
|
SUBSCRIBE_RESULT_STORAGE_KEY,
|
|
createSubscribeMessagePageController,
|
|
} = subscribeMessageBridge;
|
|
const previousPage = {
|
|
data: { webViewUrl: 'https://web.test/' },
|
|
setData: vi.fn(),
|
|
};
|
|
globalThis.getCurrentPages = vi.fn(() => [previousPage, {}]);
|
|
const page = createSubscribeMessagePageController(
|
|
{
|
|
setData: vi.fn(),
|
|
},
|
|
{ templateId: TEST_TEMPLATE_ID },
|
|
);
|
|
page.onLoad({ requestId: 'request-skip' });
|
|
|
|
page.handleSkip();
|
|
|
|
expect(globalThis.wx.setStorageSync).toHaveBeenCalledWith(
|
|
SUBSCRIBE_RESULT_STORAGE_KEY,
|
|
'request-skip:skip:user_skip',
|
|
);
|
|
expect(previousPage.setData).not.toHaveBeenCalled();
|
|
expect(globalThis.wx.navigateBack).toHaveBeenCalled();
|
|
});
|
|
|
|
test('appendSubscribeResult replaces stale subscribe hash', () => {
|
|
const { appendSubscribeResult, buildSubscribeResultValue } =
|
|
subscribeMessageBridge;
|
|
expect(
|
|
appendSubscribeResult(
|
|
'https://web.test/#old=1&wx_subscribe_result=old',
|
|
'req:skip',
|
|
),
|
|
).toBe('https://web.test/#old=1&wx_subscribe_result=req%3Askip');
|
|
expect(buildSubscribeResultValue('req-1', 'skip', 'user_cancel')).toBe(
|
|
'req-1:skip:user_cancel',
|
|
);
|
|
});
|
|
});
|