| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223 |
- import { describe, expect, test } from 'vitest'
- import { prefixToUUID, stringRange } from '../../../src/sql/studio/auth/get-users-common'
- describe('prefixToUUID', () => {
- test('returns UUID template with no prefix', () => {
- const result = prefixToUUID('', false)
- expect(result).toBe('00000000-0000-0000-0000-000000000000')
- })
- test('returns UUID template with no prefix (max=true)', () => {
- const result = prefixToUUID('', true)
- expect(result).toBe('ffffffff-ffff-ffff-ffff-ffffffffffff')
- })
- test('returns UUID with short prefix', () => {
- const result = prefixToUUID('abc', false)
- expect(result).toBe('abc00000-0000-4000-8000-000000000000')
- })
- test('returns UUID with short prefix (max=true)', () => {
- const result = prefixToUUID('abc', true)
- expect(result).toBe('abcfffff-ffff-4fff-bfff-ffffffffffff')
- })
- test('returns UUID with prefix up to first hyphen', () => {
- const result = prefixToUUID('12345678', false)
- expect(result).toBe('12345678-0000-4000-8000-000000000000')
- })
- test('returns UUID with prefix up to first hyphen (max=true)', () => {
- const result = prefixToUUID('12345678', true)
- expect(result).toBe('12345678-ffff-4fff-bfff-ffffffffffff')
- })
- test('returns UUID with prefix including first hyphen', () => {
- const result = prefixToUUID('12345678-', false)
- expect(result).toBe('12345678-0000-4000-8000-000000000000')
- })
- test('returns UUID with prefix extending into second section', () => {
- const result = prefixToUUID('12345678-1234', false)
- expect(result).toBe('12345678-1234-4000-8000-000000000000')
- })
- test('returns UUID with prefix extending into third section (before position 15)', () => {
- const result = prefixToUUID('12345678-1234-', false)
- expect(result).toBe('12345678-1234-4000-8000-000000000000')
- })
- test('returns UUID with prefix at position 15 (includes version)', () => {
- const result = prefixToUUID('12345678-1234-5', false)
- expect(result).toBe('12345678-1234-5000-8000-000000000000')
- })
- test('returns UUID with prefix extending into fourth section (before position 20)', () => {
- const result = prefixToUUID('12345678-1234-5678-', false)
- expect(result).toBe('12345678-1234-5678-8000-000000000000')
- })
- test('returns UUID with prefix extending into fourth section (before position 20, max=true)', () => {
- const result = prefixToUUID('12345678-1234-5678-', true)
- expect(result).toBe('12345678-1234-5678-bfff-ffffffffffff')
- })
- test('returns UUID with prefix at position 20 (includes variant)', () => {
- const result = prefixToUUID('12345678-1234-5678-9', false)
- expect(result).toBe('12345678-1234-5678-9000-000000000000')
- })
- test('returns UUID with prefix at position 20 (includes variant, max=true)', () => {
- const result = prefixToUUID('12345678-1234-5678-9', true)
- expect(result).toBe('12345678-1234-5678-9fff-ffffffffffff')
- })
- test('returns UUID with long prefix', () => {
- const result = prefixToUUID('12345678-1234-5678-9abc-def', false)
- expect(result).toBe('12345678-1234-5678-9abc-def000000000')
- })
- test('returns UUID with long prefix (max=true)', () => {
- const result = prefixToUUID('12345678-1234-5678-9abc-def', true)
- expect(result).toBe('12345678-1234-5678-9abc-deffffffffff')
- })
- test('returns UUID with full length prefix', () => {
- const result = prefixToUUID('12345678-1234-5678-9abc-def123456789', false)
- expect(result).toBe('12345678-1234-5678-9abc-def123456789')
- })
- test('returns UUID with full length prefix (max=true)', () => {
- const result = prefixToUUID('12345678-1234-5678-9abc-def123456789', true)
- expect(result).toBe('12345678-1234-5678-9abc-def123456789')
- })
- test('returns UUID with prefix longer than template', () => {
- const result = prefixToUUID('12345678-1234-5678-9abc-def123456789extra', false)
- expect(result).toBe('12345678-1234-5678-9abc-def123456789')
- })
- test('maintains hyphen positions in UUID format', () => {
- const result = prefixToUUID('a', false)
- expect(result).toBe('a0000000-0000-4000-8000-000000000000')
- expect(result.match(/-/g)?.length).toBe(4)
- expect(result[8]).toBe('-')
- expect(result[13]).toBe('-')
- expect(result[18]).toBe('-')
- expect(result[23]).toBe('-')
- })
- test('sets version nibble to 4 when prefix is shorter than position 15', () => {
- const result = prefixToUUID('12345678-1234', false)
- expect(result[14]).toBe('4')
- })
- test('sets variant to 8 when prefix is shorter than position 20 and max=false', () => {
- const result = prefixToUUID('12345678-1234-5678', false)
- expect(result[19]).toBe('8')
- })
- test('sets variant to b when prefix is shorter than position 20 and max=true', () => {
- const result = prefixToUUID('12345678-1234-5678', true)
- expect(result[19]).toBe('b')
- })
- test('fills remaining positions with f when max=true', () => {
- const result = prefixToUUID('abc', true)
- expect(result).toBe('abcfffff-ffff-4fff-bfff-ffffffffffff')
- // Check that all '0' characters in the template are replaced with 'f'
- expect(result).not.toContain('0')
- // Check that hyphens are preserved
- expect(result[8]).toBe('-')
- expect(result[13]).toBe('-')
- expect(result[18]).toBe('-')
- expect(result[23]).toBe('-')
- })
- })
- describe('stringRange', () => {
- test('returns empty string and undefined for empty prefix', () => {
- const result = stringRange('')
- expect(result).toEqual(['', undefined])
- })
- test('returns range for single character', () => {
- const result = stringRange('a')
- expect(result).toEqual(['a', 'b'])
- })
- test('returns range for multiple characters', () => {
- const result = stringRange('abc')
- expect(result).toEqual(['abc', 'abd'])
- })
- test('returns range for string with spaces', () => {
- const result = stringRange('hello world')
- expect(result).toEqual(['hello world', 'hello worle'])
- })
- test('returns range for string ending with numbers', () => {
- const result = stringRange('test123')
- expect(result).toEqual(['test123', 'test124'])
- })
- test('returns range for string with uppercase letters', () => {
- const result = stringRange('ABC')
- expect(result).toEqual(['ABC', 'ABD'])
- })
- test('appends space for tilde character to avoid collation issues', () => {
- const result = stringRange('test~')
- expect(result).toEqual(['test~', 'test~ '])
- })
- test('appends space for characters beyond tilde in ASCII', () => {
- const result = stringRange('test\x7F') // DEL character
- expect(result).toEqual(['test\x7F', 'test\x7F '])
- })
- test('increments last character correctly for various ASCII characters', () => {
- expect(stringRange('a')).toEqual(['a', 'b'])
- expect(stringRange('z')).toEqual(['z', 'z~']) // Special case: appends '~' to avoid collation issues
- expect(stringRange('A')).toEqual(['A', 'B'])
- expect(stringRange('Z')).toEqual(['Z', '['])
- expect(stringRange('0')).toEqual(['0', '1'])
- expect(stringRange('9')).toEqual(['9', ':'])
- })
- test('handles special characters', () => {
- expect(stringRange('test!')).toEqual(['test!', 'test"'])
- expect(stringRange('test@')).toEqual(['test@', 'testA'])
- expect(stringRange('test#')).toEqual(['test#', 'test$'])
- })
- test('handles underscore', () => {
- const result = stringRange('test_')
- expect(result).toEqual(['test_', 'test`'])
- })
- test('handles hyphen', () => {
- const result = stringRange('test-')
- expect(result).toEqual(['test-', 'test.'])
- })
- test('handles space correctly', () => {
- const result = stringRange('test ')
- expect(result).toEqual(['test ', 'test!'])
- })
- test('appends tilde for strings ending with lowercase z', () => {
- expect(stringRange('xyz')).toEqual(['xyz', 'xyz~'])
- expect(stringRange('jazz')).toEqual(['jazz', 'jazz~'])
- })
- test('handles mixed case strings ending with uppercase Z', () => {
- expect(stringRange('testZ')).toEqual(['testZ', 'test['])
- })
- test('handles strings ending with tilde', () => {
- expect(stringRange('test~')).toEqual(['test~', 'test~ '])
- expect(stringRange('~~~')).toEqual(['~~~', '~~~ '])
- })
- })
|