Files
RedditBot/tests/dashboard/reddit-username-link.test.tsx
T

49 lines
2.0 KiB
TypeScript

// @vitest-environment jsdom
import '@testing-library/jest-dom/vitest';
import { render, screen } from '@testing-library/react';
import { describe, expect, it } from 'vitest';
import { RedditUsernameLink } from '../../apps/dashboard/src/components/reddit-username-link.js';
import { RedditUserText } from '../../apps/dashboard/src/components/reddit-user-text.js';
describe('RedditUsernameLink', () => {
it('normalizes a username and opens its Reddit profile in a new tab', () => {
render(<RedditUsernameLink username="u/example user" />);
expect(screen.getByRole('link', { name: 'u/example user' })).toHaveAttribute(
'href',
'https://www.reddit.com/u/example%20user',
);
expect(screen.getByRole('link', { name: 'u/example user' })).toHaveAttribute('target', '_blank');
expect(screen.getByRole('link', { name: 'u/example user' })).toHaveAttribute('rel', 'noreferrer');
});
it('can preserve an existing unprefixed display label', () => {
render(<RedditUsernameLink showPrefix={false} username="alice" />);
expect(screen.getByRole('link', { name: 'alice' })).toHaveAttribute(
'href',
'https://www.reddit.com/u/alice',
);
});
it('never exposes or links an internal t2 identity', () => {
const view = render(<RedditUsernameLink username="@t2_private123:reddit.com" />);
expect(view.container).not.toHaveTextContent('t2_private123');
expect(view.container.querySelector('a')).toBeNull();
expect(view.container).toHaveTextContent('Unknown Reddit user');
});
it('links username mentions embedded in activity text and redacts raw ids', () => {
render(<RedditUserText>Reply from u/alice after syncing t2_private123</RedditUserText>);
expect(screen.getByRole('link', { name: 'u/alice' })).toHaveAttribute(
'href',
'https://www.reddit.com/u/alice',
);
expect(screen.queryByText(/t2_private123/)).not.toBeInTheDocument();
expect(screen.getByText(/after syncing Reddit user/)).toBeInTheDocument();
});
});