import { registerTagWhitelistIfPossible, sanitizeHTML } from '@/sanitizer/htmlSanitizer'; describe('sanitizeHTML', () => { it('removes unnecessary tags', () => { expect(sanitizeHTML('')).toBe(''); expect(sanitizeHTML('')).toBe(''); expect(sanitizeHTML('child die')).toBe('child die'); expect(sanitizeHTML('')).toBe(''); expect(sanitizeHTML('')).toBe(''); }); describe('attributes', () => { describe('removes attributes with invalid value including xss script', () => { it('table', () => { expect(sanitizeHTML(``)).toBe( '' ); expect(sanitizeHTML(``)).toBe( '' ); }); it('href attribute with a tag', () => { expect(sanitizeHTML('xss')).toBe('xss'); expect(sanitizeHTML('xss')).toBe('xss'); expect(sanitizeHTML('xss')).toBe('xss'); expect(sanitizeHTML('xss')).toBe('xss'); expect(sanitizeHTML('xss')).toBe('xss'); expect(sanitizeHTML('xss')).toBe('xss'); expect(sanitizeHTML(`123xss`)).toBe('123xss'); expect(sanitizeHTML(`xss`)).toBe('xss'); }); it('src attribute with img tag', () => { expect(sanitizeHTML('')).toBe(''); expect(sanitizeHTML('')).toBe(''); expect(sanitizeHTML('')).toBe(''); expect(sanitizeHTML('')).toBe(''); expect(sanitizeHTML('')).toBe(''); expect(sanitizeHTML('')).toBe(''); }); it('src and onerror attribute with img tag', () => { expect( sanitizeHTML('') ).toBe(''); expect(sanitizeHTML('">')).toBe('">'); expect(sanitizeHTML('')).toBe( '' ); }); it('should remove onload attribute in svg', () => { expect(sanitizeHTML(' ')).toBe( ' ' ); expect(sanitizeHTML(' ')).toBe( ' ' ); expect(sanitizeHTML(' ')).toBe( ' ' ); expect(sanitizeHTML(` `)).toBe( ' ' ); expect(sanitizeHTML('')).toBe( '' ); expect(sanitizeHTML('')).toBe( '' ); expect(sanitizeHTML('')).toBe( '' ); }); it('should remove tag and href attribute in svg', () => { expect( sanitizeHTML( '' ) ).toBe(''); expect( sanitizeHTML( `` ) ).toBe(''); }); it('should remove ontoggle attribute in details', () => { expect(sanitizeHTML('')).toBe( '' ); }); }); describe('registerTagWhitelistIfPossible', () => { it('if possible, should keep the tags when registered in the white tag list', () => { registerTagWhitelistIfPossible('embed'); registerTagWhitelistIfPossible('iframe'); expect(sanitizeHTML('')).toBe(''); expect(sanitizeHTML('')).toBe( '' ); }); it('should remove the tags in case that the tag name cannot be white list', () => { registerTagWhitelistIfPossible('sript'); registerTagWhitelistIfPossible('input'); expect(sanitizeHTML('')).toBe(''); expect(sanitizeHTML('')).toBe(''); }); }); }); });