import React from 'react'; import { describe, it, expect, vi } from 'vitest'; import { render, fireEvent, act } from '@testing-library/react'; import { PixelPopover } from '../../overlay-foundation/PixelPopover'; describe('PixelPopover', () => { it('does not render Content in DOM when open=false', () => { const onOpenChange = vi.fn(); const { queryByTestId } = render( hello , ); expect(queryByTestId('content')).toBeNull(); }); it('renders Content into portal (document.body) when open=true', () => { const onOpenChange = vi.fn(); const { getByTestId, container } = render( hello , ); const content = getByTestId('content'); expect(content).toBeTruthy(); // Portal escape: content is NOT a descendant of the test container root. expect(container.contains(content)).toBe(false); // But it is in the document. expect(document.body.contains(content)).toBe(true); }); it('clicking the trigger calls onOpenChange(true)', () => { const onOpenChange = vi.fn(); const { getByTestId } = render( hello , ); fireEvent.click(getByTestId('trigger')); expect(onOpenChange).toHaveBeenCalledWith(true); }); it('Escape calls onOpenChange(false) when closeOnEscape=true (default)', () => { const onOpenChange = vi.fn(); render( hello , ); act(() => { window.dispatchEvent(new KeyboardEvent('keydown', { key: 'Escape' })); }); expect(onOpenChange).toHaveBeenCalledWith(false); }); it('does NOT call onOpenChange on Escape when closeOnEscape=false', () => { const onOpenChange = vi.fn(); render( hello , ); act(() => { window.dispatchEvent(new KeyboardEvent('keydown', { key: 'Escape' })); }); expect(onOpenChange).not.toHaveBeenCalled(); }); it('clicking outside calls onOpenChange(false) when closeOnOutsideClick=true (default)', () => { const onOpenChange = vi.fn(); render(
hello
, ); const outside = document.querySelector('[data-testid="outside"]') as HTMLElement; act(() => { outside.dispatchEvent(new PointerEvent('pointerdown', { bubbles: true })); }); expect(onOpenChange).toHaveBeenCalledWith(false); }); it('does NOT close on outside click when closeOnOutsideClick=false', () => { const onOpenChange = vi.fn(); render(
hello
, ); const outside = document.querySelector('[data-testid="outside"]') as HTMLElement; act(() => { outside.dispatchEvent(new PointerEvent('pointerdown', { bubbles: true })); }); expect(onOpenChange).not.toHaveBeenCalled(); }); });