func TestLoadConfigKeepsDefaultsForMissingFields(t *testing.T) {
dir := t.TempDir()
- writeConfig(t, dir, `{"endpoint": "api", "compactor": {"effort": "xhigh"}}`)
+ configWriteTest(t, dir, `{"endpoint": "api", "compactor": {"effort": "xhigh"}}`)
config, err := loadConfig(dir)
require.NoError(t, err)
require.Equal(t, Config{
- Endpoint: endpointAPI,
+ Endpoint: configEndpointAPI,
Compactor: ModelConfig{
- Model: "gpt-6-luna",
+ Model: "gpt-6.1-sol",
Effort: "xhigh",
},
}, config)
name string
text string
}{
- {"unknown field", `{"endpont": "api"}`},
- {"unknown nested field", `{"compactor": {"modle": "x"}}`},
- {"endpoint URL", `{"endpoint": "https://example.com/v1/responses"}`},
- {"empty model", `{"compactor": {"model": ""}}`},
- {"second object", `{} {}`},
- {"broken JSON", `{"endpoint": `},
+ {
+ name: "unknown field",
+ text: `{"endpont": "api"}`,
+ },
+ {
+ name: "unknown nested field",
+ text: `{"compactor": {"modle": "x"}}`,
+ },
+ {
+ name: "endpoint URL",
+ text: `{"endpoint": "https://example.com/v1/responses"}`,
+ },
+ {
+ name: "empty model",
+ text: `{"compactor": {"model": ""}}`,
+ },
+ {
+ name: "second object",
+ text: `{} {}`,
+ },
+ {
+ name: "broken JSON",
+ text: `{"endpoint": `,
+ },
}
for _, tc := range testCases {
t.Run(tc.name, func(t *testing.T) {
dir := t.TempDir()
- writeConfig(t, dir, tc.text)
+ configWriteTest(t, dir, tc.text)
_, err := loadConfig(dir)
require.Error(t, err)
}
}
-func TestDataDirFollowsTheOrder(t *testing.T) {
- root := t.TempDir()
- testCases := []struct {
- name string
- dir string
- xdg string
- home string
- want string
- }{
- {"ONECHAT_DIR first", filepath.Join(root, "a"), filepath.Join(root, "xdg"), root, filepath.Join(root, "a")},
- {"absolute XDG_DATA_HOME", "", filepath.Join(root, "xdg"), root, filepath.Join(root, "xdg", "onechat")},
- {"relative XDG_DATA_HOME ignored", "", "xdg", root, filepath.Join(root, ".local", "share", "onechat")},
- {"home directory last", "", "", root, filepath.Join(root, ".local", "share", "onechat")},
- }
-
- for _, tc := range testCases {
- t.Run(tc.name, func(t *testing.T) {
- t.Setenv("ONECHAT_DIR", tc.dir)
- t.Setenv("XDG_DATA_HOME", tc.xdg)
- t.Setenv("HOME", tc.home)
-
- dir, err := dataDir()
- require.NoError(t, err)
- require.Equal(t, tc.want, dir)
-
- info, err := os.Stat(dir)
- require.NoError(t, err)
- require.Equal(t, os.FileMode(0o700), info.Mode().Perm())
- })
- }
-}
-
-func TestDataDirFailsWithoutAHome(t *testing.T) {
- t.Setenv("ONECHAT_DIR", "")
- t.Setenv("XDG_DATA_HOME", "")
- t.Setenv("HOME", "")
-
- _, err := dataDir()
- require.ErrorContains(t, err, "ONECHAT_DIR")
-}
-
-func writeConfig(t *testing.T, dir, text string) {
+func configWriteTest(t *testing.T, dir, text string) {
t.Helper()
err := os.WriteFile(filepath.Join(dir, "config.json"), []byte(text), 0o600)