import { cleanup, fireEvent, render, screen } from '@testing-library/react'; import { beforeEach, describe, expect, it, vi } from 'vitest'; import QuickNote from './QuickNote'; vi.mock('@/app/(authenticated)/boards/[id]/notes/lib/actions', () => ({ createNote: vi.fn(), updateNote: vi.fn(), deleteImage: vi.fn(), saveImage: vi.fn(), })); vi.mock('next/navigation', () => ({ useRouter: vi.fn(() => ({ refresh: vi.fn(), push: vi.fn() })), })); const boards = [{ id: 1, title: 'Inbox' }]; describe('QuickNote', () => { beforeEach(() => { cleanup(); }); it('renders nothing without boards', () => { const { container } = render(); expect(container).toBeEmptyDOMElement(); }); it('opens the create modal on Alt+N', () => { render(); expect(screen.queryByText('Create note')).not.toBeInTheDocument(); fireEvent.keyDown(document, { altKey: true, code: 'KeyN' }); expect(screen.getByText('Create note')).toBeInTheDocument(); }); it('ignores Alt+N while typing in a field', () => { render( <> , ); fireEvent.keyDown(screen.getByTestId('field'), { altKey: true, code: 'KeyN' }); expect(screen.queryByText('Create note')).not.toBeInTheDocument(); }); it('ignores Alt+N inside contenteditable content', () => { render( <>
text
, ); // jsdom lacks isContentEditable; emulate the browser's inherited value. Object.defineProperty(screen.getByTestId('inner'), 'isContentEditable', { value: true, }); fireEvent.keyDown(screen.getByTestId('inner'), { altKey: true, code: 'KeyN' }); expect(screen.queryByText('Create note')).not.toBeInTheDocument(); }); });