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('highlights displayname', () => { const text = 'hello @displayedUser with text after'; const result = renderMarkdown(text, user('user', 'displayedUser')); expect(result).to.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.contain('@use'); expect(result).to.contain('@mail'); expect(result).to.not.contain('@mentions.com'); }); });