/**
* Tests for input sanitization functionality in security-utils
*
* Critical sanitization functions that prevent XSS and other attacks.
*/
import './security-utils-setup'
import { escapeHtml, sanitizeText, sanitizeUrl } from '@/lib/security-utils'
import {
DANGEROUS_URLS,
INVALID_URL_FORMATS,
SQL_INJECTION_VECTORS,
VALID_URLS
} from './security-utils-setup'
describe('Input Sanitization', () => {
describe('escapeHtml', () => {
it('escapes basic HTML characters', () => {
const input = '
Hello & "World"
'
const expected = '<div>Hello & "World"</div>'
expect(escapeHtml(input)).toBe(expected)
})
it('handles empty string', () => {
expect(escapeHtml('')).toBe('')
})
it('handles string with no HTML characters', () => {
const input = 'Hello World'
expect(escapeHtml(input)).toBe(input)
})
it('escapes single quotes', () => {
const input = "It's a test"
const expected = 'It's a test'
expect(escapeHtml(input)).toBe(expected)
})
it('escapes forward slashes', () => {
const input = ''
const expected = '</script>'
expect(escapeHtml(input)).toBe(expected)
})
it('prevents XSS attacks', () => {
// Test specific dangerous vectors that should be escaped
const dangerous = ['', '
']
dangerous.forEach(vector => {
const escaped = escapeHtml(vector)
expect(escaped).not.toContain(' World'
const result = sanitizeText(input)
expect(result).not.toContain('',
'
',
'