/**
* Unit Tests for Sanitization Utilities
*/
import { describe, it, expect } from '@playwright/test';
import { sanitizeHTML, sanitizeURL, sanitizePlainText, containsSuspiciousContent } from '@/lib/sanitize';
describe('sanitizeURL', () => {
it('should allow valid http URLs', () => {
expect(sanitizeURL('http://example.com')).toBe('http://example.com');
});
it('should allow valid https URLs', () => {
expect(sanitizeURL('https://example.com/path?query=value')).toBe('https://example.com/path?query=value');
});
it('should allow valid mailto URLs', () => {
expect(sanitizeURL('mailto:user@example.com')).toBe('mailto:user@example.com');
});
it('should block javascript: protocol', () => {
expect(sanitizeURL('javascript:alert("XSS")')).toBe('#');
});
it('should block data: protocol', () => {
expect(sanitizeURL('data:text/html,')).toBe('#');
});
it('should handle invalid URLs', () => {
expect(sanitizeURL('not a url')).toBe('#');
expect(sanitizeURL('')).toBe('#');
});
it('should handle null/undefined gracefully', () => {
expect(sanitizeURL(null as any)).toBe('#');
expect(sanitizeURL(undefined as any)).toBe('#');
});
});
describe('sanitizePlainText', () => {
it('should escape HTML entities', () => {
expect(sanitizePlainText(''))
.toBe('<script>alert("XSS")</script>');
});
it('should escape ampersands', () => {
expect(sanitizePlainText('Tom & Jerry')).toBe('Tom & Jerry');
});
it('should escape quotes', () => {
expect(sanitizePlainText('"Hello" \'World\'')).toContain('"');
expect(sanitizePlainText('"Hello" \'World\'')).toContain(''');
});
it('should handle plain text without changes', () => {
expect(sanitizePlainText('Hello World')).toBe('Hello World');
});
it('should handle empty strings', () => {
expect(sanitizePlainText('')).toBe('');
});
});
describe('containsSuspiciousContent', () => {
it('should detect script tags', () => {
expect(containsSuspiciousContent('')).toBe(true);
expect(containsSuspiciousContent('')).toBe(true);
});
it('should detect javascript: protocol', () => {
expect(containsSuspiciousContent('javascript:alert(1)')).toBe(true);
expect(containsSuspiciousContent('JAVASCRIPT:alert(1)')).toBe(true);
});
it('should detect event handlers', () => {
expect(containsSuspiciousContent('')).toBe(true);
expect(containsSuspiciousContent('
Hello world
'; const result = sanitizeHTML(html); expect(result).toContain('');
expect(result).toContain('');
});
it('should remove script tags', () => {
const html = ' Hello