import { describe, expect, it } from 'vitest'; import { normalizeRedisSearchDraftChange, normalizeRedisSearchInput } from './redisSearchPattern'; describe('normalizeRedisSearchInput', () => { it('returns wildcard for empty input', () => { expect(normalizeRedisSearchInput('')).toEqual({ keyword: '', pattern: '*', }); }); it('wraps plain keywords with wildcard for contains matching', () => { expect(normalizeRedisSearchInput('order')).toEqual({ keyword: 'order', pattern: '*[oO][rR][dD][eE][rR]*', }); }); it('builds ascii case-insensitive patterns for letter keywords', () => { expect(normalizeRedisSearchInput('agent')).toEqual({ keyword: 'agent', pattern: '*[aA][gG][eE][nN][tT]*', }); }); it('escapes redis glob special characters as literals', () => { expect(normalizeRedisSearchInput('user:*:[id]?')).toEqual({ keyword: 'user:*:[id]?', pattern: '*[uU][sS][eE][rR]:\\*:\\[[iI][dD]\\]\\?*', }); }); it('marks empty draft changes for immediate reset search', () => { expect(normalizeRedisSearchDraftChange('')).toEqual({ keyword: '', pattern: '*', shouldSearchImmediately: true, }); }); });