- Full rewrite of PLAN.md to reflect current architecture (27 REST + 3 WS endpoints, embedded frontend, automation, scheduler, health check, GoReleaser CI) - Added health.go, mods.go, scheduler.go, robfig/cron dep to CODEBASE.md - Added Gitea Actions CI/CD section to CODEBASE.md - Added conventional commits to code style section - Added missing API routes and embed/ to README.md
126 lines
3.0 KiB
Go
126 lines
3.0 KiB
Go
package services
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
"testing"
|
|
)
|
|
|
|
func TestSettingsManager_LoadDefaults(t *testing.T) {
|
|
dir := t.TempDir()
|
|
sm := NewSettingsManager(dir)
|
|
|
|
s, err := sm.Load()
|
|
if err != nil {
|
|
t.Fatalf("Load() error = %v", err)
|
|
}
|
|
if s.IPPort != "0.0.0.0:2302" {
|
|
t.Errorf("IPPort = %q, want %q", s.IPPort, "0.0.0.0:2302")
|
|
}
|
|
if s.ServerParameters != "-server -world=empty -loadMissionToMemory -noPause" {
|
|
t.Errorf("ServerParameters = %q", s.ServerParameters)
|
|
}
|
|
if s.SteamBranch != "stable" {
|
|
t.Errorf("SteamBranch = %q, want %q", s.SteamBranch, "stable")
|
|
}
|
|
if s.SteamUser != "anonymous" {
|
|
t.Errorf("SteamUser = %q, want %q", s.SteamUser, "anonymous")
|
|
}
|
|
if s.Platform != "linux" {
|
|
t.Errorf("Platform = %q, want %q", s.Platform, "linux")
|
|
}
|
|
if s.AutoUpdateOnStartup {
|
|
t.Error("AutoUpdateOnStartup should be false by default")
|
|
}
|
|
if s.WasRunning {
|
|
t.Error("WasRunning should be false by default")
|
|
}
|
|
}
|
|
|
|
func TestSettingsManager_SaveLoadRoundTrip(t *testing.T) {
|
|
dir := t.TempDir()
|
|
sm := NewSettingsManager(dir)
|
|
|
|
s, err := sm.Load()
|
|
if err != nil {
|
|
t.Fatalf("Load() error = %v", err)
|
|
}
|
|
|
|
s.IPPort = "192.168.1.100:2400"
|
|
s.SteamUser = "myuser"
|
|
s.Platform = "windows"
|
|
s.CBASettings = "some_cba_content"
|
|
s.AutoUpdateOnStartup = true
|
|
s.WasRunning = true
|
|
s.ScheduledUpdate = "0 4 * * *"
|
|
|
|
if err := sm.Save(s); err != nil {
|
|
t.Fatalf("Save() error = %v", err)
|
|
}
|
|
|
|
// Verify file exists
|
|
if _, err := os.Stat(filepath.Join(dir, "settings.json")); os.IsNotExist(err) {
|
|
t.Fatal("settings.json not created")
|
|
}
|
|
|
|
// Load in a new manager to verify persistence
|
|
sm2 := NewSettingsManager(dir)
|
|
s2, err := sm2.Load()
|
|
if err != nil {
|
|
t.Fatalf("Load() error = %v", err)
|
|
}
|
|
if s2.IPPort != "192.168.1.100:2400" {
|
|
t.Errorf("IPPort = %q, want %q", s2.IPPort, "192.168.1.100:2400")
|
|
}
|
|
if s2.SteamUser != "myuser" {
|
|
t.Errorf("SteamUser = %q, want %q", s2.SteamUser, "myuser")
|
|
}
|
|
if s2.Platform != "windows" {
|
|
t.Errorf("Platform = %q, want %q", s2.Platform, "windows")
|
|
}
|
|
if s2.CBASettings != "some_cba_content" {
|
|
t.Errorf("CBASettings = %q, want %q", s2.CBASettings, "some_cba_content")
|
|
}
|
|
if !s2.AutoUpdateOnStartup {
|
|
t.Error("AutoUpdateOnStartup should be true")
|
|
}
|
|
if !s2.WasRunning {
|
|
t.Error("WasRunning should be true")
|
|
}
|
|
if s2.ScheduledUpdate != "0 4 * * *" {
|
|
t.Errorf("ScheduledUpdate = %q, want %q", s2.ScheduledUpdate, "0 4 * * *")
|
|
}
|
|
}
|
|
|
|
func TestSettingsManager_LoadMissingFile(t *testing.T) {
|
|
dir := t.TempDir()
|
|
sm := NewSettingsManager(dir)
|
|
|
|
s, err := sm.Load()
|
|
if err != nil {
|
|
t.Fatalf("Load() error = %v, want nil", err)
|
|
}
|
|
if s == nil {
|
|
t.Fatal("Load() returned nil settings")
|
|
}
|
|
if s.IPPort != "0.0.0.0:2302" {
|
|
t.Errorf("default IPPort = %q, want %q", s.IPPort, "0.0.0.0:2302")
|
|
}
|
|
}
|
|
|
|
func TestSettingsManager_SaveUpdatesTimestamp(t *testing.T) {
|
|
dir := t.TempDir()
|
|
sm := NewSettingsManager(dir)
|
|
|
|
s, _ := sm.Load()
|
|
s.SteamUser = "test"
|
|
if err := sm.Save(s); err != nil {
|
|
t.Fatalf("Save() error = %v", err)
|
|
}
|
|
|
|
s2, _ := sm.Load()
|
|
if s2.UpdatedAt.IsZero() {
|
|
t.Error("UpdatedAt should be set after Save()")
|
|
}
|
|
}
|