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('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', ); }); });