package main import ( "os" "path/filepath" "testing" "github.com/stretchr/testify/require" ) func TestLoadConfigGivesDefaultsWithoutAFile(t *testing.T) { dir := t.TempDir() config, err := loadConfig(dir) require.NoError(t, err) require.Equal(t, defaultConfig(), config) require.NoFileExists(t, filepath.Join(dir, "config.json")) } func TestLoadConfigKeepsDefaultsForMissingFields(t *testing.T) { dir := t.TempDir() configWriteTest(t, dir, `{"endpoint": "api", "compactor": {"effort": "xhigh"}}`) config, err := loadConfig(dir) require.NoError(t, err) require.Equal(t, Config{ Endpoint: configEndpointAPI, Compactor: ModelConfig{ Model: "gpt-6.1-sol", Effort: "xhigh", }, }, config) } func TestLoadConfigRejectsInvalidFiles(t *testing.T) { testCases := []struct { name string text string }{ { 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() configWriteTest(t, dir, tc.text) _, err := loadConfig(dir) require.Error(t, err) }) } } func configWriteTest(t *testing.T, dir, text string) { t.Helper() err := os.WriteFile(filepath.Join(dir, "config.json"), []byte(text), 0o600) require.NoError(t, err) }