Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions internal/paths/paths.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,16 @@ import (

const appName = "roxie"

const envUserConfigPath = "ROXIE_USER_CONFIG_PATH"

func UserConfigPath() (string, error) {
if overwrittenPath := os.Getenv(envUserConfigPath); overwrittenPath != "" {
if _, err := os.ReadFile(overwrittenPath); err != nil {
return "", fmt.Errorf("config file %q specified in environment variable %s cannot be read: %w",
overwrittenPath, envUserConfigPath, err)
}
return overwrittenPath, nil
Comment thread
coderabbitai[bot] marked this conversation as resolved.
}
dir, err := configDir()
if err != nil {
return "", fmt.Errorf("retrieving user config path: %w", err)
Expand Down
59 changes: 59 additions & 0 deletions internal/paths/paths_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
package paths

import (
"testing"

"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)

func TestUserConfigPath(t *testing.T) {
tests := []struct {
name string
envValue string
setEnv bool
}{
{
name: "returns env var value when set",
envValue: "/custom/path/config.yaml",
setEnv: true,
},
{
name: "returns default path when env var is not set",
setEnv: false,
},
Comment thread
coderabbitai[bot] marked this conversation as resolved.
{
name: "returns default path when env var is empty",
envValue: "",
setEnv: true,
},
}

for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
if tt.setEnv {
t.Setenv(envUserConfigPath, tt.envValue)
}

got, err := UserConfigPath()
require.NoError(t, err)

if tt.setEnv && tt.envValue != "" {
assert.Equal(t, tt.envValue, got)
} else {
assert.Contains(t, got, "roxie/config.yaml")
}
})
}
}

func TestUserConfigPathString(t *testing.T) {
t.Run("returns env var value when set", func(t *testing.T) {
t.Setenv(envUserConfigPath, "/custom/path/config.yaml")
assert.Equal(t, "/custom/path/config.yaml", UserConfigPathString())
})

t.Run("returns default path when env var is not set", func(t *testing.T) {
assert.Contains(t, UserConfigPathString(), "roxie/config.yaml")
})
}
Loading