import { describe, expect, it } from 'vitest'; import { createSettingsHelpers } from './settings-helpers.js'; const createTestHelpers = () => createSettingsHelpers({ normalizePathForPersistence: (value) => value, normalizeDirectoryPath: (value) => value, normalizeTunnelBootstrapTtlMs: (value) => value, normalizeTunnelSessionTtlMs: (value) => value, normalizeTunnelProvider: (value) => value, normalizeTunnelMode: (value) => value, normalizeOptionalPath: (value) => value, normalizeManagedRemoteTunnelHostname: (value) => value, normalizeManagedRemoteTunnelPresets: () => undefined, normalizeManagedRemoteTunnelPresetTokens: () => undefined, sanitizeTypographySizesPartial: () => undefined, normalizeStringArray: (input) => input, sanitizeModelRefs: () => undefined, sanitizeSkillCatalogs: () => undefined, sanitizeProjects: () => undefined, }); describe('settings helpers', () => { it('accepts messageStreamTransport as a persisted shared setting', () => { const helpers = createTestHelpers(); expect(helpers.sanitizeSettingsUpdate({ messageStreamTransport: 'ws' })).toEqual({ messageStreamTransport: 'ws', }); expect(helpers.sanitizeSettingsUpdate({ messageStreamTransport: 'sse' })).toEqual({ messageStreamTransport: 'sse', }); expect(helpers.sanitizeSettingsUpdate({ messageStreamTransport: 'auto' })).toEqual({ messageStreamTransport: 'auto', }); }); it('rejects invalid messageStreamTransport values', () => { const helpers = createTestHelpers(); expect(helpers.sanitizeSettingsUpdate({ messageStreamTransport: 'websocket' })).toEqual({}); }); it('accepts desktopLanAccessEnabled as a persisted shared setting', () => { const helpers = createTestHelpers(); expect(helpers.sanitizeSettingsUpdate({ desktopLanAccessEnabled: true })).toEqual({ desktopLanAccessEnabled: true, }); expect(helpers.sanitizeSettingsUpdate({ desktopLanAccessEnabled: false })).toEqual({ desktopLanAccessEnabled: false, }); }); it('accepts mobileKeyboardMode as a persisted shared setting', () => { const helpers = createTestHelpers(); expect(helpers.sanitizeSettingsUpdate({ mobileKeyboardMode: 'native' })).toEqual({ mobileKeyboardMode: 'native', }); expect(helpers.sanitizeSettingsUpdate({ mobileKeyboardMode: 'resize-content' })).toEqual({ mobileKeyboardMode: 'resize-content', }); expect(helpers.sanitizeSettingsUpdate({ mobileKeyboardMode: ' resize-content ' })).toEqual({ mobileKeyboardMode: 'resize-content', }); }); it('rejects invalid mobileKeyboardMode values', () => { const helpers = createTestHelpers(); expect(helpers.sanitizeSettingsUpdate({ mobileKeyboardMode: 'fixed-layout' })).toEqual({}); }); it('accepts collapsibleThinkingBlocks as a persisted shared setting', () => { const helpers = createTestHelpers(); expect(helpers.sanitizeSettingsUpdate({ collapsibleThinkingBlocks: true })).toEqual({ collapsibleThinkingBlocks: true, }); expect(helpers.sanitizeSettingsUpdate({ collapsibleThinkingBlocks: false })).toEqual({ collapsibleThinkingBlocks: false, }); }); it('rejects non-boolean collapsibleThinkingBlocks values', () => { const helpers = createTestHelpers(); expect(helpers.sanitizeSettingsUpdate({ collapsibleThinkingBlocks: 'true' })).toEqual({}); expect(helpers.sanitizeSettingsUpdate({ collapsibleThinkingBlocks: 1 })).toEqual({}); }); it('includes collapsibleThinkingBlocks in formatSettingsResponse', () => { const helpers = createTestHelpers(); const response = helpers.formatSettingsResponse({ collapsibleThinkingBlocks: false }); expect(response.collapsibleThinkingBlocks).toBe(false); const responseTrue = helpers.formatSettingsResponse({ collapsibleThinkingBlocks: true }); expect(responseTrue.collapsibleThinkingBlocks).toBe(true); }); it('defaults collapsibleThinkingBlocks to true in formatSettingsResponse when absent', () => { const helpers = createTestHelpers(); const response = helpers.formatSettingsResponse({}); expect(response.collapsibleThinkingBlocks).toBe(true); }); });