The Node.js® Website
at main 2.0 kB view raw
1import { renderHook, waitFor } from '@testing-library/react'; 2 3import { useDetectOS } from '..'; 4 5const windowsUserAgent = 6 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'; 7 8const macUserAgent = 9 'Mozilla/5.0 (Macintosh; Intel Mac OS X 13_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36'; 10 11const originalNavigator = global.navigator; 12 13describe('useDetectOS', () => { 14 afterEach(() => { 15 Object.defineProperty(global, 'navigator', { 16 value: originalNavigator, 17 writable: true, 18 }); 19 }); 20 21 it('should detect WIN OS and 64 bitness', async () => { 22 Object.defineProperty(global, 'navigator', { 23 value: { 24 userAgent: windowsUserAgent, 25 userAgentData: { 26 getHighEntropyValues: jest.fn().mockResolvedValue({ bitness: 64 }), 27 }, 28 }, 29 writable: true, 30 }); 31 32 const { result } = renderHook(() => useDetectOS()); 33 34 await waitFor(() => { 35 expect(result.current).toStrictEqual({ 36 os: 'WIN', 37 bitness: 64, 38 architecture: '', 39 }); 40 }); 41 }); 42 43 it('should detect WIN OS and 64 bitness from user agent', async () => { 44 Object.defineProperty(global, 'navigator', { 45 value: { 46 userAgent: windowsUserAgent, 47 }, 48 writable: true, 49 }); 50 51 const { result } = renderHook(() => useDetectOS()); 52 53 await waitFor(() => { 54 expect(result.current).toStrictEqual({ 55 os: 'WIN', 56 bitness: 64, 57 architecture: '', 58 }); 59 }); 60 }); 61 62 it('should detect MAC OS and default bitness', async () => { 63 Object.defineProperty(global, 'navigator', { 64 value: { 65 userAgent: macUserAgent, 66 }, 67 writable: true, 68 }); 69 70 const { result } = renderHook(() => useDetectOS()); 71 72 await waitFor(() => { 73 expect(result.current).toStrictEqual({ 74 os: 'MAC', 75 bitness: 86, 76 architecture: '', 77 }); 78 }); 79 }); 80});