package secret import ( "testing" ) func TestDetermineStateDir_ErrorsWhenHomeDirUnavailable(t *testing.T) { // Clear all env vars that could provide a home/config directory. // On Darwin, os.UserHomeDir may still succeed via the password // database, so we also test via an explicit empty-customConfigDir // path to exercise the fallback branch. t.Setenv(EnvStateDir, "") t.Setenv("HOME", "") t.Setenv("XDG_CONFIG_HOME", "") result, err := DetermineStateDir("") // On systems where both lookups fail, we must get an error. // On systems where the OS provides a fallback (e.g. macOS pw db), // result should still be valid (non-empty, not root-relative). if err != nil { // Good — the error case is handled. return } if result == "/.config/"+AppID || result == "" { t.Errorf("DetermineStateDir returned dangerous/empty path %q without error", result) } } func TestDetermineStateDir_UsesEnvVar(t *testing.T) { t.Setenv(EnvStateDir, "/custom/state") result, err := DetermineStateDir("") if err != nil { t.Fatalf("unexpected error: %v", err) } if result != "/custom/state" { t.Errorf("expected /custom/state, got %q", result) } } func TestDetermineStateDir_UsesCustomConfigDir(t *testing.T) { t.Setenv(EnvStateDir, "") result, err := DetermineStateDir("/my/config") if err != nil { t.Fatalf("unexpected error: %v", err) } expected := "/my/config/" + AppID if result != expected { t.Errorf("expected %q, got %q", expected, result) } }