From 209adcac71b5d0f76bbb1735930d549a3062bdc6 Mon Sep 17 00:00:00 2001 From: beatz174-bit Date: Mon, 24 Nov 2025 08:11:38 +1000 Subject: [PATCH] Add tests for service worker registration hook --- src/hooks/__tests__/useServiceWorker.test.tsx | 58 +++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 src/hooks/__tests__/useServiceWorker.test.tsx diff --git a/src/hooks/__tests__/useServiceWorker.test.tsx b/src/hooks/__tests__/useServiceWorker.test.tsx new file mode 100644 index 0000000..9b1050f --- /dev/null +++ b/src/hooks/__tests__/useServiceWorker.test.tsx @@ -0,0 +1,58 @@ +import { act, renderHook } from '@testing-library/react'; +import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'; +import { useServiceWorker } from '../useServiceWorker'; + +const flushMicrotasks = async () => { + await act(async () => { + vi.runAllTicks(); + }); +}; + +describe('useServiceWorker', () => { + beforeEach(() => { + vi.useFakeTimers(); + }); + + afterEach(() => { + vi.useRealTimers(); + vi.restoreAllMocks(); + delete (navigator as any).serviceWorker; + }); + + it('returns true when service worker registration succeeds', async () => { + const registerMock = vi.fn().mockResolvedValue(undefined); + (navigator as any).serviceWorker = { register: registerMock }; + + const { result } = renderHook(() => useServiceWorker()); + + await flushMicrotasks(); + + expect(registerMock).toHaveBeenCalledWith('/service-worker.js'); + expect(result.current).toBe(true); + }); + + it('returns false when service worker registration fails', async () => { + const registerMock = vi.fn().mockRejectedValue(new Error('registration failed')); + (navigator as any).serviceWorker = { register: registerMock }; + + const { result } = renderHook(() => useServiceWorker()); + + await flushMicrotasks(); + + expect(registerMock).toHaveBeenCalledWith('/service-worker.js'); + expect(result.current).toBe(false); + }); + + it('keeps registration false when service workers are unavailable', async () => { + expect('serviceWorker' in navigator).toBe(false); + + const registerMock = vi.fn(); + + const { result } = renderHook(() => useServiceWorker()); + + await flushMicrotasks(); + + expect(result.current).toBe(false); + expect(registerMock).not.toHaveBeenCalled(); + }); +});