import { describe, it, expect } from 'vitest' import { useMarkdown } from '../../../app/composables/useMarkdown.js' describe('useMarkdown', () => { const { render } = useMarkdown() describe('XSS prevention', () => { it('strips script tags', () => { const result = render('Hello world') expect(result).not.toContain('') expect(result).toContain('Hello') expect(result).toContain('world') }) it('strips onerror attributes', () => { const result = render('') expect(result).not.toContain('onerror') }) it('strips onclick attributes', () => { const result = render('click') expect(result).not.toContain('onclick') }) it('strips iframe tags', () => { const result = render('') expect(result).not.toContain(' { const result = render('') expect(result).not.toContain(' { const result = render('') expect(result).not.toContain(' { const result = render('[click me](javascript:alert(1))') expect(result).not.toContain('javascript:') }) it('strips img tags (not in allowed list)', () => { const result = render('![alt](https://example.com/img.png)') expect(result).not.toContain(' { it('renders bold and italic', () => { const result = render('**bold** and *italic*') expect(result).toContain('bold') expect(result).toContain('italic') }) it('renders links with href', () => { const result = render('[Ghost Guild](https://ghostguild.org)') expect(result).toContain(' { for (let i = 1; i <= 6; i++) { const hashes = '#'.repeat(i) const result = render(`${hashes} Heading ${i}`) expect(result).toContain(``) } }) it('preserves code blocks', () => { const result = render('`inline code` and\n\n```\nblock code\n```') expect(result).toContain('') expect(result).toContain('
')
    })

    it('preserves blockquotes', () => {
      const result = render('> This is a quote')
      expect(result).toContain('
') }) it('preserves lists', () => { const result = render('- item 1\n- item 2') expect(result).toContain('