49 lines
2.0 KiB
TypeScript
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();
|
|
});
|
|
});
|