import { fireEvent, render, screen, waitFor } from '@testing-library/react' import { BlockNoteContext, SuggestionMenuWrapper } from '@blocknote/react' import { describe, expect, it, vi } from 'vitest' import type { SuggestionMenuProps } from '@blocknote/react' function createEditor() { return { domElement: document.createElement('div'), } } function Menu({ items, onItemClick }: SuggestionMenuProps) { return ( ) } describe('patched BlockNote suggestion wrapper', () => { it('ignores stale query cleanup before running a suggestion item action', async () => { const closeMenu = vi.fn() const clearQuery = vi.fn(() => { throw new RangeError('Position -1322 outside of fragment') }) const onItemClick = vi.fn() const warn = vi.spyOn(console, 'warn').mockImplementation(() => {}) render( ['paragraph']} suggestionMenuComponent={Menu} onItemClick={onItemClick} /> , ) fireEvent.click(await screen.findByRole('button', { name: 'Pick suggestion' })) expect(closeMenu).toHaveBeenCalledOnce() expect(clearQuery).toHaveBeenCalledOnce() expect(onItemClick).not.toHaveBeenCalled() await waitFor(() => { expect(warn).toHaveBeenCalledWith( 'Ignored stale suggestion menu query cleanup:', expect.any(RangeError), ) }) warn.mockRestore() }) })