-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")
-}
-
-func writeConfig(t *testing.T, dir, text string) {