package config import ( "os" "testing" ) func TestDefault(t *testing.T) { cfg := Default() if cfg.Server.Host != "0.0.0.0" { t.Errorf("Expected host 0.0.0.0, got %s", cfg.Server.Host) } if cfg.Server.Port != 8080 { t.Errorf("Expected port 8080, got %d", cfg.Server.Port) } if cfg.SSL.Enabled { t.Error("Expected SSL to be disabled by default") } } func TestValidate(t *testing.T) { tests := []struct { name string modify func(*Config) wantErr bool }{ { name: "valid default config", modify: func(c *Config) {}, wantErr: false, }, { name: "invalid port - too low", modify: func(c *Config) { c.Server.Port = 0 }, wantErr: true, }, { name: "invalid port - too high", modify: func(c *Config) { c.Server.Port = 70000 }, wantErr: true, }, { name: "SSL enabled without cert", modify: func(c *Config) { c.SSL.Enabled = true c.SSL.CertFile = "" }, wantErr: true, }, { name: "SSL enabled without key", modify: func(c *Config) { c.SSL.Enabled = true c.SSL.CertFile = "cert.pem" c.SSL.KeyFile = "" }, wantErr: true, }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { cfg := Default() tt.modify(cfg) err := cfg.Validate() if (err != nil) != tt.wantErr { t.Errorf("Validate() error = %v, wantErr %v", err, tt.wantErr) } }) } } func TestLoad(t *testing.T) { // Create temporary config file content := ` server: host: 127.0.0.1 port: 3000 logging: level: DEBUG ` tmpfile, err := os.CreateTemp("", "config-*.yaml") if err != nil { t.Fatal(err) } defer os.Remove(tmpfile.Name()) if _, err := tmpfile.Write([]byte(content)); err != nil { t.Fatal(err) } if err := tmpfile.Close(); err != nil { t.Fatal(err) } cfg, err := Load(tmpfile.Name()) if err != nil { t.Fatalf("Failed to load config: %v", err) } if cfg.Server.Host != "127.0.0.1" { t.Errorf("Expected host 127.0.0.1, got %s", cfg.Server.Host) } if cfg.Server.Port != 3000 { t.Errorf("Expected port 3000, got %d", cfg.Server.Port) } if cfg.Logging.Level != "DEBUG" { t.Errorf("Expected level DEBUG, got %s", cfg.Logging.Level) } } func TestLoadNotFound(t *testing.T) { _, err := Load("/nonexistent/config.yaml") if err == nil { t.Error("Expected error for non-existent file") } }