import { describe, it, expect } from 'vitest' import { sanitizeString, sanitizeIdentifier, sanitizeLabel } from '../../server/utils/validation.js' describe('sanitize', () => { describe('sanitizeString', () => { it.each([ [' test ', 'test'], ['\n\ttest\n\t', 'test'], ['valid string', 'valid string'], ['test123', 'test123'], ])('trims whitespace and preserves valid: %s -> %s', (input, expected) => { expect(sanitizeString(input)).toBe(expected) }) it.each([null, undefined, 123, {}])('returns empty for non-string: %s', (input) => { expect(sanitizeString(input)).toBe('') }) it('truncates strings exceeding max length', () => { expect(sanitizeString('a'.repeat(2000), 1000).length).toBe(1000) expect(sanitizeString('a'.repeat(2000)).length).toBe(1000) }) }) describe('sanitizeIdentifier', () => { it.each([ ['test123', 'test123'], ['test_user', 'test_user'], ['Test123', 'Test123'], ['_test', '_test'], [' test123 ', 'test123'], ])('accepts valid identifier: %s -> %s', (input, expected) => { expect(sanitizeIdentifier(input)).toBe(expected) }) it.each([ ['test-user'], ['test.user'], ['test user'], ['test@user'], [''], [' '], ['a'.repeat(256)], ])('rejects invalid identifier: %s', (input) => { expect(sanitizeIdentifier(input)).toBe('') }) it.each([null, undefined, 123])('returns empty for non-string: %s', (input) => { expect(sanitizeIdentifier(input)).toBe('') }) }) describe('sanitizeLabel', () => { it.each([ [' test label ', 'test label'], ['Valid Label', 'Valid Label'], ['Test 123', 'Test 123'], ])('trims whitespace and preserves valid: %s -> %s', (input, expected) => { expect(sanitizeLabel(input)).toBe(expected) }) it.each([null, undefined])('returns empty for non-string: %s', (input) => { expect(sanitizeLabel(input)).toBe('') }) it('truncates long labels', () => { expect(sanitizeLabel('a'.repeat(2000), 500).length).toBe(500) expect(sanitizeLabel('a'.repeat(2000)).length).toBe(1000) }) }) })