- Add 022_workstations.sql migration (UUID PK, user_id FK, UNIQUE(user_id, name)) - Add Sessions module (depends on Auth, default enabled) with config toggle - Add WorkstationRepository with Upsert, GetByID, ListByUser, Touch, Delete - Add workstation handlers: register (POST upsert), list (GET), delete (DELETE) - Add /api/workstations routes gated by sessions module - Wire WorkstationRepository into Server struct - Update module tests for new Sessions module Closes #161
93 lines
2.5 KiB
Go
93 lines
2.5 KiB
Go
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")
|
|
}
|
|
}
|