daemon-policy.test.ts
1 import assert from 'node:assert/strict' 2 import fs from 'node:fs' 3 import os from 'node:os' 4 import path from 'node:path' 5 import { after, before, describe, it } from 'node:test' 6 7 const originalEnv = { 8 DATA_DIR: process.env.DATA_DIR, 9 WORKSPACE_DIR: process.env.WORKSPACE_DIR, 10 SWARMCLAW_BUILD_MODE: process.env.SWARMCLAW_BUILD_MODE, 11 SWARMCLAW_DAEMON_AUTOSTART: process.env.SWARMCLAW_DAEMON_AUTOSTART, 12 } 13 14 let tempDir = '' 15 let policy: typeof import('@/lib/server/runtime/daemon-policy') 16 let storage: typeof import('@/lib/server/storage') 17 18 before(async () => { 19 tempDir = fs.mkdtempSync(path.join(os.tmpdir(), 'swarmclaw-daemon-policy-')) 20 process.env.DATA_DIR = path.join(tempDir, 'data') 21 process.env.WORKSPACE_DIR = path.join(tempDir, 'workspace') 22 process.env.SWARMCLAW_BUILD_MODE = '1' 23 delete process.env.SWARMCLAW_DAEMON_AUTOSTART 24 25 storage = await import('@/lib/server/storage') 26 policy = await import('@/lib/server/runtime/daemon-policy') 27 }) 28 29 after(() => { 30 for (const [key, value] of Object.entries(originalEnv)) { 31 if (value === undefined) delete process.env[key] 32 else process.env[key] = value 33 } 34 fs.rmSync(tempDir, { recursive: true, force: true }) 35 }) 36 37 describe('daemonAutostartEnvEnabled', () => { 38 it('defaults to enabled when neither env nor app settings override it', () => { 39 delete process.env.SWARMCLAW_DAEMON_AUTOSTART 40 storage.saveSettings({}) 41 42 assert.equal(policy.daemonAutostartEnvEnabled(), true) 43 }) 44 45 it('reads the persisted app setting when env is unset', () => { 46 delete process.env.SWARMCLAW_DAEMON_AUTOSTART 47 storage.saveSettings({ daemonAutostartEnabled: false }) 48 assert.equal(policy.daemonAutostartEnvEnabled(), false) 49 50 storage.saveSettings({ daemonAutostartEnabled: true }) 51 assert.equal(policy.daemonAutostartEnvEnabled(), true) 52 }) 53 54 it('lets the environment variable override the persisted app setting', () => { 55 storage.saveSettings({ daemonAutostartEnabled: true }) 56 process.env.SWARMCLAW_DAEMON_AUTOSTART = '0' 57 assert.equal(policy.daemonAutostartEnvEnabled(), false) 58 59 process.env.SWARMCLAW_DAEMON_AUTOSTART = '1' 60 assert.equal(policy.daemonAutostartEnvEnabled(), true) 61 }) 62 })