package main import ( "os" "path/filepath" "testing" "github.com/stretchr/testify/require" ) func TestDataDirFollowsTheOrder(t *testing.T) { root := t.TempDir() testCases := []struct { name string dir string xdg string home string want string }{ { name: "ONECHAT_DIR first", dir: filepath.Join(root, "a"), xdg: filepath.Join(root, "xdg"), home: root, want: filepath.Join(root, "a"), }, { name: "absolute XDG_DATA_HOME", dir: "", xdg: filepath.Join(root, "xdg"), home: root, want: filepath.Join(root, "xdg", "onechat"), }, { name: "relative XDG_DATA_HOME ignored", dir: "", xdg: "xdg", home: root, want: filepath.Join(root, ".local", "share", "onechat"), }, { name: "home directory last", dir: "", xdg: "", home: root, want: filepath.Join(root, ".local", "share", "onechat"), }, } for _, tc := range testCases { t.Run(tc.name, func(t *testing.T) { t.Setenv("ONECHAT_DIR", tc.dir) t.Setenv("XDG_DATA_HOME", tc.xdg) t.Setenv("HOME", tc.home) dir, err := dataDir() require.NoError(t, err) require.Equal(t, tc.want, dir) info, err := os.Stat(dir) require.NoError(t, err) require.Equal(t, os.FileMode(0o700), info.Mode().Perm()) }) } } func TestDataDirFailsWithoutAHome(t *testing.T) { t.Setenv("ONECHAT_DIR", "") t.Setenv("XDG_DATA_HOME", "") t.Setenv("HOME", "") _, err := dataDir() require.ErrorContains(t, err, "ONECHAT_DIR") }