import { describe, it, expect } from 'vitest'; import { sanitizeBlockHtml } from '../utils.js'; describe('sanitizeBlockHtml', () => { it('removes '); expect(out).not.toContain(' tags and their contents', () => { const out = sanitizeBlockHtml('

ok

'); expect(out).not.toContain(' { const out = sanitizeBlockHtml('x'); expect(out.toLowerCase()).not.toContain('onclick'); expect(out).not.toContain('steal()'); }); it('removes onerror handlers on injected elements', () => { const out = sanitizeBlockHtml(''); expect(out.toLowerCase()).not.toContain('onerror'); expect(out).not.toContain('alert(1)'); }); it('neutralizes javascript: hrefs', () => { const out = sanitizeBlockHtml('click'); expect(out.toLowerCase()).not.toContain('javascript:'); // The text content survives even though the dangerous href is dropped. expect(out).toContain('click'); }); it('strips iframe/object/embed elements', () => { const out = sanitizeBlockHtml( '', ); expect(out.toLowerCase()).not.toContain(' { const out = sanitizeBlockHtml('bold and italic'); expect(out).toContain(''); expect(out).toContain('bold'); expect(out).toContain(''); expect(out).toContain('italic'); }); it('preserves safe https anchors', () => { const out = sanitizeBlockHtml('link'); expect(out).toContain('href="https://example.com"'); expect(out).toContain('link'); }); it('returns empty string for non-string input', () => { expect(sanitizeBlockHtml('')).toBe(''); // @ts-expect-error testing runtime guard against bad input expect(sanitizeBlockHtml(null)).toBe(''); }); });