/ src / lib / server / runtime / daemon-policy.test.ts
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  })