/** * test/desktop/server-config.test.ts — unit tests for buildServerEnv (B1). * * Covers the PORT / BIND_HOST / SHELL_PATH / USE_TMUX mapping, the immutability * guarantee (input.env untouched), and pass-through of unrelated env vars. */ import { describe, test, expect } from 'vitest' import { buildServerEnv } from '../../desktop/src/server-config.js' import type { DesktopPrefs } from '../../desktop/src/types.js' const BASE_PREFS: DesktopPrefs = { port: null, lanSharing: false, shellPath: null, openAtLogin: false, notifyOnApproval: true, notifyOnStatusChange: true, } describe('buildServerEnv', () => { test('sets PORT to the stringified port', () => { const result = buildServerEnv({ prefs: BASE_PREFS, port: 4321, platform: 'darwin', env: {} }) expect(result.PORT).toBe('4321') }) test('binds 127.0.0.1 when lanSharing is off', () => { const result = buildServerEnv({ prefs: BASE_PREFS, port: 3000, platform: 'darwin', env: {} }) expect(result.BIND_HOST).toBe('127.0.0.1') }) test('binds 0.0.0.0 when lanSharing is on', () => { // Arrange const prefs = { ...BASE_PREFS, lanSharing: true } // Act const result = buildServerEnv({ prefs, port: 3000, platform: 'darwin', env: {} }) // Assert expect(result.BIND_HOST).toBe('0.0.0.0') }) test('uses prefs.shellPath as SHELL_PATH when provided (overriding the platform default)', () => { // Arrange const prefs = { ...BASE_PREFS, shellPath: '/usr/bin/fish' } // Act const result = buildServerEnv({ prefs, port: 3000, platform: 'darwin', env: { SHELL: '/bin/zsh' } }) // Assert expect(result.SHELL_PATH).toBe('/usr/bin/fish') }) test('falls back to the platform default SHELL_PATH when prefs.shellPath is null', () => { const win = buildServerEnv({ prefs: BASE_PREFS, port: 3000, platform: 'win32', env: {} }) expect(win.SHELL_PATH).toBe('powershell.exe') const mac = buildServerEnv({ prefs: BASE_PREFS, port: 3000, platform: 'darwin', env: { SHELL: '/bin/zsh' } }) expect(mac.SHELL_PATH).toBe('/bin/zsh') }) test('forces USE_TMUX off on win32 even when the ambient env enables it', () => { const result = buildServerEnv({ prefs: BASE_PREFS, port: 3000, platform: 'win32', env: { USE_TMUX: '1' } }) expect(result.USE_TMUX).toBe('0') }) test('passes ambient USE_TMUX through on non-Windows platforms', () => { const result = buildServerEnv({ prefs: BASE_PREFS, port: 3000, platform: 'linux', env: { USE_TMUX: '1' } }) expect(result.USE_TMUX).toBe('1') }) test('defaults USE_TMUX to off on non-Windows when the env is unset', () => { const result = buildServerEnv({ prefs: BASE_PREFS, port: 3000, platform: 'linux', env: {} }) expect(result.USE_TMUX).toBe('0') }) test('does not mutate the input env', () => { // Arrange const env = { PATH: '/usr/bin', USE_TMUX: '1' } const snapshot = { ...env } // Act buildServerEnv({ prefs: BASE_PREFS, port: 3000, platform: 'win32', env }) // Assert expect(env).toEqual(snapshot) }) test('preserves unrelated ambient env vars', () => { // Arrange const env = { PATH: '/usr/bin', HOME: '/Users/me', CUSTOM: 'x' } // Act const result = buildServerEnv({ prefs: BASE_PREFS, port: 3000, platform: 'darwin', env }) // Assert expect(result.PATH).toBe('/usr/bin') expect(result.HOME).toBe('/Users/me') expect(result.CUSTOM).toBe('x') }) })