package config import "os" import "path/filepath" import "testing" import "time" func TestLoadDefaults(t *testing.T) { var cfg Config var err error cfg, err = Load("") if err != nil { t.Fatalf("Load() error: %v", err) } if cfg.DBDriver == "" || cfg.DBDSN == "" { t.Fatalf("defaults not populated: driver=%q dsn=%q", cfg.DBDriver, cfg.DBDSN) } if cfg.GitHTTPPrefix != "/git" { t.Fatalf("unexpected git prefix default: %s", cfg.GitHTTPPrefix) } if cfg.FrontendDir == "" { t.Fatalf("frontend_dir default missing") } } func TestLoadFromJSONAndEnvOverride(t *testing.T) { var dir string var path string var data string var err error var cfg Config dir = t.TempDir() path = filepath.Join(dir, "config.json") data = `{"db_driver":"sqlite","db_dsn":"file:test.db","auth_mode":"HyBrId","git_http_prefix":"/g"}` err = os.WriteFile(path, []byte(data), 0o644) if err != nil { t.Fatalf("write config file: %v", err) } t.Setenv("CODIT_DB_DSN", "file:override.db") t.Setenv("CODIT_FRONTEND_DIR", "/srv/codit/frontend") cfg, err = Load(path) if err != nil { t.Fatalf("Load() error: %v", err) } if cfg.DBDSN != "file:override.db" { t.Fatalf("env override failed: %s", cfg.DBDSN) } if cfg.AuthMode != "hybrid" { t.Fatalf("auth_mode normalization failed: %s", cfg.AuthMode) } if cfg.FrontendDir != "/srv/codit/frontend" { t.Fatalf("frontend_dir env override failed: %s", cfg.FrontendDir) } } func TestDurationUnmarshalJSON(t *testing.T) { var d Duration var err error err = d.UnmarshalJSON([]byte(`"90m"`)) if err != nil { t.Fatalf("UnmarshalJSON() string duration error: %v", err) } if d.Duration() != 90*time.Minute { t.Fatalf("unexpected duration: %v", d.Duration()) } err = d.UnmarshalJSON([]byte(`60000000000`)) if err != nil { t.Fatalf("UnmarshalJSON() numeric duration error: %v", err) } if d.Duration() != time.Duration(60000000000) { t.Fatalf("unexpected numeric duration: %v", d.Duration()) } }