diff --git a/apps/desktop/src/app/overlays/panel.test.tsx b/apps/desktop/src/app/overlays/panel.test.tsx new file mode 100644 index 000000000000..aed5d106e972 --- /dev/null +++ b/apps/desktop/src/app/overlays/panel.test.tsx @@ -0,0 +1,33 @@ +import { cleanup, fireEvent, render, screen } from '@testing-library/react' +import { afterEach, beforeAll, describe, expect, it, vi } from 'vitest' + +import { PanelRowMenu } from './panel' + +beforeAll(() => { + Element.prototype.hasPointerCapture ??= () => false + Element.prototype.releasePointerCapture ??= () => undefined + Element.prototype.setPointerCapture ??= () => undefined + HTMLElement.prototype.scrollIntoView ??= () => undefined +}) + +describe('PanelRowMenu', () => { + afterEach(() => { + cleanup() + }) + + it('opens its actions menu when the trigger has a tooltip', async () => { + const onSelect = vi.fn() + + render() + + const trigger = screen.getByRole('button', { name: 'Actions' }) + + fireEvent.pointerMove(trigger, { pointerType: 'mouse' }) + expect((await screen.findByRole('tooltip')).textContent).toContain('Actions') + + fireEvent.pointerDown(trigger, { button: 0, ctrlKey: false, pointerType: 'mouse' }) + fireEvent.click(await screen.findByRole('menuitem', { name: 'Rename' })) + + expect(onSelect).toHaveBeenCalledOnce() + }) +}) diff --git a/apps/desktop/src/app/overlays/panel.tsx b/apps/desktop/src/app/overlays/panel.tsx index ac11c0d50b0b..2561740724ec 100644 --- a/apps/desktop/src/app/overlays/panel.tsx +++ b/apps/desktop/src/app/overlays/panel.tsx @@ -217,8 +217,8 @@ export function PanelRowMenu({ items, label = 'Actions' }: { items: PanelMenuIte return ( - - + + - - + + {items.map(item => ( { + afterEach(() => { + cleanup() + }) + + it('opens its dialog when the trigger has a tooltip', async () => { + render() + + const trigger = screen.getByRole('button', { name: 'Import / export map' }) + + fireEvent.pointerMove(trigger, { pointerType: 'mouse' }) + expect((await screen.findByRole('tooltip')).textContent).toContain('Import / export map') + + fireEvent.click(trigger) + + const dialog = await screen.findByRole('dialog') + expect(within(dialog).getByRole('heading', { name: 'Import / export map' })).toBeTruthy() + }) +}) diff --git a/apps/desktop/src/app/starmap/share-controls.tsx b/apps/desktop/src/app/starmap/share-controls.tsx index 9db2a4f2f682..1d62bfbb454e 100644 --- a/apps/desktop/src/app/starmap/share-controls.tsx +++ b/apps/desktop/src/app/starmap/share-controls.tsx @@ -76,8 +76,8 @@ export function ShareControls({ imported = false, onImport, onResetMap, shareCod }} open={open} > - - + + - - + +