1package config
2
3import (
4 "os"
5 "path/filepath"
6 "testing"
7
8 "github.com/stretchr/testify/require"
9)
10
11func TestGetXDGDirs_ProdPreservesLayout(t *testing.T) {
12 home := t.TempDir()
13 t.Setenv("ENV", "")
14 t.Setenv("HOME", home)
15 t.Setenv("XDG_CONFIG_HOME", filepath.Join(home, ".config"))
16 t.Setenv("XDG_DATA_HOME", filepath.Join(home, ".local", "share"))
17 t.Setenv("XDG_STATE_HOME", filepath.Join(home, ".local", "state"))
18 t.Setenv("XDG_CACHE_HOME", filepath.Join(home, ".cache"))
19
20 dirs, err := GetXDGDirs()
21 require.NoError(t, err)
22 require.Equal(t, filepath.Join(home, ".config", appName), dirs.ConfigHome)
23 require.Equal(t, filepath.Join(home, ".local", "share", appName), dirs.DataHome)
24 require.Equal(t, filepath.Join(home, ".local", "state", appName), dirs.StateHome)
25 require.Equal(t, filepath.Join(home, ".cache", appName), dirs.CacheHome)
26}
27
28func TestGetXDGDirs_DevUsesSharedSandboxLayout(t *testing.T) {
29 wd := t.TempDir()
30 t.Chdir(wd)
31
32 t.Setenv("ENV", "dev")
33 runtimeDir, err := os.MkdirTemp("", "dbr-")
34 require.NoError(t, err)
35 t.Cleanup(func() {
36 _ = os.RemoveAll(runtimeDir)
37 })
38 t.Setenv("XDG_RUNTIME_DIR", runtimeDir)
39 dirs, err := GetXDGDirs()
40 require.NoError(t, err)
41 require.Equal(t, filepath.Join(wd, ".dev", appName, "config"), dirs.ConfigHome)
42 require.Equal(t, filepath.Join(wd, ".dev", appName, "data"), dirs.DataHome)
43 require.Equal(t, filepath.Join(wd, ".dev", appName, "state"), dirs.StateHome)
44 require.Equal(t, filepath.Join(wd, ".dev", appName, "cache"), dirs.CacheHome)
45
46 logDir, err := GetLogDir()
47 require.NoError(t, err)
48 require.Equal(t, filepath.Join(wd, ".dev", appName, "logs"), logDir)
49}