package modules import ( "testing" "github.com/kindredsystems/silo/internal/config" ) func boolPtr(v bool) *bool { return &v } func TestLoadState_DefaultsOnly(t *testing.T) { r := NewRegistry() cfg := &config.Config{} // Sessions depends on Auth; when auth is disabled via backward-compat // zero value, sessions must also be explicitly disabled. cfg.Modules.Sessions = &config.ModuleToggle{Enabled: boolPtr(false)} if err := LoadState(r, cfg, nil); err != nil { t.Fatalf("LoadState: %v", err) } // Auth defaults to true from registry, but cfg.Auth.Enabled is false // (zero value) and backward-compat applies, so auth ends up disabled. if r.IsEnabled(Auth) { t.Error("auth should be disabled (cfg.Auth.Enabled is false by default)") } } func TestLoadState_BackwardCompat(t *testing.T) { r := NewRegistry() cfg := &config.Config{} cfg.Auth.Enabled = true cfg.Odoo.Enabled = true if err := LoadState(r, cfg, nil); err != nil { t.Fatalf("LoadState: %v", err) } if !r.IsEnabled(Auth) { t.Error("auth should be enabled via cfg.Auth.Enabled") } if !r.IsEnabled(Odoo) { t.Error("odoo should be enabled via cfg.Odoo.Enabled") } } func TestLoadState_YAMLModulesOverrideCompat(t *testing.T) { r := NewRegistry() cfg := &config.Config{} cfg.Auth.Enabled = true // compat says enabled cfg.Modules.Auth = &config.ModuleToggle{Enabled: boolPtr(false)} // explicit says disabled cfg.Modules.Sessions = &config.ModuleToggle{Enabled: boolPtr(false)} // sessions depends on auth if err := LoadState(r, cfg, nil); err != nil { t.Fatalf("LoadState: %v", err) } if r.IsEnabled(Auth) { t.Error("modules.auth.enabled=false should override auth.enabled=true") } } func TestLoadState_EnableJobsAndDAG(t *testing.T) { r := NewRegistry() cfg := &config.Config{} cfg.Auth.Enabled = true cfg.Modules.Jobs = &config.ModuleToggle{Enabled: boolPtr(true)} cfg.Modules.DAG = &config.ModuleToggle{Enabled: boolPtr(true)} if err := LoadState(r, cfg, nil); err != nil { t.Fatalf("LoadState: %v", err) } if !r.IsEnabled(Jobs) { t.Error("jobs should be enabled") } if !r.IsEnabled(DAG) { t.Error("dag should be enabled") } } func TestLoadState_InvalidDependency(t *testing.T) { r := NewRegistry() cfg := &config.Config{} // Auth disabled (default), but enable jobs which depends on auth. cfg.Modules.Jobs = &config.ModuleToggle{Enabled: boolPtr(true)} err := LoadState(r, cfg, nil) if err == nil { t.Error("should fail: jobs enabled but auth disabled") } }