ax(mining): rename settings_manager tests to Good/Bad/Ugly convention
Some checks are pending
Security Scan / security (push) Waiting to run
Test / test (push) Waiting to run

All test functions in settings_manager_test.go now follow
TestFilename_Function_{Good,Bad,Ugly} per AX RFC-025 §Test Naming.
Added _Bad (load from missing path) and _Ugly (concurrent access) cases
where only descriptive suffixes existed before.

Co-Authored-By: Charon <charon@lethean.io>
This commit is contained in:
Claude 2026-04-02 10:23:40 +01:00
parent bf44c296d9
commit eb13ef5a21
No known key found for this signature in database
GPG key ID: AF404715446AEB41

View file

@ -6,7 +6,7 @@ import (
"testing"
)
func TestSettingsManager_DefaultSettings(t *testing.T) {
func TestSettingsManager_DefaultSettings_Good(t *testing.T) {
defaults := DefaultSettings()
if defaults.Window.Width != 1400 {
@ -26,36 +26,30 @@ func TestSettingsManager_DefaultSettings(t *testing.T) {
}
}
func TestSettingsManager_SaveAndLoad(t *testing.T) {
// Use a temp directory for testing
func TestSettingsManager_SaveAndLoad_Good(t *testing.T) {
tmpDir := t.TempDir()
settingsPath := filepath.Join(tmpDir, "settings.json")
// Create settings manager with custom path
sm := &SettingsManager{
settings: DefaultSettings(),
settingsPath: settingsPath,
}
// Modify settings
sm.settings.Window.Width = 1920
sm.settings.Window.Height = 1080
sm.settings.StartOnBoot = true
sm.settings.AutostartMiners = true
sm.settings.CPUThrottlePercent = 50
// Save
err := sm.Save()
if err != nil {
t.Fatalf("Failed to save settings: %v", err)
}
// Verify file exists
if _, err := os.Stat(settingsPath); os.IsNotExist(err) {
t.Fatal("Settings file was not created")
}
// Create new manager and load
sm2 := &SettingsManager{
settings: DefaultSettings(),
settingsPath: settingsPath,
@ -65,7 +59,6 @@ func TestSettingsManager_SaveAndLoad(t *testing.T) {
t.Fatalf("Failed to load settings: %v", err)
}
// Verify loaded values
if sm2.settings.Window.Width != 1920 {
t.Errorf("Expected width 1920, got %d", sm2.settings.Window.Width)
}
@ -83,7 +76,19 @@ func TestSettingsManager_SaveAndLoad(t *testing.T) {
}
}
func TestSettingsManager_UpdateWindowState(t *testing.T) {
func TestSettingsManager_SaveAndLoad_Bad(t *testing.T) {
// Load from a path that does not exist — must return an error.
sm := &SettingsManager{
settings: DefaultSettings(),
settingsPath: filepath.Join(t.TempDir(), "does_not_exist", "settings.json"),
}
if err := sm.Load(); err == nil {
t.Error("Expected error loading from missing path, got nil")
}
}
func TestSettingsManager_UpdateWindowState_Good(t *testing.T) {
tmpDir := t.TempDir()
settingsPath := filepath.Join(tmpDir, "settings.json")
@ -112,7 +117,7 @@ func TestSettingsManager_UpdateWindowState(t *testing.T) {
}
}
func TestSettingsManager_SetCPUThrottle(t *testing.T) {
func TestSettingsManager_SetCPUThrottle_Good(t *testing.T) {
tmpDir := t.TempDir()
settingsPath := filepath.Join(tmpDir, "settings.json")
@ -121,7 +126,6 @@ func TestSettingsManager_SetCPUThrottle(t *testing.T) {
settingsPath: settingsPath,
}
// Test enabling throttle
err := sm.SetCPUThrottle(true, 30)
if err != nil {
t.Fatalf("Failed to set CPU throttle: %v", err)
@ -134,19 +138,10 @@ func TestSettingsManager_SetCPUThrottle(t *testing.T) {
if settings.CPUThrottlePercent != 30 {
t.Errorf("Expected CPUThrottlePercent 30, got %d", settings.CPUThrottlePercent)
}
// Test invalid percentage (should be ignored)
err = sm.SetCPUThrottle(true, 150)
if err != nil {
t.Fatalf("Failed to set CPU throttle: %v", err)
}
settings = sm.Get()
if settings.CPUThrottlePercent != 30 { // Should remain unchanged
t.Errorf("Expected CPUThrottlePercent to remain 30, got %d", settings.CPUThrottlePercent)
}
}
func TestSettingsManager_SetMinerDefaults(t *testing.T) {
func TestSettingsManager_SetCPUThrottle_Bad(t *testing.T) {
// An out-of-range percentage (>100) must be ignored, leaving the prior value unchanged.
tmpDir := t.TempDir()
settingsPath := filepath.Join(tmpDir, "settings.json")
@ -155,7 +150,30 @@ func TestSettingsManager_SetMinerDefaults(t *testing.T) {
settingsPath: settingsPath,
}
defaults := MinerDefaults{
if err := sm.SetCPUThrottle(true, 30); err != nil {
t.Fatalf("Setup: failed to set initial throttle: %v", err)
}
if err := sm.SetCPUThrottle(true, 150); err != nil {
t.Fatalf("Expected no error on invalid percent, got: %v", err)
}
settings := sm.Get()
if settings.CPUThrottlePercent != 30 {
t.Errorf("Expected CPUThrottlePercent to remain 30 after invalid input, got %d", settings.CPUThrottlePercent)
}
}
func TestSettingsManager_SetMinerDefaults_Good(t *testing.T) {
tmpDir := t.TempDir()
settingsPath := filepath.Join(tmpDir, "settings.json")
sm := &SettingsManager{
settings: DefaultSettings(),
settingsPath: settingsPath,
}
minerDefaults := MinerDefaults{
DefaultPool: "stratum+tcp://pool.example.com:3333",
DefaultWallet: "wallet123",
DefaultAlgorithm: "rx/0",
@ -163,7 +181,7 @@ func TestSettingsManager_SetMinerDefaults(t *testing.T) {
CPUThrottleThreshold: 90,
}
err := sm.SetMinerDefaults(defaults)
err := sm.SetMinerDefaults(minerDefaults)
if err != nil {
t.Fatalf("Failed to set miner defaults: %v", err)
}
@ -177,7 +195,8 @@ func TestSettingsManager_SetMinerDefaults(t *testing.T) {
}
}
func TestSettingsManager_ConcurrentAccess(t *testing.T) {
func TestSettingsManager_ConcurrentAccess_Ugly(t *testing.T) {
// Ugly: concurrent reads and writes must not race or corrupt state.
tmpDir := t.TempDir()
settingsPath := filepath.Join(tmpDir, "settings.json")
@ -186,7 +205,6 @@ func TestSettingsManager_ConcurrentAccess(t *testing.T) {
settingsPath: settingsPath,
}
// Concurrent reads and writes
done := make(chan bool)
for i := 0; i < 10; i++ {
go func(n int) {
@ -198,12 +216,10 @@ func TestSettingsManager_ConcurrentAccess(t *testing.T) {
}(i)
}
// Wait for all goroutines
for i := 0; i < 10; i++ {
<-done
}
// Should complete without race conditions
state := sm.GetWindowState()
if state.Width < 800 || state.Width > 900 {
t.Errorf("Unexpected width after concurrent access: %d", state.Width)