import type { ReactNode } from 'react' import { fireEvent, render, screen } from '@testing-library/react' import { describe, expect, it, vi } from 'vitest' import { TitleTooltip } from './title-tooltip' vi.mock('@langgenius/dify-ui/tooltip', () => ({ Tooltip: ({ children }: { children: ReactNode }) => (
{children}
), TooltipTrigger: ({ render }: { render: ReactNode }) => <>{render}, TooltipContent: ({ children }: { children: ReactNode }) => (
{children}
), })) function setElementSize(element: HTMLElement, { clientWidth, scrollWidth, }: { clientWidth: number scrollWidth: number }) { Object.defineProperties(element, { clientWidth: { configurable: true, value: clientWidth }, scrollWidth: { configurable: true, value: scrollWidth }, }) } describe('TitleTooltip', () => { it('does not show duplicate content when the trigger is not truncated', () => { render(

11

, ) fireEvent.pointerOver(screen.getByText('11')) expect(screen.queryByRole('tooltip')).not.toBeInTheDocument() }) it('shows duplicate content when the trigger is truncated', () => { render(

Long deployment name

, ) const trigger = screen.getByText('Long deployment name') setElementSize(trigger, { clientWidth: 80, scrollWidth: 160 }) fireEvent.pointerOver(trigger) expect(screen.getByRole('tooltip')).toHaveTextContent('Long deployment name') }) it('shows content that adds information beyond the trigger text', () => { render( , ) fireEvent.pointerOver(screen.getByRole('button', { name: 'Deploy' })) expect(screen.getByRole('tooltip')).toHaveTextContent('Disabled until an initial release exists') }) })