Skip to content

Commit a180146

Browse files
committed
fix(config): read default config if one does not exist
Right now, aecpli returns an error if a config file doesn't exist: ``` 2025/05/03 11:22:14 ERROR Config file does not exist file=$HOME/.config/aepcli/config.toml unable to read config: stat $HOME/.config/aepcli/config.toml: no such file or directory ``` The CLI should not fail if a config file does not exist.
1 parent a3a4f57 commit a180146

File tree

2 files changed

+22
-9
lines changed

2 files changed

+22
-9
lines changed

internal/config/config.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,8 @@ type API struct {
2525
func ReadConfigFromFile(file string) (*Config, error) {
2626
// Check if file exists first
2727
if _, err := os.Stat(file); os.IsNotExist(err) {
28-
slog.Error("Config file does not exist", "file", file)
29-
return nil, err
28+
slog.Warn("Config file does not exist, using default configuration", "file", file)
29+
return &Config{APIs: make(map[string]API)}, nil
3030
}
3131

3232
var c Config

internal/config/config_test.go

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
package config
22

33
import (
4-
"errors"
5-
"os"
64
"path/filepath"
75
"testing"
86

@@ -14,10 +12,11 @@ func TestConfigEndToEnd(t *testing.T) {
1412
tmpDir := t.TempDir()
1513
testFile := filepath.Join(tmpDir, "test_config.toml")
1614

17-
// First read should fail since file doesn't exist
18-
_, err := ReadConfigFromFile(testFile)
19-
assert.Error(t, err)
20-
assert.True(t, errors.Is(err, os.ErrNotExist))
15+
// First read should return a default configuration since file doesn't exist
16+
cfg, err := ReadConfigFromFile(testFile)
17+
assert.NoError(t, err)
18+
assert.NotNil(t, cfg)
19+
assert.Empty(t, cfg.APIs)
2120

2221
// Create test API config
2322
testAPI := API{
@@ -33,7 +32,7 @@ func TestConfigEndToEnd(t *testing.T) {
3332
assert.NoError(t, err)
3433

3534
// Read config back and verify contents
36-
cfg, err := ReadConfigFromFile(testFile)
35+
cfg, err = ReadConfigFromFile(testFile)
3736
assert.NoError(t, err)
3837
assert.NotNil(t, cfg)
3938
assert.Len(t, cfg.APIs, 1)
@@ -61,3 +60,17 @@ func TestWriteAPIWithEmptyName(t *testing.T) {
6160
assert.Error(t, err)
6261
assert.Equal(t, "api name cannot be empty", err.Error())
6362
}
63+
64+
func TestReadConfigFromFile_NoFile(t *testing.T) {
65+
// Create a temporary directory
66+
tmpDir := t.TempDir()
67+
testFile := filepath.Join(tmpDir, "nonexistent_config.toml")
68+
69+
// Attempt to read the config file
70+
cfg, err := ReadConfigFromFile(testFile)
71+
72+
// Verify no error is returned and a default config is provided
73+
assert.NoError(t, err)
74+
assert.NotNil(t, cfg)
75+
assert.Empty(t, cfg.APIs)
76+
}

0 commit comments

Comments
 (0)