diff options
| author | Paul Buetow <paul@buetow.org> | 2026-04-02 17:52:13 +0300 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2026-04-02 17:52:13 +0300 |
| commit | 11a3e62f17433a7df0e6a77a688321d94a736778 (patch) | |
| tree | ada0f94c074a3e290ea993179fbf645a40d7ab48 /internal/config | |
| parent | f3d057fec20aeef584cb6340c6a002280a019f15 (diff) | |
task 003: handle home-dir and APKG marshal errors
Diffstat (limited to 'internal/config')
| -rw-r--r-- | internal/config/home.go | 22 | ||||
| -rw-r--r-- | internal/config/home_test.go | 25 |
2 files changed, 47 insertions, 0 deletions
diff --git a/internal/config/home.go b/internal/config/home.go new file mode 100644 index 0000000..8089b6e --- /dev/null +++ b/internal/config/home.go @@ -0,0 +1,22 @@ +package config + +import ( + "fmt" + "os" +) + +var userHomeDir = os.UserHomeDir + +// HomeDir returns the user's home directory. +// +// It falls back to "." when the home directory cannot be resolved so callers +// can still build a safe relative path instead of joining against an empty +// string. +func HomeDir() (string, error) { + homeDir, err := userHomeDir() + if err != nil { + return ".", fmt.Errorf("resolve home directory: %w", err) + } + + return homeDir, nil +} diff --git a/internal/config/home_test.go b/internal/config/home_test.go new file mode 100644 index 0000000..bc7f5ea --- /dev/null +++ b/internal/config/home_test.go @@ -0,0 +1,25 @@ +package config + +import ( + "errors" + "testing" +) + +func TestHomeDirReturnsFallbackWhenResolutionFails(t *testing.T) { + oldUserHomeDir := userHomeDir + t.Cleanup(func() { + userHomeDir = oldUserHomeDir + }) + + userHomeDir = func() (string, error) { + return "", errors.New("boom") + } + + homeDir, err := HomeDir() + if err == nil { + t.Fatal("HomeDir() error = nil, want error") + } + if homeDir != "." { + t.Fatalf("HomeDir() homeDir = %q, want %q", homeDir, ".") + } +} |
