import { describe, test, expect } from 'vitest';
import { ImageBlock } from './ImageBlock';

const toHtml = (ImageBlock as any).toHtml;

describe('ImageBlock.toHtml src/alt XSS hardening', () => {
  test('a javascript: src never reaches the output', () => {
    const { html } = toHtml({ src: 'javascript:alert(1)' }, '');
    expect(html).not.toContain('javascript:');
  });

  test('a malicious src cannot break out of the src attribute', () => {
    const malicious = 'https://example.com/x.jpg" onerror="alert(1)';
    const { html } = toHtml({ src: malicious }, '');
    expect(html).not.toContain('onerror="alert(1)"');
  });

  test('a malicious alt cannot break out of the alt attribute', () => {
    const malicious = 'x" onerror="alert(1)';
    const { html } = toHtml({ src: 'https://example.com/x.jpg', alt: malicious }, '');
    expect(html).not.toContain('onerror="alert(1)"');
  });

  test('a placeholder/empty src emits no output', () => {
    const { html } = toHtml({ src: '' }, '');
    expect(html).toBe('');
  });

  test('a normal image still renders correctly', () => {
    const { html } = toHtml({ src: 'https://example.com/photo.jpg', alt: 'A photo' }, '');
    expect(html).toContain('src="https://example.com/photo.jpg"');
    expect(html).toContain('alt="A photo"');
  });
});
