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();
});
});