lobe-chat

Форк
0
/
usePWAInstall.test.ts 
78 строк · 2.2 Кб
1
import { act, renderHook } from '@testing-library/react';
2
import { pwaInstallHandler } from 'pwa-install-handler';
3
import { afterEach, describe, expect, it, vi } from 'vitest';
4

5
import { PWA_INSTALL_ID } from '@/const/layoutTokens';
6

7
import { usePWAInstall } from './usePWAInstall';
8
import { usePlatform } from './usePlatform';
9

10
// Mocks
11
vi.mock('./usePlatform', () => ({
12
  usePlatform: vi.fn(),
13
}));
14

15
vi.mock('@/utils/env', () => ({
16
  isOnServerSide: false,
17
}));
18

19
vi.mock('pwa-install-handler', () => ({
20
  pwaInstallHandler: {
21
    addListener: vi.fn(),
22
    removeListener: vi.fn(),
23
    getEvent: vi.fn(),
24
  },
25
}));
26

27
describe('usePWAInstall', () => {
28
  afterEach(() => {
29
    vi.clearAllMocks();
30
  });
31

32
  it('should return canInstall as false when in PWA', () => {
33
    vi.mocked(usePlatform).mockReturnValue({ isSupportInstallPWA: true, isPWA: true } as any);
34

35
    const { result } = renderHook(() => usePWAInstall());
36

37
    expect(result.current.canInstall).toBe(false);
38
  });
39

40
  it('should return canInstall based on canInstall state when support PWA', () => {
41
    vi.mocked(usePlatform).mockReturnValue({ isSupportInstallPWA: true, isPWA: false } as any);
42

43
    const { result, rerender } = renderHook(() => usePWAInstall());
44

45
    expect(result.current.canInstall).toBe(false);
46

47
    act(() => {
48
      vi.mocked(pwaInstallHandler.addListener).mock.calls[0][0](true);
49
    });
50

51
    rerender();
52

53
    expect(result.current.canInstall).toBe(true);
54
  });
55

56
  it('should return canInstall as true when not support PWA', () => {
57
    vi.mocked(usePlatform).mockReturnValue({ isSupportInstallPWA: false, isPWA: false } as any);
58

59
    const { result } = renderHook(() => usePWAInstall());
60

61
    expect(result.current.canInstall).toBe(true);
62
  });
63

64
  it('should call pwa.showDialog when install is called', () => {
65
    const mockShowDialog = vi.fn();
66
    document.body.innerHTML = `<div id="${PWA_INSTALL_ID}"></div>`;
67
    const pwaElement: any = document.querySelector(`#${PWA_INSTALL_ID}`);
68
    pwaElement.showDialog = mockShowDialog;
69

70
    const { result } = renderHook(() => usePWAInstall());
71

72
    act(() => {
73
      result.current.install();
74
    });
75

76
    expect(mockShowDialog).toHaveBeenCalledWith(true);
77
  });
78
});
79

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.