| 114 | } |
| 115 | |
| 116 | func TestInitWithYAMLConfig(t *testing.T) { |
| 117 | // Create a temporary YAML config file |
| 118 | configContent := ` |
| 119 | temperature: 0.9 |
| 120 | model: gpt-4 |
| 121 | pattern: analyze |
| 122 | stream: true |
| 123 | ` |
| 124 | tmpfile, err := os.CreateTemp("", "config.*.yaml") |
| 125 | if err != nil { |
| 126 | t.Fatal(err) |
| 127 | } |
| 128 | defer os.Remove(tmpfile.Name()) |
| 129 | |
| 130 | if _, err := tmpfile.Write([]byte(configContent)); err != nil { |
| 131 | t.Fatal(err) |
| 132 | } |
| 133 | if err := tmpfile.Close(); err != nil { |
| 134 | t.Fatal(err) |
| 135 | } |
| 136 | |
| 137 | // Test 1: Basic YAML loading |
| 138 | t.Run("Load YAML config", func(t *testing.T) { |
| 139 | oldArgs := os.Args |
| 140 | defer func() { os.Args = oldArgs }() |
| 141 | os.Args = []string{"cmd", "--config", tmpfile.Name()} |
| 142 | |
| 143 | flags, err := Init() |
| 144 | assert.NoError(t, err) |
| 145 | assert.Equal(t, 0.9, flags.Temperature) |
| 146 | assert.Equal(t, "gpt-4", flags.Model) |
| 147 | assert.Equal(t, "analyze", flags.Pattern) |
| 148 | assert.True(t, flags.Stream) |
| 149 | }) |
| 150 | |
| 151 | // Test 2: CLI overrides YAML |
| 152 | t.Run("CLI overrides YAML", func(t *testing.T) { |
| 153 | oldArgs := os.Args |
| 154 | defer func() { os.Args = oldArgs }() |
| 155 | os.Args = []string{"cmd", "--config", tmpfile.Name(), "--temperature", "0.7", "--model", "gpt-3.5-turbo"} |
| 156 | |
| 157 | flags, err := Init() |
| 158 | assert.NoError(t, err) |
| 159 | assert.Equal(t, 0.7, flags.Temperature) |
| 160 | assert.Equal(t, "gpt-3.5-turbo", flags.Model) |
| 161 | assert.Equal(t, "analyze", flags.Pattern) // unchanged from YAML |
| 162 | assert.True(t, flags.Stream) // unchanged from YAML |
| 163 | }) |
| 164 | |
| 165 | // Test 3: Invalid YAML config |
| 166 | t.Run("Invalid YAML config", func(t *testing.T) { |
| 167 | badConfig := ` |
| 168 | temperature: "not a float" |
| 169 | model: 123 # should be string |
| 170 | ` |
| 171 | badfile, err := os.CreateTemp("", "bad-config.*.yaml") |
| 172 | if err != nil { |
| 173 | t.Fatal(err) |