Files
MrFastwind d55200886b docs: rewrite PLAN.md and update CODEBASE.md, README.md
- 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
2026-07-23 20:14:56 +02:00

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()")
}
}