import { describe, it, expect } from 'vitest'; import { splitTextByKeywordLinks } from '../split-text-by-keyword-links'; const href = (v: string) => `/link/${v}`; describe('splitTextByKeywordLinks', () => { it('пустой текст → []', () => { expect(splitTextByKeywordLinks('', { gay: 'gay' }, href)).toEqual([]); }); it('без ключевых слов → одна не-ссылочная часть', () => { expect(splitTextByKeywordLinks('just text', {}, href)).toEqual([ { text: 'just text', isLink: false }, ]); }); it('размечает вхождение ключевого слова как ссылку', () => { const result = splitTextByKeywordLinks('watch gay videos', { gay: 'gay-cat' }, href); expect(result).toEqual([ { text: 'watch ', isLink: false, href: undefined }, { text: 'gay', isLink: true, href: '/link/gay-cat' }, { text: ' videos', isLink: false, href: undefined }, ]); }); it('регистронезависимо', () => { const result = splitTextByKeywordLinks('GAY', { gay: 'gay-cat' }, href); expect(result).toEqual([{ text: 'GAY', isLink: true, href: '/link/gay-cat' }]); }); it('длинное ключевое слово имеет приоритет над коротким', () => { const result = splitTextByKeywordLinks( 'gay porn here', { gay: 'a', 'gay porn': 'b' }, href, ); const link = result.find(p => p.isLink); expect(link?.text).toBe('gay porn'); expect(link?.href).toBe('/link/b'); }); it('экранирует спецсимволы regex в ключевом слове', () => { const result = splitTextByKeywordLinks('price (usd) up', { '(usd)': 'x' }, href); expect(result.find(p => p.isLink)?.text).toBe('(usd)'); }); });