Merge pull request #94 from beatz174-bit/codex/add-tests-for-useserviceworker-hook
Add tests for service worker registration hook
This commit is contained in:
@@ -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();
|
||||||
|
});
|
||||||
|
});
|
||||||
Reference in New Issue
Block a user