@@ -36,6 +36,38 @@ func TestConfig_LoadFromBytes(t *testing.T) {
36 require.Equal(t, "https://api.openai.com/v2", pc.BaseURL)
36 require.Equal(t, "https://api.openai.com/v2", pc.BaseURL)
39+func TestLoadFromConfigPaths_InvalidJSON(t *testing.T) {
42+ t.Run("identifies the offending file", func(t *testing.T) {
44+ tmpDir := t.TempDir()
45+ good := filepath.Join(tmpDir, "good.json")
46+ bad := filepath.Join(tmpDir, "bad.json")
47+ require.NoError(t, os.WriteFile(good, []byte(`{"providers":{}}`), 0o644))
48+ require.NoError(t, os.WriteFile(bad, []byte(`{not valid json}`), 0o644))
50+ _, _, err := loadFromConfigPaths([]string{good, bad})
51+ require.Error(t, err)
52+ require.Contains(t, err.Error(), "invalid JSON in config file")
53+ require.Contains(t, err.Error(), "bad.json")
56+ t.Run("skips missing and empty files", func(t *testing.T) {
58+ tmpDir := t.TempDir()
59+ empty := filepath.Join(tmpDir, "empty.json")
60+ require.NoError(t, os.WriteFile(empty, []byte(""), 0o644))
62+ cfg, _, err := loadFromConfigPaths([]string{
63+ filepath.Join(tmpDir, "nonexistent.json"),
66+ require.NoError(t, err)
67+ require.NotNil(t, cfg)
39// testStore wraps a Config in a minimal ConfigStore for testing.
71// testStore wraps a Config in a minimal ConfigStore for testing.
40func testStore(cfg *Config) *ConfigStore {
72func testStore(cfg *Config) *ConfigStore {
41 return &ConfigStore{config: cfg}
73 return &ConfigStore{config: cfg}