Skip to content

Commit 2e3bcff

Browse files
authored
Merge pull request #136 from niloofar-deriv/useFullScreenTests
Niloofar/ Added test cases for Footer custom hooks
2 parents cc75ae3 + 2fdca1f commit 2e3bcff

File tree

5 files changed

+128
-1
lines changed

5 files changed

+128
-1
lines changed

src/components/AppHeader/MobileMenu/index.tsx src/components/AppHeader/MobileMenu/MobileMenu.tsx

+3-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import { MenuContent } from './MenuContent';
1010
import { MenuHeader } from './MenuHeader';
1111
import { ToggleButton } from './ToggleButton';
1212

13-
export const MobileMenu = () => {
13+
const MobileMenu = () => {
1414
const [isDrawerOpen, setIsDrawerOpen] = useState(false);
1515
const { currentLang = 'EN', localize, switchLanguage } = useTranslations();
1616
const { hideModal, isModalOpenFor, showModal } = useModalManager();
@@ -62,3 +62,5 @@ export const MobileMenu = () => {
6262
</>
6363
);
6464
};
65+
66+
export default MobileMenu;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export { default as MobileMenu } from './MobileMenu';
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
import { act, renderHook } from '@testing-library/react';
2+
import { useNavigatorOnline } from '../custom-hooks';
3+
4+
describe('useNavigatorOnline', () => {
5+
it('initializes as true when browser is online', () => {
6+
const { result } = renderHook(() => useNavigatorOnline());
7+
expect(result.current).toBe(true);
8+
});
9+
10+
it('sets status to false when offline event is triggered', () => {
11+
const { result } = renderHook(() => useNavigatorOnline());
12+
13+
act(() => {
14+
window.dispatchEvent(new Event('offline'));
15+
});
16+
17+
expect(result.current).toBe(false);
18+
});
19+
20+
it('sets status to true when online event is triggered', () => {
21+
Object.defineProperty(navigator, 'onLine', {
22+
value: false,
23+
writable: true,
24+
});
25+
26+
const { result } = renderHook(() => useNavigatorOnline());
27+
28+
act(() => {
29+
window.dispatchEvent(new Event('online'));
30+
});
31+
32+
expect(result.current).toBe(true);
33+
});
34+
35+
it('removes event listeners on unmount', () => {
36+
const addSpy = jest.spyOn(window, 'addEventListener');
37+
const removeSpy = jest.spyOn(window, 'removeEventListener');
38+
const { unmount } = renderHook(() => useNavigatorOnline());
39+
40+
expect(addSpy).toHaveBeenCalledTimes(2);
41+
unmount();
42+
expect(removeSpy).toHaveBeenCalledTimes(2);
43+
});
44+
});
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
import { renderHook } from '@testing-library/react';
2+
import { useNavigatorOnline, useNetworkStatus } from '../custom-hooks';
3+
4+
jest.mock('../custom-hooks/useNavigatorOnline');
5+
6+
describe('useNetworkStatus', () => {
7+
it('initializes as online', () => {
8+
(useNavigatorOnline as jest.Mock).mockReturnValue(true);
9+
const { result } = renderHook(() => useNetworkStatus());
10+
expect(result.current).toBe('online');
11+
});
12+
13+
it('changes status to offline when network is down', () => {
14+
(useNavigatorOnline as jest.Mock).mockReturnValue(false);
15+
const { result } = renderHook(() => useNetworkStatus());
16+
expect(result.current).toBe('offline');
17+
});
18+
19+
it('reacts to changes in network status', () => {
20+
(useNavigatorOnline as jest.Mock).mockReturnValue(true);
21+
const { rerender, result } = renderHook(() => useNetworkStatus());
22+
expect(result.current).toBe('online');
23+
24+
// Simulating network going offline
25+
(useNavigatorOnline as jest.Mock).mockReturnValue(false);
26+
rerender();
27+
expect(result.current).toBe('offline');
28+
29+
// Simulating network coming back online
30+
(useNavigatorOnline as jest.Mock).mockReturnValue(true);
31+
rerender();
32+
expect(result.current).toBe('online');
33+
});
34+
});
+46
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
import { act, renderHook } from '@testing-library/react';
2+
import { useSyncedTime } from '../custom-hooks';
3+
4+
const initialTime = Math.floor(Date.now() / 1000);
5+
6+
jest.mock('@deriv-com/api-hooks', () => ({
7+
useTime: jest.fn(() => ({ data: initialTime })),
8+
}));
9+
10+
describe('useSyncedTime', () => {
11+
beforeAll(() => {
12+
jest.useFakeTimers();
13+
});
14+
15+
it('initializes with the current date', async () => {
16+
const { result } = renderHook(() => useSyncedTime());
17+
expect(result.current).toBe(initialTime);
18+
});
19+
20+
it('updates server time every second', () => {
21+
const { result } = renderHook(() => useSyncedTime());
22+
23+
act(() => {
24+
jest.advanceTimersByTime(1000);
25+
});
26+
27+
expect(result.current).toBe(initialTime + 1);
28+
});
29+
30+
it('stops updating after unmount', () => {
31+
const { result, unmount } = renderHook(() => useSyncedTime());
32+
33+
act(() => {
34+
jest.advanceTimersByTime(3000);
35+
});
36+
37+
expect(result.current).toBe(initialTime + 3);
38+
unmount();
39+
40+
act(() => {
41+
jest.advanceTimersByTime(1000);
42+
});
43+
44+
expect(result.current).toBe(initialTime + 3);
45+
});
46+
});

0 commit comments

Comments
 (0)