mirror of
https://github.com/rcourtman/Pulse.git
synced 2026-05-07 00:37:36 +00:00
65 lines
2.1 KiB
Go
65 lines
2.1 KiB
Go
package config
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestNewConfigPersistence_Scenarios(t *testing.T) {
|
|
// 1. configDir empty, PULSE_DATA_DIR set
|
|
t.Run("PULSE_DATA_DIR", func(t *testing.T) {
|
|
tempDir := t.TempDir()
|
|
t.Setenv("PULSE_DATA_DIR", tempDir)
|
|
cp, err := newConfigPersistence("")
|
|
require.NoError(t, err)
|
|
assert.Equal(t, tempDir, cp.configDir)
|
|
})
|
|
|
|
// 2. Crypto initialization error
|
|
t.Run("CryptoError", func(t *testing.T) {
|
|
// Ensure the crypto migration path can't pick up a real on-disk legacy key.
|
|
t.Setenv("PULSE_LEGACY_KEY_PATH", filepath.Join(t.TempDir(), ".encryption.key"))
|
|
|
|
tempDir := t.TempDir()
|
|
invalidPath := filepath.Join(tempDir, "file")
|
|
err := os.WriteFile(invalidPath, []byte("not a dir"), 0644)
|
|
require.NoError(t, err)
|
|
|
|
info, err := os.Stat(invalidPath)
|
|
require.NoError(t, err)
|
|
assert.False(t, info.IsDir(), "Path should be a file, not a directory")
|
|
|
|
_, err = newConfigPersistence(invalidPath)
|
|
assert.Error(t, err, "Expected error when configDir is a file")
|
|
})
|
|
}
|
|
|
|
func TestNewConfigPersistence_CanonicalizesOwnedConfigPaths(t *testing.T) {
|
|
root := t.TempDir()
|
|
explicit := filepath.Join(root, "nested", "..", "nested")
|
|
|
|
cp, err := newConfigPersistence(" " + explicit + " ")
|
|
require.NoError(t, err)
|
|
|
|
expectedDir := filepath.Clean(explicit)
|
|
assert.Equal(t, expectedDir, cp.configDir)
|
|
assert.Equal(t, filepath.Join(expectedDir, "alerts.json"), cp.alertFile)
|
|
assert.Equal(t, filepath.Join(expectedDir, "system.json"), cp.systemFile)
|
|
assert.Equal(t, filepath.Join(expectedDir, "ai_chat_sessions.json"), cp.aiChatSessionsFile)
|
|
assert.Equal(t, filepath.Join(expectedDir, "relay.enc"), cp.relayFile)
|
|
}
|
|
|
|
func TestNewConfigPersistence_RejectsBlankResolvedConfigDir(t *testing.T) {
|
|
originalDefaultDataDir := defaultDataDir
|
|
defaultDataDir = " \t "
|
|
t.Cleanup(func() { defaultDataDir = originalDefaultDataDir })
|
|
t.Setenv("PULSE_DATA_DIR", " \t ")
|
|
|
|
_, err := newConfigPersistence(" \t ")
|
|
require.Error(t, err)
|
|
assert.Contains(t, err.Error(), "resolve config directory")
|
|
}
|