diff --git a/packages/twenty-front/src/modules/keyboard-shortcut-menu/hooks/__tests__/useKeyboardShortcutMenu.test.tsx b/packages/twenty-front/src/modules/keyboard-shortcut-menu/hooks/__tests__/useKeyboardShortcutMenu.test.tsx new file mode 100644 index 000000000..49d98de15 --- /dev/null +++ b/packages/twenty-front/src/modules/keyboard-shortcut-menu/hooks/__tests__/useKeyboardShortcutMenu.test.tsx @@ -0,0 +1,83 @@ +import { expect } from '@storybook/test'; +import { act, renderHook } from '@testing-library/react'; +import { RecoilRoot, useRecoilValue } from 'recoil'; + +import { isKeyboardShortcutMenuOpenedState } from '@/keyboard-shortcut-menu/states/isKeyboardShortcutMenuOpenedState'; +import { AppHotkeyScope } from '@/ui/utilities/hotkey/types/AppHotkeyScope'; + +import { useKeyboardShortcutMenu } from '../useKeyboardShortcutMenu'; + +const mockSetHotkeyScopeAndMemorizePreviousScope = jest.fn(); + +const mockGoBackToPreviousHotkeyScope = jest.fn(); + +jest.mock('@/ui/utilities/hotkey/hooks/usePreviousHotkeyScope', () => ({ + usePreviousHotkeyScope: () => ({ + setHotkeyScopeAndMemorizePreviousScope: + mockSetHotkeyScopeAndMemorizePreviousScope, + goBackToPreviousHotkeyScope: mockGoBackToPreviousHotkeyScope, + }), +})); + +const renderHookConfig = () => { + const { result } = renderHook( + () => { + const isKeyboardShortcutMenuOpened = useRecoilValue( + isKeyboardShortcutMenuOpenedState, + ); + return { + ...useKeyboardShortcutMenu(), + isKeyboardShortcutMenuOpened, + }; + }, + { + wrapper: RecoilRoot, + }, + ); + return { result }; +}; + +describe('useKeyboardShortcutMenu', () => { + it('should toggle keyboard shortcut menu correctly', async () => { + const { result } = renderHookConfig(); + expect(result.current.toggleKeyboardShortcutMenu).toBeDefined(); + expect(result.current.isKeyboardShortcutMenuOpened).toBe(false); + + act(() => { + result.current.toggleKeyboardShortcutMenu(); + }); + + expect(mockSetHotkeyScopeAndMemorizePreviousScope).toHaveBeenCalledWith( + AppHotkeyScope.KeyboardShortcutMenu, + ); + expect(result.current.isKeyboardShortcutMenuOpened).toBe(true); + + act(() => { + result.current.toggleKeyboardShortcutMenu(); + }); + + expect(mockSetHotkeyScopeAndMemorizePreviousScope).toHaveBeenCalledWith( + AppHotkeyScope.KeyboardShortcutMenu, + ); + expect(result.current.isKeyboardShortcutMenuOpened).toBe(false); + }); + + it('should open and close keyboard shortcut menu correctly', async () => { + const { result } = renderHookConfig(); + act(() => { + result.current.openKeyboardShortcutMenu(); + }); + + expect(mockSetHotkeyScopeAndMemorizePreviousScope).toHaveBeenCalledWith( + AppHotkeyScope.KeyboardShortcutMenu, + ); + expect(result.current.isKeyboardShortcutMenuOpened).toBe(true); + + act(() => { + result.current.closeKeyboardShortcutMenu(); + }); + + expect(mockGoBackToPreviousHotkeyScope).toHaveBeenCalled(); + expect(result.current.isKeyboardShortcutMenuOpened).toBe(false); + }); +}); diff --git a/packages/twenty-front/src/modules/navigation/hooks/__tests__/useIsSettingsPage.test.tsx b/packages/twenty-front/src/modules/navigation/hooks/__tests__/useIsSettingsPage.test.tsx new file mode 100644 index 000000000..4faaf5901 --- /dev/null +++ b/packages/twenty-front/src/modules/navigation/hooks/__tests__/useIsSettingsPage.test.tsx @@ -0,0 +1,31 @@ +import { MemoryRouter } from 'react-router-dom'; +import { renderHook } from '@testing-library/react'; + +import { useIsSettingsPage } from '../useIsSettingsPage'; + +const getWrapper = + (initialIndex: 0 | 1) => + ({ children }: { children: React.ReactNode }) => ( + + {children} + + ); + +describe('useIsSettingsPage', () => { + it('should return true for pages which has /settings/ in pathname', () => { + const { result } = renderHook(() => useIsSettingsPage(), { + wrapper: getWrapper(0), + }); + expect(result.current).toBe(true); + }); + + it('should return false for other pages which does not have /settings/ in pathname', () => { + const { result } = renderHook(() => useIsSettingsPage(), { + wrapper: getWrapper(1), + }); + expect(result.current).toBe(false); + }); +}); diff --git a/packages/twenty-front/src/modules/navigation/hooks/__tests__/useIsTasksPage.test.tsx b/packages/twenty-front/src/modules/navigation/hooks/__tests__/useIsTasksPage.test.tsx new file mode 100644 index 000000000..2ecb0b245 --- /dev/null +++ b/packages/twenty-front/src/modules/navigation/hooks/__tests__/useIsTasksPage.test.tsx @@ -0,0 +1,31 @@ +import { MemoryRouter } from 'react-router-dom'; +import { renderHook } from '@testing-library/react'; + +import { useIsTasksPage } from '../useIsTasksPage'; + +const getWrapper = + (initialIndex: 0 | 1) => + ({ children }: { children: React.ReactNode }) => ( + + {children} + + ); + +describe('useIsSettingsPage', () => { + it('should return true for pages which has /tasks in pathname', () => { + const { result } = renderHook(() => useIsTasksPage(), { + wrapper: getWrapper(1), + }); + expect(result.current).toBe(true); + }); + + it('should return false for other pages which does not have /tasks in pathname', () => { + const { result } = renderHook(() => useIsTasksPage(), { + wrapper: getWrapper(0), + }); + expect(result.current).toBe(false); + }); +});