120 lines
3.5 KiB
JavaScript
120 lines
3.5 KiB
JavaScript
import { beforeEach, describe, expect, test, vi } from 'vitest';
|
|
|
|
import subscribeMessageBridge from './index.shared.js';
|
|
|
|
const TEST_TEMPLATE_ID = 'm5z7BkkBhJGbcH0cdDeHaeRU2tViDEguP38XdrRRCdU';
|
|
|
|
const {
|
|
SUBSCRIBE_RESULT_STORAGE_KEY,
|
|
appendSubscribeResult,
|
|
buildSubscribeResultValue,
|
|
createSubscribeMessagePage,
|
|
} = subscribeMessageBridge;
|
|
|
|
describe('subscribe-message mini program bridge', () => {
|
|
beforeEach(() => {
|
|
globalThis.wx = {
|
|
requestSubscribeMessage: vi.fn(),
|
|
setStorageSync: vi.fn(),
|
|
navigateBack: vi.fn(),
|
|
};
|
|
globalThis.getCurrentPages = vi.fn(() => []);
|
|
});
|
|
|
|
test('requests subscribe message and stores result before returning', () => {
|
|
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 = createSubscribeMessagePage(
|
|
{
|
|
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('skip action notifies previous web-view', () => {
|
|
const previousPage = {
|
|
data: { webViewUrl: 'https://web.test/' },
|
|
setData: vi.fn(),
|
|
};
|
|
globalThis.getCurrentPages = vi.fn(() => [previousPage, {}]);
|
|
const page = createSubscribeMessagePage(
|
|
{
|
|
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('auto request starts subscribe popup on page load', () => {
|
|
vi.useFakeTimers();
|
|
globalThis.wx.requestSubscribeMessage.mockImplementationOnce((options) => {
|
|
options.success?.({
|
|
m5z7BkkBhJGbcH0cdDeHaeRU2tViDEguP38XdrRRCdU: 'accept',
|
|
});
|
|
});
|
|
const page = createSubscribeMessagePage(
|
|
{
|
|
setData: vi.fn(),
|
|
},
|
|
{ templateId: TEST_TEMPLATE_ID },
|
|
);
|
|
|
|
page.onLoad({ requestId: 'request-auto', autoRequest: '1' });
|
|
vi.runAllTimers();
|
|
|
|
expect(globalThis.wx.requestSubscribeMessage).toHaveBeenCalledWith({
|
|
tmplIds: [TEST_TEMPLATE_ID],
|
|
success: expect.any(Function),
|
|
fail: expect.any(Function),
|
|
});
|
|
expect(globalThis.wx.navigateBack).toHaveBeenCalled();
|
|
vi.useRealTimers();
|
|
});
|
|
|
|
test('appendSubscribeResult replaces stale subscribe hash', () => {
|
|
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',
|
|
);
|
|
});
|
|
});
|