import { render } from '@testing-library/react' import { beforeEach, describe, expect, it, vi } from 'vitest' import type { ProductMenuGroup } from './ProductMenu.types' import { ProductMenuShortcuts } from './ProductMenuShortcuts' import { SHORTCUT_IDS } from '@/state/shortcuts/registry' const { mockPush, mockUseShortcut } = vi.hoisted(() => ({ mockPush: vi.fn(), mockUseShortcut: vi.fn(), })) vi.mock('next/router', () => ({ useRouter: () => ({ push: mockPush, }), })) vi.mock('@/state/shortcuts/useShortcut', () => ({ useShortcut: mockUseShortcut, })) const menu: ProductMenuGroup[] = [ { title: 'Visible', items: [ { name: 'Tables', key: 'tables', url: '/project/ref/database/tables', shortcutId: SHORTCUT_IDS.NAV_DATABASE_TABLES, }, { name: 'Functions', key: 'functions', url: '/project/ref/database/functions', shortcutId: SHORTCUT_IDS.NAV_DATABASE_FUNCTIONS, disabled: true, }, { name: 'External', key: 'external', url: 'https://example.com', shortcutId: SHORTCUT_IDS.NAV_DATABASE_EXTENSIONS, isExternal: true, }, { name: 'No shortcut', key: 'no-shortcut', url: '/project/ref/database/triggers', }, ], }, ] describe('ProductMenuShortcuts', () => { beforeEach(() => { vi.clearAllMocks() }) it('registers visible enabled internal shortcut items', () => { render() expect(mockUseShortcut).toHaveBeenCalledTimes(1) expect(mockUseShortcut).toHaveBeenCalledWith( SHORTCUT_IDS.NAV_DATABASE_TABLES, expect.any(Function) ) }) it('navigates to the item url when the shortcut fires', () => { render() const callback = mockUseShortcut.mock.calls[0][1] callback() expect(mockPush).toHaveBeenCalledWith('/project/ref/database/tables') }) it('registers shortcut items nested under childItems', () => { render( ) expect(mockUseShortcut).toHaveBeenCalledWith( SHORTCUT_IDS.NAV_DATABASE_INDEXES, expect.any(Function) ) }) })