import { describe, expect, test } from 'vitest';
import renderMarkdown from '@/libs/renderWithMentions';
describe('renderWithMentions', () => {
function user (name, displayName) {
return { auth: { local: { username: name } }, profile: { name: displayName } };
}
test('returns null if no text supplied', () => {
const result = renderMarkdown('', user('a', 'b'));
expect(result).to.be.null;
});
test('does not highlight displayname to prevent impersonation', () => {
const text = 'hello @displayedUser with text after';
const result = renderMarkdown(text, user('user', 'displayedUser'));
expect(result).to.contain('@displayedUser');
expect(result).to.not.contain('@displayedUser');
});
test('highlights username', () => {
const text = 'hello @user';
const result = renderMarkdown(text, user('user', 'displayedUser'));
expect(result).to.contain('@user');
});
test('highlights username sandwiched with underscores', () => {
const text = 'hello @_user_';
const result = renderMarkdown(text, user('_user_', 'displayedUser'));
expect(result).to.contain('@_user_');
expect(result).to.not.contain('');
expect(result).to.not.contain('');
});
test('highlights username sandwiched with double underscores', () => {
const text = 'hello @__user__';
const result = renderMarkdown(text, user('diffUser', 'displayDiffUser'));
expect(result).to.contain('@__user__');
expect(result).to.not.contain('');
expect(result).to.not.contain('');
});
test('not highlights any email', () => {
const result = renderMarkdown('hello@example.com', user('example', 'displayedUser'));
expect(result).to.not.contain('@example');
});
test('complex highlight', () => {
const plainText = 'a bit more @mentions to @use my@mentions.com broken @mail.com';
const result = renderMarkdown(plainText, user('use', 'mentions'));
expect(result).to.contain('@mentions');
expect(result).to.not.contain('@mentions');
expect(result).to.contain('@use');
expect(result).to.contain('@mail');
expect(result).to.not.contain('@mentions.com');
});
});