From a29d876ac42e69b54bbe9eba23c3d88c684a2985 Mon Sep 17 00:00:00 2001 From: bvandeusen Date: Sat, 18 Apr 2026 21:20:02 +0000 Subject: [PATCH] test(config): cover defaults, YAML load, missing file, env overrides --- internal/config/config_test.go | 80 ++++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 internal/config/config_test.go diff --git a/internal/config/config_test.go b/internal/config/config_test.go new file mode 100644 index 00000000..2466f545 --- /dev/null +++ b/internal/config/config_test.go @@ -0,0 +1,80 @@ +package config + +import ( + "os" + "path/filepath" + "testing" +) + +func TestDefault(t *testing.T) { + cfg := Default() + if cfg.Server.Address != ":4533" { + t.Errorf("default server address = %q, want :4533", cfg.Server.Address) + } + if cfg.Log.Level != "info" { + t.Errorf("default log level = %q, want info", cfg.Log.Level) + } +} + +func TestLoadYAML(t *testing.T) { + dir := t.TempDir() + path := filepath.Join(dir, "config.yaml") + content := []byte(`server: + address: ":9000" +database: + url: "postgres://example" +log: + level: "debug" + format: "json" +`) + if err := os.WriteFile(path, content, 0o644); err != nil { + t.Fatal(err) + } + cfg, err := Load(path) + if err != nil { + t.Fatalf("Load: %v", err) + } + if cfg.Server.Address != ":9000" { + t.Errorf("server.address = %q", cfg.Server.Address) + } + if cfg.Database.URL != "postgres://example" { + t.Errorf("database.url = %q", cfg.Database.URL) + } + if cfg.Log.Level != "debug" || cfg.Log.Format != "json" { + t.Errorf("log = %+v", cfg.Log) + } +} + +func TestLoadMissingFileReturnsDefaults(t *testing.T) { + cfg, err := Load(filepath.Join(t.TempDir(), "does-not-exist.yaml")) + if err != nil { + t.Fatalf("Load: %v", err) + } + if cfg.Server.Address != ":4533" { + t.Errorf("expected defaults, got %+v", cfg) + } +} + +func TestEnvOverrides(t *testing.T) { + t.Setenv("SMARTMUSIC_SERVER_ADDRESS", ":8080") + t.Setenv("SMARTMUSIC_DATABASE_URL", "postgres://env") + t.Setenv("SMARTMUSIC_LOG_LEVEL", "WARN") + t.Setenv("SMARTMUSIC_LOG_FORMAT", "JSON") + + cfg, err := Load("") + if err != nil { + t.Fatalf("Load: %v", err) + } + if cfg.Server.Address != ":8080" { + t.Errorf("server.address = %q", cfg.Server.Address) + } + if cfg.Database.URL != "postgres://env" { + t.Errorf("database.url = %q", cfg.Database.URL) + } + if cfg.Log.Level != "warn" { + t.Errorf("log.level = %q, want lowercased warn", cfg.Log.Level) + } + if cfg.Log.Format != "json" { + t.Errorf("log.format = %q, want lowercased json", cfg.Log.Format) + } +}