import { useRef } from 'react'; import { act, cleanup, fireEvent } from '@testing-library/react'; import { render } from '../../../utils/theme-render-wrapper'; import { useResizeObserverEffect, useToggleOnFocus, useWindowEventListener } from '.'; beforeEach(() => jest.useFakeTimers()); afterEach(() => { jest.useRealTimers(); cleanup(); }); const text = 'Lorem ipsum dolor sit amet'; const ToggleOnFocusTestComponent = ({ initialState }: { initialState?: boolean }) => { const { currentState, eventHandlers } = useToggleOnFocus(initialState); return ( ); }; const ResizeObserverEffectTestComponent = ({ callback }: { callback: () => void }) => { const ref = useRef(null); useResizeObserverEffect(callback, ref?.current); return
{text}
; }; const WindowEventListenerTestComponent = ({ eventListener }: { eventListener: (event?: Event) => void; }) => { useWindowEventListener(['click'], eventListener); return ; }; describe('Check "utils/common/hooks"', () => { describe('useToggleOnFocus', () => { it(`check default`, () => { const { container } = render(); expect(container.textContent).toBe('blurred'); }); it(`check focused`, () => { const setTimeoutSpy = jest.spyOn(global, 'setTimeout'); act(() => { const { queryByRole } = render(); const buttonEl = queryByRole('button'); expect(buttonEl?.textContent).toBe('blurred'); buttonEl && fireEvent.focus(buttonEl); jest.runAllTimers(); expect(buttonEl?.textContent).toBe('focused'); }); expect(setTimeoutSpy).toHaveBeenCalledTimes(1); setTimeoutSpy.mockClear(); }); it(`check blurred`, () => { const setTimeoutSpy = jest.spyOn(global, 'setTimeout'); act(() => { const { queryByRole } = render(); const buttonEl = queryByRole('button'); expect(buttonEl?.textContent).toBe('focused'); buttonEl && fireEvent.blur(buttonEl); jest.runAllTimers(); expect(buttonEl?.textContent).toBe('blurred'); }); expect(setTimeoutSpy).toHaveBeenCalledTimes(2); setTimeoutSpy.mockClear(); }); }); describe('useResizeObserverEffect', () => { it(`check with ResizeObserver mock`, () => { const callback = jest.fn(); render(); expect(callback).toHaveBeenCalledTimes(1); }); }); describe('useWindowEventListener', () => { it(`check with click event`, () => { const eventListener = jest.fn(); const { container } = render( ); container.click(); expect(eventListener).toHaveBeenCalledTimes(1); }); }); });