package secret_test import ( "testing" "git.eeqj.de/sneak/secret/internal/secret" ) 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(secret.EnvStateDir, "") t.Setenv("HOME", "") t.Setenv("XDG_CONFIG_HOME", "") result, err := secret.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/"+secret.AppID || result == "" { t.Errorf( "DetermineStateDir returned dangerous/empty path %q without error", result) } } func TestDetermineStateDir_UsesEnvVar(t *testing.T) { t.Setenv(secret.EnvStateDir, "/custom/state") result, err := secret.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(secret.EnvStateDir, "") result, err := secret.DetermineStateDir("/my/config") if err != nil { t.Fatalf("unexpected error: %v", err) } expected := "/my/config/" + secret.AppID if result != expected { t.Errorf("expected %q, got %q", expected, result) } }