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