/* @vitest-environment jsdom */ import { afterEach, describe, expect, test, vi } from 'vitest'; import { requestGenerationResultSubscribePermission, } from './wechatMiniProgramSubscribe'; describe('wechatMiniProgramSubscribe', () => { afterEach(() => { window.history.replaceState(null, '', '/'); window.wx = undefined; }); test('requests generation result subscription permission through native mini program page', async () => { const navigateTo = vi.fn((options) => { options.success?.(); window.setTimeout(() => { window.location.hash = 'wx_subscribe_result=req-1:success'; window.dispatchEvent(new HashChangeEvent('hashchange')); }, 0); }); window.history.replaceState( null, '', '/creation/puzzle?clientRuntime=wechat_mini_program', ); window.wx = { miniProgram: { navigateTo, }, }; const requested = await requestGenerationResultSubscribePermission(); expect(requested).toBe(true); expect(navigateTo).toHaveBeenCalledWith({ url: expect.stringMatching(/^\/pages\/subscribe-message\/index\?/u), success: expect.any(Function), fail: expect.any(Function), }); expect(window.location.hash).toBe(''); }); test('skips permission request outside mini program web-view', async () => { const navigateTo = vi.fn(); window.wx = { miniProgram: { navigateTo, }, }; const requested = await requestGenerationResultSubscribePermission(); expect(requested).toBe(false); expect(navigateTo).not.toHaveBeenCalled(); }); });