import { assert } from 'chai' import { linkifyAndClean } from '@/utils/inputs' describe('linkifyAndClean (clean input remains unchanged)', () => { const testInputs = [ 'just a text\nfor "test"', 'link: <a href="http://www.example.com">example</a>', 'link: <a href="http://www.example.com" target="_blank">example</a>', ] testInputs.map((testInput) => { it(`it returns unmodified input: '${testInput}'`, () => { assert.equal(linkifyAndClean(testInput), testInput) }) }) }) describe('linkifyAndClean (URL is linkified)', () => { it('it returns URL as link with target blank', () => { assert.equal( linkifyAndClean('link: http://www.example.com'), 'link: <a href="http://www.example.com" target="_blank">http://www.example.com</a>' ) }) }) describe('linkifyAndClean (input sanitization)', () => { const testsParams = [ { description: 'it escapes "script" tags', inputString: "<script>alert('evil!')</script>", expectedString: "<script>alert('evil!')</script>", }, { description: 'it escapes nested tags', inputString: '<p><b>test</b></p>', expectedString: '<p><b>test</b></p>', }, { description: 'it escapes single tag', inputString: '<p>test', expectedString: '<p>test', }, { description: 'it removes css classe', inputString: '<div class="active">test</div>', expectedString: '<div>test</div>', }, { description: 'it removes style attribute', inputString: '<div style="display:none;">test</div>', expectedString: '<div>test</div>', }, { description: 'it keeps nested HTML link', inputString: '<p><a href="http://www.example.com">example</a></p>', expectedString: '<p><a href="http://www.example.com">example</a></p>', }, ] testsParams.map((testParams) => { it(testParams.description, () => { assert.equal( linkifyAndClean(testParams.inputString), testParams.expectedString ) }) }) })