import { render, screen } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import { describe, it, expect } from 'vitest'; import { ActivityTooltip } from './activity-tooltip'; describe('ActivityTooltip', () => { it('shows tooltip on hover', async () => { render( , ); await userEvent.hover(screen.getByRole('button')); const tooltip = screen.getByRole('tooltip'); expect(tooltip.textContent).toContain('Git hosting on the AT Protocol.'); }); it('shows network note for shared namespaces', async () => { render( , ); await userEvent.hover(screen.getByRole('button')); const tooltip = screen.getByRole('tooltip'); expect(tooltip.textContent).toContain('Social networking on the AT Protocol.'); expect(tooltip.textContent).toContain('The specific client is unknown.'); }); it('shows outbound link when appUrl provided', async () => { render( , ); await userEvent.hover(screen.getByRole('button')); const link = screen.getByRole('link'); expect(link.getAttribute('href')).toBe('https://tangled.sh'); }); it('omits link when no appUrl', async () => { render( , ); await userEvent.hover(screen.getByRole('button')); expect(screen.queryByRole('link')).toBeNull(); }); it('hides tooltip on mouse leave', async () => { render( , ); const user = userEvent.setup(); await user.hover(screen.getByRole('button')); expect(screen.getByRole('tooltip')).toBeDefined(); await user.unhover(screen.getByRole('button')); // Wait for the 150ms delay await new Promise((r) => setTimeout(r, 200)); expect(screen.queryByRole('tooltip')).toBeNull(); }); });