import type { ReactNode } from 'react' import { fireEvent, render, screen } from '@testing-library/react' import { describe, expect, it, vi } from 'vitest' import { MultiTrackTaskMarker } from '@/components/widgets/multitrack/MultiTrackTaskMarker' vi.mock('@/components/ui/context-menu', () => ({ ContextMenu: ({ children }: { children: ReactNode }) => <>{children}, ContextMenuTrigger: ({ children }: { children: ReactNode }) => <>{children}, ContextMenuContent: ({ children }: { children: ReactNode }) =>
{children}
, ContextMenuItem: ({ children, onClick }: { children: ReactNode; onClick?: () => void }) => ( ), })) vi.mock('@/components/ui/tooltip', () => ({ Tooltip: ({ children }: { children: ReactNode }) => <>{children}, TooltipTrigger: ({ children }: { children: ReactNode }) => <>{children}, TooltipContent: ({ children }: { children: ReactNode }) =>
{children}
, })) describe('MultiTrackTaskMarker', () => { it('selects a marker on the ruler and deletes it from the context menu', () => { const onSelect = vi.fn() const onDragStart = vi.fn() const onDelete = vi.fn() const onParentClick = vi.fn() render(
, ) const marker = screen.getByRole('button', { name: 'Task marker at frame 48' }) expect(marker.style.left).toBe('128px') expect(marker.style.color).toBe('var(--highlight)') expect(marker.getAttribute('aria-pressed')).toBe('true') expect(document.querySelector('.lucide-task-marker-icon')).not.toBeNull() expect(screen.getByText('Segment 01')).not.toBeNull() expect(screen.getByText('00:02:00')).not.toBeNull() fireEvent.mouseDown(marker) fireEvent.click(marker) expect(onSelect).toHaveBeenCalledWith('marker-1') expect(onDragStart).toHaveBeenCalledWith('marker-1', 0) expect(onParentClick).not.toHaveBeenCalled() fireEvent.click(screen.getByRole('button', { name: 'Delete task marker' })) expect(onDelete).toHaveBeenCalledWith('marker-1') }) it('uses accumulated minutes instead of an hour field in the marker time', () => { render( , ) expect(screen.getByText('60:02:00')).not.toBeNull() }) })