import { describe, expect, test } from 'bun:test'; import { DEFAULT_CLIENT_METADATA, generateSessionId, generateState, } from '../client/config.js'; describe('config utilities', () => { describe('generateSessionId', () => { test('should generate a valid UUID v4', () => { const sessionId = generateSessionId(); const uuidRegex = /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i; expect(sessionId).toMatch(uuidRegex); }); test('should generate unique session IDs', () => { const id1 = generateSessionId(); const id2 = generateSessionId(); expect(id1).not.toBe(id2); }); }); describe('generateState', () => { test('should generate a random state string', () => { const state = generateState(); expect(state).toBeString(); expect(state.length).toBeGreaterThan(0); }); test('should generate unique state values', () => { const state1 = generateState(); const state2 = generateState(); expect(state1).not.toBe(state2); }); test('should generate URL-safe strings', () => { const state = generateState(); // Should only contain alphanumeric and URL-safe characters expect(state).toMatch(/^[A-Za-z0-9_-]+$/); }); }); describe('DEFAULT_CLIENT_METADATA', () => { test('should have required OAuth client metadata fields', () => { expect(DEFAULT_CLIENT_METADATA).toHaveProperty('client_name'); expect(DEFAULT_CLIENT_METADATA).toHaveProperty('grant_types'); expect(DEFAULT_CLIENT_METADATA).toHaveProperty('response_types'); expect(DEFAULT_CLIENT_METADATA).toHaveProperty('scope'); expect(DEFAULT_CLIENT_METADATA).toHaveProperty( 'token_endpoint_auth_method' ); }); test('should include authorization_code grant type', () => { expect(DEFAULT_CLIENT_METADATA.grant_types).toContain( 'authorization_code' ); }); test('should include refresh_token grant type', () => { expect(DEFAULT_CLIENT_METADATA.grant_types).toContain('refresh_token'); }); test('should use code response type', () => { expect(DEFAULT_CLIENT_METADATA.response_types).toContain('code'); }); test('should request openid scope by default', () => { expect(DEFAULT_CLIENT_METADATA.scope).toContain('openid'); }); }); });